2016-07-28 62 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