首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我删除另一个RadioButton并撤消之前,RadioButton无法正常工作。

在我删除另一个RadioButton并撤消之前,RadioButton无法正常工作。
EN

Stack Overflow用户
提问于 2019-09-18 11:53:42
回答 1查看 412关注 0票数 1

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

它应该是这样的:

我想用一个VBA宏来创建它。问题是,当我创建它时,Button-1和Button-6是连接的。如果选择一个,则两者都选择。其他所有的无线按钮都不是这样的,可以单独点击.

此外,如果我手动删除其中一个单选按钮,并单击Ctrl+Y,一切正常工作。然后,所有的6个按钮可以单独选择。

你知道我能做些什么吗?例如,我不需要先删除一个按钮并撤销这个按钮才能正常工作?

编辑:添加的代码

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-18 14:43:00

你正经历着这个问题,因为这条线

代码语言:javascript
复制
ActiveSheet.GroupBoxes.Add(Range(xx).Left, Range(xx).Top, _
Range(xx).Width * 3, Range(xx).Height * 2).Select

如果你把它改为

代码语言:javascript
复制
ActiveSheet.GroupBoxes.Add(Range(xx).Left, Range(xx).Top, _
Range(xx).Width * 3.5, Range(xx).Height * 2.5).Select

看起来不错。似乎Excel正在混淆对象是否在组内。最好在选项按钮周围包括额外的边距。

顺便说一句,避免使用.Select。直接使用对象,如下面的示例所示。

替代方案

如果你想要,还有一种方法可以实现你想要的。此方法不使用GroupBox。它将控件组合在一起。参见此示例

代码语言:javascript
复制
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 Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57992169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档