即使单击特定的窗体控制按钮,也无法运行其分配的宏

问题描述 投票:-1回答:2

我希望能够防止某个特定按钮(“按钮4925”)运行其分配的宏,即使单击该宏也是如此。基本上,当您单击它时,它要么不执行任何操作,要么显示一条消息,指出“这是不可删除的重要项目”换句话说,仅当单击的按钮位于单元格A12中时,我才希望能够退出子菜单。否则,请正常运行代码。考虑到我是VBA的初学者,我不知道该怎么做。一些信息:该按钮是一个表单控制按钮。不是ActiveX。它被复制并粘贴到工作表上的另一个宏。分配的宏写在标准模块下。分配的宏功能是删除行的相对范围。这是代码:

    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
excel vba button
2个回答
0
投票

假设分配给按钮的宏的名称为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

0
投票

您必须以某种方式“告诉”代码,不得删除范围。

所以,我建议您在模块顶部创建一个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

编辑:如果您希望仅当按钮位于单元格“ 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...
© www.soinside.com 2019 - 2024. All rights reserved.