В этой статье мы создадим макрос для удаления другого макроса из модуля.

Мы используем Module1, который содержит SampleProcedure в качестве образца макроса, который мы хотим удалить.

ArrowMain

ArrowRawData

Объяснение кода

Установите VBCM = WB.VBProject.VBComponents (DeleteFromModuleName) .CodeModule Приведенный выше код используется для создания объекта определенного модуля.

ProcStartLine = VBCM.ProcStartLine (Имя процедуры, vbext_pk_Proc)

Приведенный выше код используется для получения номера начальной строки определенной процедуры.

ProcLineCount = VBCM.ProcCountLines (Имя процедуры, vbext_pk_Proc)

Приведенный выше код используется для подсчета количества строк в определенной процедуре.

VBCM.DeleteLines ProcStartLine, ProcLineCount Приведенный выше код используется для удаления всех строк в определенной процедуре.

Пожалуйста, введите код ниже

Option Explicit

Sub DeleteProcedureCode(ByVal DeleteFromModuleName As String, ByVal ProcedureName As String)

'Declaring variables

Dim VBCM As CodeModule, ProcStartLine As Long, ProcLineCount As Long

Dim WB As Workbook

On Error Resume Next

'Creating object of active workbook

Set WB = ActiveWorkbook

'Creating object of workbook module

Set VBCM = WB.VBProject.VBComponents(DeleteFromModuleName).CodeModule

'Checking whether the procedure exist in the codemodule

If Not VBCM Is Nothing Then



ProcStartLine = 0



'Function assigning the line no. of starting line for the procedure

ProcStartLine = VBCM.ProcStartLine(ProcedureName, vbext_pk_Proc)



If ProcStartLine > 0 Then



'Function assign the no. of lines in the procedure

ProcLineCount = VBCM.ProcCountLines(ProcedureName, vbext_pk_Proc)



'Delete all the lines in the procedure

VBCM.DeleteLines ProcStartLine, ProcLineCount



End If

Set VBCM = Nothing

End If

On Error GoTo 0

End Sub

Sub CallingProcedure()

'Declaring variables

Dim ModuleName, ProcedureName As String

'Getting value for module and procedure name from textboxes

ModuleName = Sheet1.TextBox1.Value

ProcedureName = Sheet1.TextBox2.Value

'Calling DeleteProcedureCode macro

DeleteProcedureCode ModuleName, ProcedureName



End Sub

Если вам понравился этот блог, поделитесь им с друзьями на Facebook и Facebook.

Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]