2013-01-02 178 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,該按鈕變爲無效和灰色。