2012-11-15 24 views
0

我對VBA非常陌生(並且只在Excel中知道它)。在我的excel頁面騎自行車通過一些複選框

我想通過一些(但不是全部)複選框循環。它們目前通過CheckBox15命名爲CheckBox1。 Howe循環說CheckBox5到CheckBox10嗎?

我想我希望有一個'方法'類似'CheckType'的控件,將允許我檢查名稱?

這是我試過的。導致編譯錯誤 - 未定義子或函數,並突出顯示工作表。

Private Sub BoxCheck() 
atLeastOneChecked = False 
    For i = 2 To 4 
     If Worksheets("ActiveX").Controls("Checkbox" & i).Value = True Then 
      atLeastOneChecked = True 
     End If 
    Next i 
End Sub 

雖然上述不工作,下面是什麼呢:

Private Sub BoxCheck() 
    atLeastOneChecked = False 

    For i = 1 To 2 
     If Sheet2.CheckBox2.Value = True Then 
       atLeastOneChecked = True 
     End If 
    Next i 

End Sub 

當然,在循環沒有對結果的影響,但它編譯和atLeastOneChecked從假變爲真時Checkbox2是真正。請注意,Sheet2已被命名爲ActiveX。我顯然不明白Worksheet和Controls如何工作。有人可以幫忙嗎?

修復下面所述的錯誤後,這仍然不起作用。我簡化如下:

Private Sub BoxCheck() 
    Dim ole As OLEObject 

    atLeastOneChecked = False 
    Set ole = Sheets("ActiveX").OLEObjects("Checkbox2") 
    If ole.Value = True Then 
     atLeastOneChecked = True 
    End If 
End Sub 

這是行不通的。它未能在:

If ole.Value = True Then 

的錯誤狀態:對象不支持此屬性或方法

這是OLEObjects真實的,而不是複選框。當我查看ole的屬性時,我看到它的Object屬性設置爲Object/Checkbox,並且此Object具有一個值。我想這就是我在if語句中應該引用的內容,但我不知道如何。

+1

您遇到的一個錯誤是您在使用'Worksheets'時正在使用'Worksheet'。爲了趕上這一點,在模塊的頂部輸入「Option Explicit」。 – Brad

+0

謝謝 - 改變了,但它仍然無法正常工作。我知道爲什麼,但我不知道解決問題的辦法。問題在於Worksheet沒有「控件」成員。它有OLEobjects和Shapes,但我似乎無法讓它工作。 – RoryG

回答

1

我想我解決了這個問題。

複選框的值是通過引用我設定的OLEOBJECT內的對象屬性...喜歡這個訪問:

If ole.Object.Value = True Then 

感謝您的幫助。如果有人有更優雅的解決方案,我仍然希望看到它。

+0

啊,好的。 'ole.Value = True'對我來說沒有任何錯誤,但是因爲這對你有用,所以這是最好的答案。 :-) –

+0

Thx,這也是我的伎倆。如果(wsActions.OLEObjects(「chkOpt1」).Object.Value)Then doit(1)else doit(0)/ wsActions.OLEObjects(「chkOpt1」)。Object.Value = False – Whome

0

使用CheckBox.Name

例子:

For Each cb In ActiveSheet.CheckBoxes 
    If cb.Name = "CheckBox5" 
     ' Do stuff 
    End If 
Next cb 
0

要在@Parker的回答拓展:

Private Sub BoxCheck() 
    atleastonechecked = False 
    Dim oles As OLEObject 
    For i = 2 To 4 
     'If you're using Shapes Controls: 
     If ThisWorkbook.Worksheets("ActiveX").Shapes("Check Box " & i).Value = True Then 
      atleastonechecked = True 
     End If 
     ' If you're using ActiveX Controls 
     Set oles = ThisWorkbook.Worksheets("ActiveX").OLEObjects("CheckBox" & i) 
     If oles.Value = True Then 
      atleastonechecked = True 
     End If 
    Next i 
End Sub 

不好意思,剛纔放在一起以前的答案未經測試 - 這總是失敗。只需根據您使用的控件類型使用If循環。

+0

當我嘗試此操作時,出現錯誤...它不識別工作表。我編輯了我的原始問題,包括我試過的內容 – RoryG

+0

對不起,只是更新了代碼。 –

+1

這仍然不適合我。我對錯誤 - '對象不支持這種方法或屬性',當我調試發生在行if'ole.Value = True然後當我檢查ole的屬性,我看到它是一個OLEObject /複選框,並在對象屬性中,它確實有一個值? – RoryG

相關問題