2012-01-23 140 views
0

我在Excel中有一列複選框。當他們中的一個被選中時,我想提示用戶「你確定嗎?」或者是這個效果的東西。如果他們回答「是」,繼續前進,什麼也不做。如果他們回答否,我想取消選中該框(他們剛剛點擊的那個框)。 這似乎很簡單,但我不能因爲某種原因得到它的工作。Excel 2010 VBA提示和取消選中複選框點擊

我已經試過類似:

r = MsgBox("Are you sure", vbYesNo, "Eh?") 
If r <> vbYes Then Application.Undo 

但是這完全不是那麼回事。看起來很簡單,但它最終成爲一種痛苦。

+0

請告訴我們更多關於'不工作'的信息嗎?您是否嘗試使用[Click event](http://msdn.microsoft.com/zh-cn/library/aa211343%28v=office.11​​%29.aspx)?你將不得不爲每個複選框創建一個,但應該工作。 – JMax

+0

您使用的是哪種類型的複選框,Form Control或Active X? – Reafidy

+0

表單上還是工作表上的複選框? –

回答

0

問題是檢查複選框不會觸發可以撤消的Excel操作。 (如果控件窗體或ActiveX無所謂。)

如果您的複選框 ActiveX控件,那麼你可以這樣做:

Private Sub VerifyCheckBox(chk As CheckBox) 
    If chk.Value Then ' only ask question if checkbox has been checked 
     If MsgBox("Are you sure", vbYesNo, "Eh?") <> vbYes Then 
     chk.Value = Not chk.Value 
     End If 
    End If 
End Sub 

你可以這樣調用,在每個複選框的Click事件。

Private Sub CheckBox1_Click() 
    VerifyCheckBox CheckBox1 
End Sub 

Private Sub CheckBox2_Click() 
    VerifyCheckBox CheckBox2 
End Sub 
+0

我想你只是讓燈泡熄滅。它們不是ActiveX控件,它們是表單控件。我不知道區別。我假設窗體控件只能駐留在用戶窗體上,ActiveX控件可以直接嵌入到工作簿中? –

+0

不一定,工作表可以被歸類爲一種形式。你可以使用,但他們每個人的行爲都與你發現的完全不同。顯然他們看起來也不一樣。在不使用VBA的情況下更經常使用表格控件來控制單元格,當需要更靈活的設計要求時使用活動的x控件。你也可以更好地控制他們的事件。請參閱:[Controls](http://office.microsoft.com/zh-cn/excel-help/overview-of-forms-form-controls-and-activex-controls-on-a-worksheet-HA010237663.aspx) – Reafidy