Здравствуйте! Удаляю все макросы из модулей листов другим макросом, почему-то оставляет в модуле листа с именем "7" макрос и не хочет его удалить. Подскажите, что делаю неправильно!? И как правильно? Макрос в файле-примере, в каждом модуле листа тоже вставил какой-то макрос для удаления.
Здравствуйте! Удаляю все макросы из модулей листов другим макросом, почему-то оставляет в модуле листа с именем "7" макрос и не хочет его удалить. Подскажите, что делаю неправильно!? И как правильно? Макрос в файле-примере, в каждом модуле листа тоже вставил какой-то макрос для удаления.ОлеггелО
ОлеггелО, sh.Index - возвращает номер листа в книге! Они не соответствуют номерам этих же листов в проекте VBA. Посмотрите слева в окошке VBAProject, в каком порядке они идут (по алфавиту, а не как у Вас).
Поэтому, код из скрытого листа у Вас удаляется, хотя не должен, а из нужного не удаляется
вот так попробуйте [vba]
Код
Sub Macros_Delete() Dim oVBComponent As Object For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents With oVBComponent If .Type = 100 And oVBComponent.Name <> "ЭтаКнига" Then Debug.Print oVBComponent.Name shIndex = oVBComponent.Properties(6).Value If Sheets(shIndex).Visible = xlSheetVisible Then .CodeModule.DeleteLines 1, .CodeModule.CountOfLines End If End With Next Set oVBComponent = Nothing End Sub
[/vba]
ОлеггелО, sh.Index - возвращает номер листа в книге! Они не соответствуют номерам этих же листов в проекте VBA. Посмотрите слева в окошке VBAProject, в каком порядке они идут (по алфавиту, а не как у Вас).
Поэтому, код из скрытого листа у Вас удаляется, хотя не должен, а из нужного не удаляется
вот так попробуйте [vba]
Код
Sub Macros_Delete() Dim oVBComponent As Object For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents With oVBComponent If .Type = 100 And oVBComponent.Name <> "ЭтаКнига" Then Debug.Print oVBComponent.Name shIndex = oVBComponent.Properties(6).Value If Sheets(shIndex).Visible = xlSheetVisible Then .CodeModule.DeleteLines 1, .CodeModule.CountOfLines End If End With Next Set oVBComponent = Nothing End Sub
Manyasha, Ваш код при выполнении выдаёт ошибку (ругается на строку: For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents(1)). И ещё: не значит ли строка в макросе: shIndex = oVBComponent.Properties(6).Value, что удаление будет происходить только из шести листов? В книге их может быть любое количество.
Manyasha, Ваш код при выполнении выдаёт ошибку (ругается на строку: For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents(1)). И ещё: не значит ли строка в макросе: shIndex = oVBComponent.Properties(6).Value, что удаление будет происходить только из шести листов? В книге их может быть любое количество.ОлеггелО
RAN, Спасибо! Как раз это Ваше (Set oVBComponent = ActiveWorkbook.VBProject.VBComponents(sh.CodeName)), угодило по всем параметрам! Почему сам об этом не подумал? Сам удивлён!!
RAN, Спасибо! Как раз это Ваше (Set oVBComponent = ActiveWorkbook.VBProject.VBComponents(sh.CodeName)), угодило по всем параметрам! Почему сам об этом не подумал? Сам удивлён!!ОлеггелО