Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удалить макрос макросом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить макрос макросом (Макросы/Sub)
Удалить макрос макросом
ОлеггелО Дата: Вторник, 01.12.2015, 17:54 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 128
Репутация: 20 ±
Замечаний: 0% ±

Здравствуйте! Удаляю все макросы из модулей листов другим макросом, почему-то оставляет в модуле листа с именем "7" макрос и не хочет его удалить. Подскажите, что делаю неправильно!? И как правильно?
Макрос в файле-примере, в каждом модуле листа тоже вставил какой-то макрос для удаления.
К сообщению приложен файл: 6173262.xlsm (34.3 Kb)
 
Ответить
СообщениеЗдравствуйте! Удаляю все макросы из модулей листов другим макросом, почему-то оставляет в модуле листа с именем "7" макрос и не хочет его удалить. Подскажите, что делаю неправильно!? И как правильно?
Макрос в файле-примере, в каждом модуле листа тоже вставил какой-то макрос для удаления.

Автор - ОлеггелО
Дата добавления - 01.12.2015 в 17:54
Manyasha Дата: Вторник, 01.12.2015, 18:46 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
ОлеггелО, 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]


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Вторник, 01.12.2015, 21:37
 
Ответить
СообщениеОлеггелО, 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]

Автор - Manyasha
Дата добавления - 01.12.2015 в 18:46
RAN Дата: Вторник, 01.12.2015, 19:01 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
sh.Index - индекс листа.
Почему вы решили, что он соответствует индексу VBComponents ?
И чем вам имя не угодило?
[vba]
Код
Set oVBComponent = ActiveWorkbook.VBProject.VBComponents(sh.CodeName)
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщениеsh.Index - индекс листа.
Почему вы решили, что он соответствует индексу VBComponents ?
И чем вам имя не угодило?
[vba]
Код
Set oVBComponent = ActiveWorkbook.VBProject.VBComponents(sh.CodeName)
[/vba]

Автор - RAN
Дата добавления - 01.12.2015 в 19:01
ОлеггелО Дата: Вторник, 01.12.2015, 19:04 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 128
Репутация: 20 ±
Замечаний: 0% ±

Manyasha, Ваш код при выполнении выдаёт ошибку (ругается на строку: For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents(1)). И ещё: не значит ли строка в макросе: shIndex = oVBComponent.Properties(6).Value, что удаление будет происходить только из шести листов? В книге их может быть любое количество.
К сообщению приложен файл: 3139796.png (5.5 Kb)
 
Ответить
СообщениеManyasha, Ваш код при выполнении выдаёт ошибку (ругается на строку: For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents(1)). И ещё: не значит ли строка в макросе: shIndex = oVBComponent.Properties(6).Value, что удаление будет происходить только из шести листов? В книге их может быть любое количество.

Автор - ОлеггелО
Дата добавления - 01.12.2015 в 19:04
ОлеггелО Дата: Вторник, 01.12.2015, 19:39 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 128
Репутация: 20 ±
Замечаний: 0% ±

RAN, Спасибо! Как раз это Ваше (Set oVBComponent = ActiveWorkbook.VBProject.VBComponents(sh.CodeName)), угодило по всем параметрам! Почему сам об этом не подумал? Сам удивлён!!
 
Ответить
СообщениеRAN, Спасибо! Как раз это Ваше (Set oVBComponent = ActiveWorkbook.VBProject.VBComponents(sh.CodeName)), угодило по всем параметрам! Почему сам об этом не подумал? Сам удивлён!!

Автор - ОлеггелО
Дата добавления - 01.12.2015 в 19:39
Manyasha Дата: Вторник, 01.12.2015, 21:37 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
выдаёт ошибку

забыла убрать хвостик (в посте выше поправила), [vba]
Код
For Each oVBComponent In ActiveWorkbook.VBProject.VBComponent
[/vba]
В книге их может быть любое количество

не важно сколько листов, .Properties(6) - свойство, кторое возвращает номер листа в книге (6 - это просто номер этого свойства)

воспользуйтесь лучше советом от RAN, я перемудрила :)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение
выдаёт ошибку

забыла убрать хвостик (в посте выше поправила), [vba]
Код
For Each oVBComponent In ActiveWorkbook.VBProject.VBComponent
[/vba]
В книге их может быть любое количество

не важно сколько листов, .Properties(6) - свойство, кторое возвращает номер листа в книге (6 - это просто номер этого свойства)

воспользуйтесь лучше советом от RAN, я перемудрила :)

Автор - Manyasha
Дата добавления - 01.12.2015 в 21:37
RAN Дата: Вторник, 01.12.2015, 22:19 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
забыла убрать хвостик (в посте выше поправила),

Выше поправила, тут перехорошила. :)
Для разнообразия и ознакомления
[vba]
Код
Sub ww()
    For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count
        Debug.Print i & "    " & ActiveWorkbook.VBProject.VBComponents(i).Name
    Next
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
забыла убрать хвостик (в посте выше поправила),

Выше поправила, тут перехорошила. :)
Для разнообразия и ознакомления
[vba]
Код
Sub ww()
    For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count
        Debug.Print i & "    " & ActiveWorkbook.VBProject.VBComponents(i).Name
    Next
End Sub
[/vba]

Автор - RAN
Дата добавления - 01.12.2015 в 22:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить макрос макросом (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!