Использование макроса для удаления процедуры в модуле Excel VBA - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть книга Excel с несколькими модулями. Один модуль имеет несколько макросов (более 100). Я ищу способ ввести имя макроса в ячейку, затем есть кнопка, которая найдет этот макрос в модуле и удалит его. Я не хочу удалять весь модуль, потому что он имеет несколько макросов, которые все еще нужны.

1 Ответ

0 голосов
/ 13 апреля 2020

Попробуйте следующий Sub, пожалуйста. Требуется ссылка на «Microsoft Visual Basi c для расширяемости приложений 5.3». Удаляет процедуру из модуля активного документа. Код может быть легко адаптирован для удаления из любой открытой рабочей книги:

Private Sub DeleteProc(moduleName As String, procName As String)
'It needss a reference to 'Microsoft Visual Basic for Applications extensibility 5.3'
Dim VBCodeM As CodeModule, firstLine As Long, procLines As Long, WB As Workbook

Set WB = ActiveWorkbook 'you can use a different workbook

On Error Resume Next
 Set VBCodeM = WB.VBProject.VBComponents(moduleName).CodeModule
 If Err.Number = 9 Then
    Err.Clear: On Error GoTo 0
    MsgBox "No module named """ & moduleName & """ in workbook """ & WB.Name & """."
    Exit Sub
 End If
On Error GoTo 0

    'starting line for the procedure
    On Error Resume Next
     firstLine = VBCodeM.ProcStartLine(procName, vbext_pk_Proc)
     If Err.Number = 35 Then
        Err.Clear: On Error GoTo 0
        MsgBox "No procedure named """ & procName & """ in module """ & moduleName & """."
        Exit Sub
     End If
    On Error GoTo 0

    If firstLine > 0 Then

        'number of lines in the procedure
        procLines = VBCodeM.ProcCountLines(procName, vbext_pk_Proc)
         'Delete all the lines
         VBCodeM.DeleteLines firstLine, procLines
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...