excel - 如何在VBA中将自动生成的单选按钮设置为true?

标签 excel vba

我正在创建一个 Excel 工作表,其中根据特定参数的值自动生成单选按钮。请参阅此以获得清晰的理解:

一组单选按钮被复制 n 次。其中 n 是引用参数的行数。

应根据条件检查此自动生成矩阵中的每个单选按钮,并且在与条件匹配的一组中,十二个单选按钮之一应设置为 True。这里的主要复杂性是,每组单选按钮都会根据要求复制到所需的行,因此单选按钮会生成 n*12 次,我不知道如何对自动生成的每个单选按钮进行编程。

我需要知道,我可以使用哪个功能来满足我的要求。

我使用以下代码创建了矩阵:

    Dim n, m, i, j, x, k, a As Integer
n = (Sheets("ALLO").Range("E4").Value) * 2       
x = Sheets("ALLO").Range("E3").Value
m = (Sheets("ALLO").Range("E5").Value) + 1
a = m

For i = 2 To n Step 2                               
Sheets("Dummy_Result").Range("A2:M2").Copy Destination:=Sheets("Results").Range("A" & i)
Next i

For j = 3 To n Step 2
Sheets("Dummy_Result").Range("A3:M3").Copy Destination:=Sheets("Results").Range("A" & j)
Next j

For k = n + 1 To m Step 1
Sheets("Dummy_Result").Range("A3:M3").Copy Destination:=Sheets("Results").Range("A" & k)
Next k

End Sub

我更新的程序,用于根据“m”值自动生成范围内的按钮。生成的按钮数量应与“m”的值成正比。当我使用动态范围而不是固定范围时,该程序不起作用(按照 JosephC 先生的建议)

Sub Test()
    Dim n, m, i, j, x, k, a As Integer
    n = (Sheets("ALLO").Range("E4").Value) * 2       'No of Tack stations
    x = Sheets("ALLO").Range("E3").Value
    m = (Sheets("ALLO").Range("E5").Value) + 1
    a = m

    For i = 2 To n Step 2                               'Correct
    Sheets("Dummy_Result").Range("A2").Copy Destination:=Sheets("Results_1").Range("A" & i)
    Call AddOptionButtons(Sheets("Results_1").Range("B & m: M & m"))
    Next i

    For j = 3 To n Step 2
    Sheets("Dummy_Result").Range("A3").Copy Destination:=Sheets("Results_1").Range("A" & j)
Call AddOptionButtons(Sheets("Results_1").Range("B & m: M & m"))

    Next j

    For k = n + 1 To m Step 1
    Sheets("Dummy_Result").Range("A3").Copy Destination:=Sheets("Results_1").Range("A" & k)
Call AddOptionButtons(Sheets("Results_1").Range("B & m: M & m"))
    Next k


End Sub

Private Sub AddOptionButtons(ByRef TargetRange As Range)

    Dim oCell As Range
    For Each oCell In TargetRange
        oCell.RowHeight = 20
        oCell.ColumnWidth = 6
        Dim oOptionButton As OLEObject
        Set oOptionButton = TargetRange.Worksheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Left:=oCell.Left + 1, Top:=oCell.Top + 1, Width:=15, Height:=18)
        oOptionButton.Name = "ob" & oCell.row & "_" & oCell.Column 
        'oOptionButton.Object.Caption = "Button"             oOptionButton.Object.GroupName = "grp" & oCell.Top
    Next
End Sub**strong text**

Please refer the Dummy result here

最佳答案

这只是让您开始的东西。假设您有 6 个表单控件选项按钮,如下所示:

enter image description here

然后,如果您在数组 buttons1 中传递它们,您可以根据它们的索引循环遍历它们,并将它们的值分配给 True,基于另一个具有条件的数组条件1:

Public Sub TestMe()

    Dim condition1 As Variant
    condition1 = Array(False, True, False, False, False, False)

    Dim buttons1 As Variant
    buttons1 = Array("Option Button 2", "Option Button 3", "Option Button 4", _
                    "Option Button 5", "Option Button 6", "Option Button 7")

    Dim cnt As Long
    For cnt = LBound(buttons1) To UBound(buttons1)
        With Worksheets(1).Shapes(buttons1(cnt)).OLEFormat
            If condition1(cnt) Then .Object.Value = True
        End With
    Next cnt

End Sub

因此,运行代码后,只要condition1数组中的第二个单元为True,则选择Option Button 3 .

关于excel - 如何在VBA中将自动生成的单选按钮设置为true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53171109/

相关文章:

excel - VBA 上的 lvwReport 到底是什么?

excel:海量中最常用的数字

vba - 如何避免转到VBA?

excel - 在 Excel 范围 (IRange) 上调用 Select 时出现 0x800a03ec。范围是从工作表的 usedrange 返回的

VBA-替换字符串中的字符

vba - 跨工作簿Vlookup

javascript - 如何动态调用单元格而不是调用相同的单元格

excel - 将多个单元格值插入注释

vba - 无法设置 RowSource 属性。无效的属性值

excel - 我可以通过 vba 设置 Excel Power Query 的用户名和密码吗?