OptionButton编号循环

时间:2016-07-28 09:35:48

标签: excel vba excel-vba radio-button activex

希望你有一个优雅的解决方案,可能是一个简单的问题!

我正在使用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

我想使“OptionButton”后面的数字使用简单的'i = i + 2'类型语句更改值,但似乎某些VBA变量/表达式/对象限制不会让我(对不起我'这是一个菜鸟,不知道应该用什么样的术语。)

如果有人能指出我正确的方向,我真的很感激!我必须查看25个左右的选项按钮对,我非常希望代码只是5个简单的行而不是100个以上的行做同样的事情!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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