【问题标题】:Disable/Enable button in Excel/VBAExcel/VBA 中的禁用/启用按钮
【发布时间】:2013-01-02 13:31:16
【问题描述】:

我正在 VBA/Excel 中尝试以下功能:

Sub function_name()
  button.enabled=false
  Call Long_Function       ' duration: 10sec
  button.enabled=true
End Sub

由于某种原因,此按钮禁用不起作用(它在 excel 工作表中保持启用状态) 我尝试尝试使用 DoEvents 和延迟,但没有运气。 有任何想法吗? 谢谢!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    以下对我有用 (Excel 2010)

    Dim b1 As Button
    
    Set b1 = ActiveSheet.Buttons("Button 1")
    
    b1.Font.ColorIndex = 15
    b1.Enabled = False
    Application.Cursor = xlWait
    Call aLongAction
    b1.Enabled = True
    b1.Font.ColorIndex = 1
    Application.Cursor = xlDefault
    

    请注意,.enabled = False 不会使按钮变灰。

    字体颜色必须明确设置以使其变灰。

    【讨论】:

    • 好答案!最后一句话可能在文章的开头,因为我没有读完,我不得不来两次!傻我:P
    • 我认为需要注意的是,在 Excel 2010 中,设置 b1.Enabled = False 并不会阻止与该按钮相关的操作(如果单击该按钮)。
    • ... 和 要停用操作(事件),必须取消分配(Excel 2010),或者在同一位置创建两个按钮切换它们的可见性,如此处所述:stackoverflow.com/a/566965/1915920
    【解决方案2】:

    太好了!!!它正在工作并轻松解决了我一天前的问题

    Dim b1 As Button
    
    Set b1 = ActiveSheet.Buttons("Button 1")
    
    
    b1.Enabled = False
    

    【讨论】:

      【解决方案3】:

      其他人说设置button.enabled = false 不会阻止按钮触发是正确的。但是,我发现设置 button.visible = false 确实有效。该按钮会消失并且无法点击,直到您再次将visible 设置为true

      【讨论】:

        【解决方案4】:

        ...我不知道您是否使用了activex按钮,但是当我在Excel中的sheet1中插入一个名为CommandButton1的activex按钮时,以下代码可以正常工作:

        Sub test()
        
           Sheets(1).CommandButton1.Enabled = False
        
        End Sub
        

        希望这会有所帮助...

        【讨论】:

        • 这很完美,我认为它与“屏幕刷新”或“长功能”运行时的其他东西有关
        【解决方案5】:

        这对我 (Excel 2016) 有用,带有一个新的 ActiveX 按钮,为您的按钮分配一个控件,一切就绪。

        Sub deactivate_buttons()
        
             ActiveSheet.Shapes.Item("CommandButton1").ControlFormat.Enabled = False
        
        End Sub
        

        它将 ActiveX 按钮属性框中的“启用”属性更改为 False,按钮变为非活动状态并显示为灰色。

        【讨论】:

          【解决方案6】:

          我正在使用 excel 2010 及以下的 VBA 代码,它可以很好地用于表单按钮。 它从按钮中删除分配的宏并在下一个命令中分配。

          禁用:

          ActiveSheet.Shapes("Button Name").OnAction = Empty
          ActiveSheet.Shapes("Button Name").DrawingObject.Font.ColorIndex = 16
          

          启用:

          ActiveSheet.Shapes("Button Name").OnAction = ActiveWorkbook.Name & "!Macro function Name with _Click"
          ActiveSheet.Shapes("Button Name").DrawingObject.Font.ColorIndex = 1
          

          请注意“ActiveWorkbook.Name”保持原样。不要插入工作簿名称而不是“名称”。

          【讨论】:

            【解决方案7】:

            这就是 iDevelop 想要表达的意思Enabled Property

            所以你实际上一直在使用enabled,因为你最初的帖子是enable..

            您可以尝试以下方法:

            Sub disenable()
              sheets(1).button1.enabled=false
              DoEvents
              Application.ScreenUpdating = True
            
              For i = 1 To 10
                Application.Wait (Now + TimeValue("0:00:1"))
              Next i
            
              sheets(1).button1.enabled = False
            End Sub
            

            【讨论】:

            • @Jonathan 似乎您的等待功能似乎没有拉出所需的trigger 来更改按钮属性。所以请试一试。
            • 我也在网上找到了这个,但这并不能解决问题。我认为这个“触发器”确实是问题所在。如果我在我的函数之后中断,按钮确实会变为非活动状态。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-07-08
            • 1970-01-01
            • 2018-03-10
            • 2012-02-29
            • 2012-02-17
            相关资源
            最近更新 更多