2011-08-03 85 views
7

添加複選框時,如何訪問VBA中的值?如何在Excel 2007中從VBA訪問複選框

  • 在Excel 2007中,對開發者絲帶
  • 插入,窗體控件,複選框
  • 更名複選框chkMyCheck
  • 新增宏複選框,我現在有模塊1與chkMyCheck_Clicked

以下全部失敗

Sheets("Sheet1").chkMyCheck.Checked 
Sheets("Sheet1").chkMyCheck.Value 
Sheets("Sheet1").Shapes("chkMyCheck").Checked 
Sheets("Sheet1").Shapes("chkMyCheck").Value 
Sheet1.chkMyCheck.Checked 
Sheet1.chkMyCheck.Value 

Sheet1.Shapes(「chkMyCheck」)似乎查找該對象,但不公開可能返回檢查狀態的任何屬性。

回答

8

想通了

If Sheet1.Shapes("chkMyCheck").ControlFormat.Value = xlOn Then 
..... 
+0

這在Excel工作對我極大的2007年謝謝! – James

4

方式一:

Dim oCheck As Object 
Set oCheck = Sheet1.CheckBoxes("chkMyCheck") 
MsgBox (oCheck.Value = xlOn) 

編輯:這裏是另一種方法 - 也許這一個會爲你工作...

Sub Tester2() 
    Dim sh As Shape 
    For Each sh In Sheet1.Shapes 
     If sh.Type = msoFormControl Then 
      If sh.FormControlType = xlCheckBox Then 
       Debug.Print sh.Name & "=" & sh.ControlFormat.Value 
      End If 
     End If 
    Next sh 
End Sub 
+0

也不起作用。 Excel 2007中的工作表上沒有CheckBoxes屬性(至少不是我的副本)。 –

+1

測試對我來說很好:窗體控件複選框,Windows XP&7上的Excel 2007.確實沒有對象瀏覽器中的「CheckBoxes」集合,但這並沒有阻止它的工作。 –

+3

如果在對象瀏覽器中右鍵單擊並選擇顯示隱藏成員,您將看到複選框和複選框。他們已被棄用,但仍在那裏。 –

0

爲了完整起見,如果您使用ActiveX複選框而不是常規復選框,則語法爲

If Sheet1.Shapes("chkMyCheck").OLEFormat.Object.Object.Value Then 
... 

使用本地窗口和一個變量設置爲形狀發現 -

Dim shp as Shape 
Set shp = Sheet1.Shapes("chkMyCheck") 
Stop