删除一个函数如果它存在于用户窗体中,则通过 VBA 编码



使用 vba 编码删除用户表单中的子例程。我试过这段代码

Sub DeleteProcedureCode( _
    ByVal DeleteFromModuleName As String, ByVal ProcedureName As String)
' deletes ProcedureName from DeleteFromModuleName in wb
Dim VBCM As CodeModule, ProcStartLine As Long, ProcLineCount As Long
    On Error Resume Next
    Set VBCM = ActiveWorkbook.VBProject.VBComponents(DeleteFromModuleName).CodeModule
    If Not VBCM Is Nothing Then
        ' determine if the procedure exist in the codemodule
        ProcStartLine = 0
        ProcStartLine = VBCM.ProcStartLine(ProcedureName, vbext_pk_Proc)
        If ProcStartLine > 0 Then ' prosedyren finnes, slett den
            ProcLineCount = VBCM.ProcCountLines(ProcedureName, vbext_pk_Proc)
            VBCM.DeleteLines ProcStartLine, ProcLineCount
        End If
        Set VBCM = Nothing
    End If
    On Error GoTo 0
End Sub

但这会抛出一个错误,指出用户定义未定义

我不知道

如何删除过程,但我可以给你一个类似的行为:

Public lockedProcedures As Variant
Sub lockProcedure(name As String)
    If Not IsArray(lockedProcedures) Then
        ReDim lockedProcedures(1) As String
    Else
        ReDim Preserve lockedProcedures(UBound(lockedProcedures) + 1)
    End If
    lockedProcedures(UBound(lockedProcedures)) = name
End Sub
Function isLocked(name As String)
    If (UBound(Filter(lockedProcedures, name)) > -1) Then
        MsgBox name & " is locked!"
        isLocked = True
    Else
        isLocked = False
    End If
End Function
Sub test()
    Call lockProcedure("test2")
End Sub
Sub test2()
    if not isLocked("test2") then
        Code...
    end if
End Sub

最新更新