2016-07-28 95 views
1

希望你有一個優雅的解決方案,可能是一個簡單的問題!OptionButton編號循環

我正在使用ActiveX選項按鈕,但在工作表中,而不是用戶窗體或組框中,因爲工作表的設計方式。該代碼作爲選項按鈕代碼表單中的一個子項包含。

這個代碼是什麼,我試圖做不言自明:

Public Sub SectionD_Click() 

If OptionButton1.Value = True Then 
    ThisWorkbook.Sheets("Boolean").Range("B2").Value = 1 
ElseIf OptionButton2.Value = True Then 
    ThisWorkbook.Sheets("Boolean").Range("B2").Value = 0 
End If 

If OptionButton3.Value = True Then 
    ThisWorkbook.Sheets("Boolean").Range("B3").Value = 1 
ElseIf OptionButton4.Value = True Then 
    ThisWorkbook.Sheets("Boolean").Range("B3").Value = 0 
End If 

If OptionButton5.Value = True Then 
    ThisWorkbook.Sheets("Boolean").Range("B4").Value = 1 
ElseIf OptionButton6.Value = True Then 
    ThisWorkbook.Sheets("Boolean").Range("B4").Value = 0 
End If 

End Sub 

我想使它這樣用一個簡單的「下面的「選項按鈕」改變數值I = I + 2'類型的聲明,但它似乎有些VBA變量/表達式/對象的限制不會讓我(對不起,我是一個noob在這裏,不知道適當的術語應該是什麼)。

如果有人能指出我在正確的方向!我必須查看25個左右的選項按鈕對,我非常希望代碼只是5條簡單的線條,而不是100條線條做同樣的事情!

回答

1

我可以說出那曲調用一行代碼!

Public Sub SectionD_Click(): Dim i As Integer: Dim rw As Long: rw = 2: With Worksheets("Sheet1"): For i = 1 To 10 Step 2:  If .OLEObjects("OptionButton" & i).Object.Value Then:   Worksheets("Boolean").Cells(rw, "B").Value = 0:  ElseIf .OLEObjects("OptionButton" & i).Object.Value Then:   Worksheets("Boolean").Cells(rw, "B").Value = 0:  End If:  rw = rw + 1: Next: End With:End Sub: 

但我認爲16條線更漂亮。

Public Sub SectionD_Click() 
    Dim i As Integer 
    Dim rw As Long 
    rw = 2 

    With Worksheets("Sheet1") 
     For i = 1 To 10 Step 2 
      If .OLEObjects("OptionButton" & i).Object.Value Then 
       Worksheets("Boolean").Cells(rw, "B").Value = 0 
      ElseIf .OLEObjects("OptionButton" & i).Object.Value Then 
       Worksheets("Boolean").Cells(rw, "B").Value = 0 
      End If 
      rw = rw + 1 
     Next 
    End With 
End Sub 
+0

就是這樣!甚至不需要調整太多,真的是我期待的優雅解決方案。以前曾嘗試OLEObjects,但它沒有爲我工作,感謝向我展示它應該如何完成;) –

+0

實際的ActiveX控件包裝在一個OleObject中。這就是爲什麼你使用OleObject.Object來引用它。 – 2016-07-28 10:25:35

1

5行?真? :) 這是最好的,我可以這樣做:

Option Explicit 

Public Sub SectionD_Click() 

    With ThisWorkbook.Sheets("Boolean") 
     Call CheckValue(.OptionButton1, .OptionButton2, .Range("B2")) 
     Call CheckValue(.OptionButton3, .OptionButton4, .Range("B3")) 
    End With 
End Sub 

Sub CheckValue(btn1 As Object, btn2 As Object, my_cell As Range) 

    If btn1.Value Then 
     my_cell.Value = 1 
    ElseIf btn2.Value Then 
     my_cell = 0 
    End If 

End Sub