编辑单元格时启动VBA宏

时间:2014-11-10 16:24:07

标签: excel vba excel-vba

我只是尝试在Excel工作表中编写搜索宏。如何在编辑单元格时动态启动宏。在单元格中写入时,搜索宏应该在后台运行,每个字符都添加或删除,而不仅仅是在结尾处。 Worksheet_Change(ByVal Target As Range)仅在编辑完成时启动(返回被点击或其他单元格被选中)。

感谢。

2 个答案:

答案 0 :(得分:6)

你做不到。当Excel处于编辑模式时,代码引擎将不会运行。您必须让用户以单元格以外的方式输入文本 - 例如工作表上的控件或用户窗体上的控件。

答案 1 :(得分:1)

感谢Dick Kusleika回答我的问题并让我走上正轨。

这是任何有类似要求的人的最终解决方案。它基本上与ActiveX TextBox一起用于输入搜索字符串。宏,而不是在搜索区域中查找包含搜索字符串的所有条目。搜索字段中所有其他已填充的行将被隐藏。这在写入TextBox时立即起作用。因此,当删除搜索字符串中的字符时,如果合适,将立即显示一次隐藏的行。

Private Sub TextBox1_Change()
 Dim searchArea As Range, searchRow As Range, searchCell As Range
 Dim searchString As String
 Dim lastRow As Integer

 Application.ScreenUpdating = False
 searchString = "*" & LCase(TextBox1.Value) & "*"

 ' unhide rows to have the full search field when editing
 Rows.Hidden = False

 lastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
 Set searchArea = Me.Range("A5", "A" & lastRow) 'Me.Range("A5").End(xlDown))
 searchArea.EntireRow.Hidden = True

 For Each searchRow In searchArea.Rows
   For Each searchCell In searchRow.Cells
     If LCase(searchCell) Like searchString Then
       searchRow.Hidden = False
       Exit For
     End If
   Next searchCell
 Next searchRow

 Application.Goto Cells(1), True
 Application.ScreenUpdating = True

End Sub

就像一个魅力。