2013-01-02 176 views
4

我想在VBA/Excel中有以下功能:禁用/启用在Excel/VBA按钮

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

出于某种原因,该按钮禁用不起作用(它停留在了Excel工作表启用) 我试着尝试DoEvents和延迟,但没有运气。 任何想法? 谢谢!

+0

它使* d * –

+0

当我评论button.enabled =真了,在禁用了按钮 –

+0

我输错在这里,当然它的启用 –

回答

10

我下面的作品(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不会变灰的按钮。

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

+2

很好的答案!最后一句话可能在帖子的开头,我不得不前来两次,因为我没有读完它的全部内容!愚蠢的我:P – ForceMagic

+5

我认为值得注意的是,在Excel 2010中,设置'b1.Enabled = False'并不会停止与该按钮相关的操作,如果单击它,就会发生。 –

2

...我不知道,如果你正在使用的ActiveX按钮或没有,但是当我插入一个ActiveX按钮到工作表Sheet1在Excel中称为CommandButton1的,下面的代码工作正常:

Sub test() 

    Sheets(1).CommandButton1.Enabled = False 

End Sub 

希望这有助于...

+0

这个完美的作品,我认为这与“屏幕刷新”做或而'长功能'正在运行 –

-1

这是什么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 
+0

@Jonathan似乎你的等待函数似乎没有拉动想要的'触发器'来改变按钮属性。所以请尝试一下。 – bonCodigo

+0

我发现这在线上,但这并没有办法。我认为这“触发”的确是问题。如果我在我的功能之后休息,按钮确实无效。 –

1

太好了!!!它与一个新的ActiveX按钮的工作,容易

Dim b1 As Button 

Set b1 = ActiveSheet.Buttons("Button 1") 


b1.Enabled = False 
0

这是为我工作解决了我一天的小问题(的Excel 2016),分配一个控制按钮,你和你所有的设置。

Sub deactivate_buttons() 

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

End Sub 

它改变了“已启用”属性中的ActiveX按钮属性框为False,该按钮变为无效和灰色。