Добрый день!
У меня Excel 2010. Сделал макрос, который открывает файл формата html, переносит лист с загруженными данными в ThisWorkbook, переименовывает лист в "EGRN" и в модуль этого нового листа добавляет текст макроса для события SelectionChange. Лист "EGRN" периодически создается новый, поэтому и макрос для SelectionChange приходится все время добавлять на новый лист. Код для добавления текста макроса в модуль нашел в интернете.
Но макрос ведет себя странно - то все работает нормально, то возникает ошибка 9 в этой строке:
With ThisWorkbook.VBProject.VBComponents(ThisWorkbook.Sheets("EGRN").CodeName).CodeModule
и текст макроса для события SelectionChange в модуль листа EGRN не добавляется.
Точно отловить, в каком случае возникает ошибка, не получается. В большинстве случаев в первый раз после отладки (компиляции и сохранения файла) макрос срабатывает нормально, а потом, после удаления листа EGRN при загрузке нового html возникает ошибка. Но ошибка возникает не всегда!
Буду признателен на подсказку, что я сделал не так. Спасибо!
Код |
---|
Sub OpenHTML() fff = Application.GetOpenFilename("Все веб-страницы,*.html") If fff = "False" Then Exit Sub Workbooks.Open (fff) ActiveWorkbook.Sheets(1).Name = "EGRN" ActiveWorkbook.Sheets("EGRN").Move After:=ThisWorkbook.Sheets("REPORT") Dim lLineNum As Long With ThisWorkbook.VBProject.VBComponents(ThisWorkbook.Sheets("EGRN").CodeName).CodeModule lLineNum = .CreateEventProc("SelectionChange", "Worksheet") lLineNum = lLineNum + 1 .InsertLines lLineNum, "Static previous_selection As String" lLineNum = lLineNum + 1 .InsertLines lLineNum, "If previous_selection <> """" Then" lLineNum = lLineNum + 1 .InsertLines lLineNum, "Range(previous_selection).Interior.ColorIndex = xlColorIndexNone" lLineNum = lLineNum + 1 .InsertLines lLineNum, "End If" lLineNum = lLineNum + 1 .InsertLines lLineNum, "Target.Interior.Color = vbYellow" lLineNum = lLineNum + 1 .InsertLines lLineNum, "previous_selection = Target.Address" End With ThisWorkbook.VBProject.VBE.mainwindow.Visible = False End Sub |