我目前正在做的选项-按钮在VBA。我想添加一个组框,其中有6个选项按钮(所有连接到某个固定单元格)。只有在最大情况下,这些选项中的一个按钮才能活动。
它应该是这样的:

我想用一个VBA宏来创建它。问题是,当我创建它时,Button-1和Button-6是连接的。如果选择一个,则两者都选择。其他所有的无线按钮都不是这样的,可以单独点击.
此外,如果我手动删除其中一个单选按钮,并单击Ctrl+Y,一切正常工作。然后,所有的6个按钮可以单独选择。
你知道我能做些什么吗?例如,我不需要先删除一个按钮并撤销这个按钮才能正常工作?
编辑:添加的代码
Sub ButtonsInABox()
ActiveSheet.GroupBoxes.Delete
ActiveSheet.OptionButtons.Delete
startcell = Array(1, 1)
Add_GroupBox Array(startcell(0), startcell(1))
Add_RadioButton Array(startcell(0), startcell(1)), "Button-1", "A11"
Add_RadioButton Array(startcell(0), startcell(1) + 1), "Button-2", "A11"
Add_RadioButton Array(startcell(0), startcell(1) + 2), "Button-3", "A11"
Add_RadioButton Array(startcell(0) + 1, startcell(1)), "Button-4", "A11"
Add_RadioButton Array(startcell(0) + 1, startcell(1) + 1), "Button-5", "A11"
Add_RadioButton Array(startcell(0) + 1, startcell(1) + 2), "Button-6", "A11"
End Sub
Sub Add_RadioButton(startcell, ButtonName, corresponding_cell)
a = startcell(0)
b = startcell(1)
xx = Cells(a, b).Address(RowAbsolute:=False, ColumnAbsolute:=False)
ActiveSheet.OptionButtons.Add(Range(xx).Left, Range(xx).Top, Range(xx).Width * 1, 4).Select
With Selection
.ShapeRange.ScaleHeight 0.65, msoFalse
.Characters.Text = ButtonName
.LinkedCell = corresponding_cell
.Display3DShading = True
End With
End Sub
Sub Add_GroupBox(startcell)
a = startcell(0)
b = startcell(1)
xx = Cells(a, b).Address(RowAbsolute:=False, ColumnAbsolute:=False)
ActiveSheet.GroupBoxes.Add(Range(xx).Left, Range(xx).Top, Range(xx).Width * 3, Range(xx).Height * 2).Select
Selection.Characters.Text = ""
End Sub发布于 2019-09-18 14:43:00
你正经历着这个问题,因为这条线
ActiveSheet.GroupBoxes.Add(Range(xx).Left, Range(xx).Top, _
Range(xx).Width * 3, Range(xx).Height * 2).Select如果你把它改为
ActiveSheet.GroupBoxes.Add(Range(xx).Left, Range(xx).Top, _
Range(xx).Width * 3.5, Range(xx).Height * 2.5).Select看起来不错。似乎Excel正在混淆对象是否在组内。最好在选项按钮周围包括额外的边距。
顺便说一句,避免使用.Select。直接使用对象,如下面的示例所示。
替代方案
如果你想要,还有一种方法可以实现你想要的。此方法不使用GroupBox。它将控件组合在一起。参见此示例
Sub Sample()
Dim shp As Variant
Dim ShpGroup As Variant
Dim ws As Worksheet
Dim startcell As Variant
Dim i As Long, j As Long, k As Long
Dim CellAddr As String
Dim Shapenames As String
Dim ShpAr(1 To 6) As Variant
Set ws = Sheet1
For Each shp In ws.Shapes
shp.Delete
Next shp
k = 1
For i = 1 To 2
For j = 1 To 3
CellAddr = Cells(i, j).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Set shp = ws.OptionButtons.Add(Range(CellAddr).Left, Range(CellAddr).Top, Range(CellAddr).Width, 4)
With shp
.Name = "Button " & k
.ShapeRange.ScaleHeight 0.65, msoFalse
.Characters.Text = "Button " & k
.LinkedCell = "A11"
.Display3DShading = True
End With
'~~> Store the shape name in an array
ShpAr(k) = "Button " & k
k = k + 1
Next j
Next i
Set ShpGroup = ws.Shapes.Range(ShpAr).Group
End Subhttps://stackoverflow.com/questions/57992169
复制相似问题