Добрый день!
У меня 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
|