【问题标题】:VBA Textbox : after entering each letter its skips to next row and column before entering the full wordVBA文本框:输入每个字母后,在输入完整单词之前跳到下一行和下一列
【发布时间】:2018-01-25 23:33:53
【问题描述】:

我有一些我在 VBA 中使用的代码,我通过 VBA 表单将数据输入到 Excel 工作表中,该表单将同时垂直和水平填充 Excel 工作表,但每次我输入一个字母时它都会跳过在表单中提交之前没有完整输入单词的下一列和下一行。请问这个怎么解决。

Private Sub txtLocation_Change()
  Dim ws As Worksheet
  Set ws = Worksheets("Location")
  Dim newRow As Long
  newRow = Application.WorksheetFunction.CountA(ws.Range("A:A")) + 1
  newCol = Application.WorksheetFunction.CountA(ws.Range("B:H")) + 1
  ws.Cells(newRow, 1).Value = Me.txtLocation.Value
  ws.Cells(1, newRow).Value = Me.txtLocation.Value
End Sub

这是显示的内容

【问题讨论】:

  • 每次内容改变时触发该事件,例如添加单个字母。
  • 是的。按照@CLR 所说,从txtLocation 框中的Change 事件中删除代码,并使用命令按钮更新文本框值(一旦完全输入)。

标签: vba excel


【解决方案1】:

该函数使用CountA 函数计算存在多少行,并在最后一行之后添加一个值。

下次执行该函数时,CountA 将再计算一行并处理下一行。

也许您想在打开表单时计算行数,只计算一次,并在表单打开时使用该数字。

【讨论】:

    【解决方案2】:

    您正在使用Change 事件,每次对文本框进行微小更改时都会触发该事件。

    相反,请考虑使用 AfterUpdate 事件,一旦您离开该字段就会触发 - 即完成输入并继续。

    Private SubtxtLocation_AfterUpdate()

      Dim ws As Worksheet
      Set ws = Worksheets("Location")
      Dim newRow As Long
      newRow = Application.WorksheetFunction.CountA(ws.Range("A:A")) + 1
      newCol = Application.WorksheetFunction.CountA(ws.Range("B:H")) + 1
      ws.Cells(newRow, 1).Value = Me.txtLocation.Value
      ws.Cells(1, newRow).Value = Me.txtLocation.Value
    
    End Sub
    

    【讨论】:

    • 乐于助人!如果您愿意,请让其他人有机会提供更好的答案,但是当您对所需的任何答案感到满意时,请不要忘记将其标记为已回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多