Excel 如何将自动生成的选项按钮设置为';正确';基于VBA中另一个范围内的值?

Excel 如何将自动生成的选项按钮设置为';正确';基于VBA中另一个范围内的值?,excel,vba,Excel,Vba,我在答案的帮助下生成了单选按钮 我的要求是,当另一张表中有值x时,将自动生成的选项按钮设置为“True” 图1:检查值的源。 图2:标记x应反映为真的表格。 生成的单选按钮索引为2行和2列中选项按钮的OB2_2 这是密码 Private Sub AddOptionButtons(ByRef TargetRange As Range) Dim m As Variant m = Sheets("ALLO").Range("D23").Value + 1 Sheets("Final").Ran

我在答案的帮助下生成了单选按钮

我的要求是,当另一张表中有值x时,将自动生成的选项按钮设置为“True”

图1:检查值的源。

图2:标记x应反映为真的表格。

生成的单选按钮索引为2行和2列中选项按钮的OB2_2

这是密码

Private Sub AddOptionButtons(ByRef TargetRange As Range)

Dim m As Variant
m = Sheets("ALLO").Range("D23").Value + 1

Sheets("Final").Range("A2:A" & m).Copy Destination:=Sheets("Int_Result").Range("A2:A" & m)

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.GroupName = "grp" & oCell.Top

Next
Call OB2_Click(oCell)

End Sub

Sub OB2_Click(oCell)

Dim col, ro, m As Variant
Dim Shap As Shape
m = Sheets("ALLO").Range("D23").Value + 1

For Each Shap In Sheets("Int_Result").Shapes
    For ro = 2 To m Step 1
        For col = 1 To 13 Step 1
            If Sheets("Final").Cells(ro, col).Value = "" Then
               Sheets("Int_Result").Shapes(ro, col).ControlFormat.Value = False
            Else
               Sheets("Int_Result").Shapes(ro, col).ControlFormat.Value = True
            End If
        Next col
    Next ro
Next Shap

End Sub
我明白了

“未设置对象变量或带块变量”或“参数数目错误或属性赋值无效”

在这条线上

Sheets("Int_Result").Shapes(ro, col).ControlFormat.Value = False 
如何访问自动生成的单选按钮?

您需要使用

 Sheets("Int_Result").OLEObjects("OB2_2").Object.Value = True
不为形状设置循环,但将法线设置为最后一行和最后一列

例如:

Dim oCell As Range
Dim LastCell 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.GroupName = "grp" & oCell.Top
    Set LastCell = oCell

Next
Call OB2_Click(LastCell)


哪一行有错误?您好,我在这一行有错误,
Sheets(“Int\u Result”)。Shapes(ro,col)。ControlFormat.Value=False
Shapes(ro,col)
Shapes只需要一个参数就可以尝试使用
Sheets(“Int\u Result”)。OLEObjects(“OB”&ro&“Int\u”&col)
而不是
Sheets(“Int\u Result”)。Shapes(ro,col)
如果您试图指定一个不存在的
OLEObject
,则会出现该错误。(例如,如果您只有4个对象,并且您试图告诉excel调整对象5,则会出现此错误)您好@Gadziu,谢谢您的回答。我试过你的代码,错误是“对象变量或块变量未设置”。我实际上计划引用“Int_Result”表中的每个单元格,并访问单元格中的形状。这使得解决方案变得简单。但是我在引用工作表中每个形状的语法方面有问题,我的解决方案是有效的。您有此错误,因为您作为oCell空对象传递。从每个for循环中退出后,oCell为空。你需要在其他对象中记住它。上面的解决方案。嗨@Gadziu,效果非常好。我非常感谢你为帮助我所作的努力。我还有一个小问题。在call语句
callob2\u单击(LastCell)
中,参数是
LastCell
,但当您打开子例程
OB2\u单击时,您使用了oCell。你能给我解释一下,这到底是怎么回事吗#编程新手。我从
AddOptionButtons
传递
LastCell
,但在
OB2\u点击
中,我将
oCell作为范围
,所以我需要使用
oCell
我认为我们在Call语句中传递的参数和我们在子程序中得到的参数应该是相同的。了解到这一点,也可能会有所不同。再次感谢你。
Sub OB2_Click(oCell as Range)

Dim col As Long, ro As Long
dim m as long, k as long

col = oCell.Column
ro = oCell.Row

For m = 2 to ro
    For k = 2 to col
         If Sheets("Final").Cells(m, k).Value = "" Then
             Sheets("Int_Result").OLEObjects("OB" & m & "_" & k).Object.Value = False
         Else
             Sheets("Int_Result").OLEObjects("OB" & m & "_" & k).Object.Value = True
         End If
    Next k
Next m
End sub