Тема: Скрипт подвисает при вызове метода ActiveSheet.Cells.Find(txt)
Имеется таблица на 12 колонок, 46000 строк, заполнена текстами. Также имеется чертёж, в котором присутствуют некоторые тексты из первой колонки в виде примитивов AcDbText. Задача - ткнуть такой текстовый примитив и узнать сопоставленный ему текст из шестой колонки таблицы. Вот мой макрос:
Public Sub FindAnswer() Dim txt As String Dim rnge, excapp, excsht ActiveDocument.ActiveSelectionSet.Clear ActiveDocument.ActiveSelectionSet.SelectOnScreen If ActiveDocument.ActiveSelectionSet.Item(0).ObjectName <> "AcDbText" Then MsgBox "Выбран не текст! Выбран " & ActiveDocument.ActiveSelectionSet.Item(0).ObjectName Else txt = ActiveDocument.ActiveSelectionSet.Item(0).TextString Set excapp = GetObject(, "Excel.Application") Set excsht = excapp.ActiveSheet Set rnge = excsht.Columns(1).Find(txt) If rnge Is Nothing Then MsgBox "Текст не найден в таблице" Else MsgBox excsht.Cells(rnge.Row, 6).Value Set rnge = Nothing End If Set excapp = Nothing Set excsht = Nothing End If ActiveDocument.ActiveSelectionSet.Clear End Sub
Так вот когда я выбираю тексты, лежащие в "верхних" рядах таблицы, макрос реагирует быстро. А вот если выбрать текст в ряду номер эдак 41834, то макрос подвисает на неопределённое время. Но! Стоит только на таскбаре ткнуть Эксель, как макрос тут же "отвисает" и выдаёт найденную информацию из шестой колонки этого 41834 ряда.
Почему так происходит ? Может, я что-то не так напрограммил, хотя задача очень простая...