Запустить макрос 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

работает как шарм.

Другие вопросы по тегам