使用 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