Страницы: 1
RSS
Чистка Кодов. VBA
 
Как можно написать код, чтоб стирать определенные коды макросов (VBA) с определенного листа книги? Заранее очень благодарен!
 
application.vbe....
 
Че-то не понял!
 
Вот так можно удалить Module1  
 
Sub KillModule1()  
   Dim iModule As Object  
   With ThisWorkbook.VBProject.VBComponents  
       For Each iModule In ThisWorkbook.VBProject.VBComponents  
           If iModule.Name = "Module1" Then .Remove iModule  
   Next  
   End With  
End Sub
 
Нет, не удалять весь модуль, а удалять определенные коды макросов с Листа где они написаны. Я думаю нам надо сперва выбрать по имени некоторые только коды и затем удалить с листа.
 
Я не знаю, как удалить отдельный макрос в модуле. Если узнаете - сообщите.  
 
Вот вам интересная ссылка    
 
http://www.vbstreets.ru/VBA/Articles/65935.aspx
 
Сервис -> Макрос -> Безопасность -> Надежные издатели -> [+] Доверять доступ к Visual Basic Project
 
Для модуля первого листа:  
Sub TestVBE()  
MsgBox Application.VBE.VBProjects.Item(1).VBComponents(2).CodeModule.Lines(1, 1)    
End Sub  
 
Циклом или ещё как подбираешь требуемые циферки и DeleteLines(от,сколько).
 
Спасибо,    
я посметрел ссылку там сложнее, строки удаляет. наверно будет проше удалять макросы по имени?  
А как удалить просто определенные макросы?
 
Вот нашёл  
 
Source: http://msoffice.nm.ru/faq/macros/module.htm#faq47  
 
Sub DeleteProcedure()  
Dim iProcedure As String  
Dim iVBComponent As Object  
Dim iStartLine As Long  
Dim iCountLines As Long  
Dim Killed As Boolean  
   iProcedure = InputBox(Prompt:="Введите имя макроса," & _  
   vbCrLf & "который требуется удалить", Title:="Удаление макроса")  
   If iProcedure$ = "" Then _  
   MsgBox "Вы не указали имя ненужного макроса", 48, "Ошибка": Exit Sub  
   For Each iVBComponent In ActiveWorkbook.VBProject.VBComponents  
       With iVBComponent.CodeModule  
            If .Find("Sub " & _  
               iProcedure$, 1, 1, .CountOfLines, 1) = True Then  
               iStartLine& = .ProcStartLine(iProcedure$, 0)  
               iCountLines& = .ProcCountLines(iProcedure$, 0)  
               .DeleteLines iStartLine&, iCountLines&  
               Killed = True  
               Exit For  
            End If  
       End With  
   Next  
   If Killed = True Then  
       MsgBox "Макрос " & iProcedure$ & " удалён!", 64, "Удаление макроса"  
   Else  
       MsgBox "Макрос " & iProcedure$ & " не найден!", 48, "Удаление макроса"  
   End If  
End Sub
 
Спасибо. Знаешь для чего это нужно было? Просто я когда копирую определенный лист, вот там на создавшемся новом листе надо было удалить некоторые макросы, прибывшие от того листа. Вот я хотел чтоб когда лист копировался внутри этого кода пришить удаление некоторых кодов, так как в новом листе некоторые из них непонадобиться!  
Т.е мне не надо выводить форму, что спрашивала которую удалить, а я заранее напишу какую надо удалить! (Удалять не с модуля а с образовавшегося копий листа)  
Заранее спасибо!
 
{quote}{login=to........Pavel55}{date=25.06.2008 03:51}{thema=}{post}Спасибо. Знаешь для чего это нужно было? Просто я когда копирую определенный лист, вот там на создавшемся новом листе надо было удалить некоторые макросы, прибывшие от того листа. Вот я хотел чтоб когда лист копировался внутри этого кода пришить удаление некоторых кодов, так как в новом листе некоторые из них непонадобиться!  
Т.е мне не надо выводить форму, что спрашивала которую удалить, а я заранее напишу какую надо удалить! (Удалять не с модуля а с образовавшегося копий листа)  
Заранее спасибо!{/post}{/quote}  
А не проще было эти лишние макросы хранить не  модуле листа, а в модуле проекта (Module1)?  
Если же это код, реагирующий на события листа, то его можно с минимальными корректировками переписать в модуль ЭтаКнига.
 
У меня и так коды написаны в Модуль1 Проекта, а на листе написаны только минимально ссылки на них, (т.е "Call ..."), а мне надо чтоб один образцовый лист копировался и на копий удалялись ненужные уже (не все) коды, я их заранее перечислил бы! Ну это думаю не критично, т.к каждый код состоит из только 3-строк (Private Sub, Call...., и End Sub)  
и таких где то 10-кодов!!!  
 А на счет ЭТА КНИГА я этим не пользовался, не знаю его важность, просто когда я писал основной макрос там и вызывал с листа с помощью CALL тогда он не вызывался, а когда написал код в Модуле1 Проекта тогда получился. Если можете обясните разницу
 
{quote}{login=:)}{date=25.06.2008 11:45}{thema=Re: }{post}{quote}{login=to........Pavel55}{date=25.06.2008 03:51}{thema=}{post}Спасибо. Знаешь для чего это нужно было? Просто я когда копирую определенный лист, вот там на создавшемся новом листе надо было удалить некоторые макросы, прибывшие от того листа. Вот я хотел чтоб когда лист копировался внутри этого кода пришить удаление некоторых кодов, так как в новом листе некоторые из них непонадобиться!  
Т.е мне не надо выводить форму, что спрашивала которую удалить, а я заранее напишу какую надо удалить! (Удалять не с модуля а с образовавшегося копий листа)  
Заранее спасибо!{/post}{/quote}  
А не проще было эти лишние макросы хранить не  модуле листа, а в модуле проекта (Module1)?  
Если же это код, реагирующий на события листа, то его можно с минимальными корректировками переписать в модуль ЭтаКнига.{/post}{/quote}  
Добрый день!  
Например, есть OptionButton25 на Лист1. Код обработки события Click написан в Лист1. Как перенести код в Модуль1, чтобы работало оттуда, подскажите?  
Спасибо!
 
Добрый День Дмитрий! Короче код вставь в Модуль, и он должен начинаться не с Private Sub а просто Sub и имя Макроса. A код с листа надо убрать! И чтоб ссылалось на Модуль тебе надо написать на Лист1 код, например  
 
Private Sub OptionButton25.Click ()  
Call "Имя макроса с модуля"  
End Sub  
 
и все
With my best regards,      Inter_E
 
Спасибо, а если перенести код в модуль ЭтаКнига?  
Нужно, чтобы в модулях Лист1, Лист2 и т.д. не было кода..
 
Если зделать как в случае Модуль1, то не будет работать, у меня не работало. Я думаю лучше не переносить в Эта книга. Я просто об Эта книга не знаю для чего она нужна. Ты лучше по эксперементируй. И мне обяснишь потом? Зачем нужна Эта книга? ОК?
With my best regards,      Inter_E
 
www.spkk.ru Кондиционеры тут
Страницы: 1
Читают тему
Наверх