我希望能够阻止一个特定的按钮("Button 4925")运行它所分配的宏,即使它被点击。基本上,当你点击它时,它要么什么都不做,要么显示一条消息说:"这是一个不能删除的重要项目 "换句话说,我希望只有当点击的按钮在单元格A12中时才能退出子程序。否则,就像正常运行代码一样。考虑到我是一个非常初级的VBA.一些信息:该按钮是一个表单控制按钮。不是一个Active X按钮。它被工作表上的另一个宏复制和粘贴。分配的宏是写在标准模块下的,分配的宏功能是删除相对范围的行。下面是代码。
Sub Delete_Button()
' Delete_Button Macro
' Step 1: Select the cell under the clicked button
Dim r As Range
Dim s As Object
Set r = ActiveSheet.Buttons(Application.Caller).TopLeftCell
r.Select
' Step 2: delete all buttons relative to the selected cell from step 1
StartCell = ActiveCell.Offset(-5, 0).Address
EndCell = ActiveCell.Offset(0, 0).Address
For Each s In ActiveSheet.DrawingObjects
If Not Intersect(Range(StartCell, EndCell), s.TopLeftCell) Is Nothing Then
s.Delete
End If
Next s
' Step 3: delete the rows relative to the selected cell from step 1
ActiveCell.Offset(-7, 0).Rows("1:9").EntireRow.Select
Selection.Delete Shift:=xlUp
ActiveCell.Offset(-4, 0).Range("A1").Select
End Sub
你必须 "告诉 "代码,在某种程度上,它必须不删除的范围。
所以,我建议你创建一个 Private
变量在模块顶部保留按钮代码(在声明区)。
Private stopButCode As Boolean
比方说,你必须让这个变量 True
. 使用一个复选框,或在另一个控件中使用一段代码,使其成为 True
.
按钮代码必须以如下方式调整。
If Not stopButCode Then
'delete whatever is to be deleted
Else
MsgBox "Deletion not allowed..."
Exit Sub
End If
Edited:如果你想让代码只在 "A12 "单元格上的按钮不工作,你可以使用如下方式调整你的代码。
Dim r As Range
Dim s As Object
Set r = ActiveSheet.Buttons(Application.Caller).TopLeftCell
If r.Address = "$A$12" then Exit Sub
'here follows your existing code...
假设分配给按钮的宏的名字是: Button_4925_click
然后在开头添加以下一行 Exit Sub
即
Sub Button_4925_click ()
Exit Sub
' remaining code will not be executed
End Sub
更新: 根据添加的信息(评论和帖子),您可以检查按钮的位置,并退出子项目。
Sub Button_4925_click ()
Dim sh As Shape
Set sh = ActiveSheet.Shapes("Button 4925")
If sh.TopLeftCell.Address(False, False) = "A12" Then
Exit Sub
End If
' remaining code will only be be executed if
' button is not located near cell A12
End Sub