Запустить макрос VBA при редактировании ячейки
Я просто пытаюсь написать поисковый макрос в листе Excel. Как я могу запустить макрос динамически во время редактирования ячейки. При записи в ячейку макрос поиска должен запускаться в фоновом режиме, причем каждый символ добавляется или удаляется не только в конце.Worksheet_Change(ByVal Target As Range)
только начинается, когда редактирование завершено (нажата кнопка возврата или выбрана другая ячейка).
Благодарю.
2 ответа
Ты не можешь Механизм кода не будет работать, пока Excel находится в режиме редактирования. Пользователь должен вводить текст не в ячейку, например в элемент управления на листе или в форму пользователя.
Спасибо Дику Куслейке за то, что он ответил на мой вопрос и поставил меня на правильный путь.
Вот окончательное решение для тех, кто имеет подобные требования. Он в основном работает с 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
работает как шарм.