2017-07-24 103 views
-1

我的目標有點背景。我有一個需要自動進行風險評估的電子表格,我正在使用選項按鈕爲選定數量的單元格提供標準的「無」選項,這些單元格已經過濾,目前我遇到了兩個主要問題。Excel VBA通​​過activeX選項按鈕循環

其中第一個是一組單選按鈕並通過代碼引用它。通過表單控件,我可以將它們放在一個組框中,並給它們所有相同的名稱,即。 radYes和radNo但是使用activeX我不能使用組框來實現這一點。這會導致選擇一個選項按鈕以刪除另一個選項的預設選擇。我能夠通過給他們所有單獨的組名來繞過這一點,但是現在我不能在不同組中使用名稱radYes/radNo,因爲它只引用第一個名稱。

這是我的代碼進行審查:

Sub RadioController() 

Dim total As Integer 
Dim pass As Integer 
Dim fail As Integer 
Dim rng As Range, cell As Range 
Set rng = Range("C4:C8") 

Dim o As Object 

For Each cell In rng 
    If Worksheets(2).radYes = True Then 
     pass = pass + 1 
     total = total + pass 
    Else 
     fail = fail + 1 
    End If  
Next cell 

Range("K4") = total 


End Sub 

其次,因爲這是通過一個過濾組細胞意味着循環。宏不斷選擇不可見的單元格,併爲不存在的選項按鈕分配一個真值。我知道這是很長時間的囉嗦,但我已經研究瞭解決這個問題,並且Stack Overflow似乎是我最好的選擇,以獲得有關VBA的更多知識。

+0

你能提供你的工作表的快照嗎? – Zac

回答

1
  • 單選按鈕(選項按鈕)是指您一次只能選擇其中之一。如果您有獨立的Yes/No選項,請改用CheckBoxes。不要打破標準的GUI看&感覺。
  • 給幾個對象命名是一個壞主意。你可以像這樣遍歷所有對象。

    With ActiveSheet 
        For Each objX In .OLEObjects 
         Debug.Print "Name = " & objX.Name & " Typ = " & TypeName(objX.Object) 
        Next 
    End With 
    
  • 只處理可見單元格,使用

    For Each cell In rng.SpecialCells(xlCellTypeVisible) 
    

    注:只問一個問題每個問題。 Stackoverflow不僅可以幫助你,還可以幫助其他人解決相同或類似的問題。

0

既然你希望顯示「通過」或「失敗」(2個選項),你只需要一個按鈕,每一個爲TRUE或FALSE評估。但是,您也可以使用2個按鈕,其中只有一個是真的。如果您有多個組 - 無論每個組是由1個按鈕還是2組成 - 您都必須將GroupName屬性設置爲每個組的另一個值,以便它們相互獨立運行。 您可以使用LinkedCell屬性將每個按鈕鏈接到一個單元格,可能是隱藏在按鈕本身後面的單元格。該單元格將保持值TRUE或FALSE,具體取決於所選的選項。您可以讓另一個可見的單元格引用鏈接的單元格。使用這樣的公式= IF(A1, "Passed", "Failed")。假定A1是鏈接單元格,具有公式的單元格將不會顯示「通過」或「失敗」,具體取決於選項按鈕的狀態。 爲了計算的目的,您可以參考鏈接的單元格並計算有多少是TRUE。但是你也可以直接參考選項按鈕。以下代碼將計算通過次數和失敗次數。

Private Sub CountButtons() 

    Dim Btn As Shape 
    Dim Pass As Long, Fail As Long 

     For Each Btn In Worksheets("Sheet2").Shapes 
      With Btn 
       If .Type = 12 Then 
        If Worksheets("Sheet2").OLEObjects(Btn.Name).Object Then 
         Pass = Pass + 1 
        Else 
         Fail = Fail + 1 
        End If 
       End If 
      End With 
     Next Btn 
End Sub