首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对RadioButtons VBA Excel进行最佳分组

如何对RadioButtons VBA Excel进行最佳分组
EN

Stack Overflow用户
提问于 2020-11-17 05:21:36
回答 1查看 52关注 0票数 0

我认为我可以通过为希望分组在一起的单选按钮设置不同的LinkedCell属性来对单选按钮进行分组,然而,在我的代码中,所有按钮最终都转到了同一个LinkedCell。我需要对RadioButtons进行动态分组,因为分组中的按钮数量各不相同。我正在编写一个考试程序,需要将每个问题的RadioButtons分组在一起,最简单的方法是什么?

有一天,我发现我没有递增RadioButtons的名称,所以每个按钮都有相同的名称。我还使按钮更小,这样它们不会重叠,当我手动放置GroupBoxes时,我得到了所有的工作,现在我必须从VBA添加它们,并祈祷我的手指。

代码语言:javascript
复制
For c = 1 To ExamData(i, 7)
    ws.Range("C3").Offset(rOff + z, cOff).Value = ExamData(i, a)    'write answer
    rbCapt = CaptSelect(c)                                    'Set choice letter as caption
    Set t = ws.Cells(rOff + v, 2)
    Set rb = ws.OptionButtons.Add(t.Left + 20, t.Top, t.Width, t.Height)
    With rb
        .caption = rbCapt
        .Name = "Btn" & Trim(Str(b))
        .LinkedCell = "A" + Trim(Str(myRow)) '<- When myRow changes all Buttons change
    End With
EN

回答 1

Stack Overflow用户

发布于 2020-11-18 00:22:48

我在做了很多工作,添加了GroupBoxes。下面是最终的代码:

代码语言:javascript
复制
For i = 1 To UBound(ExamData)
'write question number
    ws.Range("B3").Offset(rOff, cOff).Value = Trim(Str(i)) + "."
    myRow = ws.Range("B3").Offset(rOff, cOff - 1).Row                   'row number of question
'write question
    ws.Range("C3").Offset(rOff, cOff).Value = ExamData(i, 1)
'write answers & Radio Buttons
    For c = 1 To ExamData(i, 7)
        ws.Range("C3").Offset(rOff + z, cOff).Value = ExamData(i, a)    'write answer
        rbCapt = CaptSelect(c)                                          'Get choice letter for radio button
        Set t = ws.Cells(rOff + v, 2)
        Set rb = ws.OptionButtons.Add(t.Left + 11, t.Top + 12, t.Width - 22, t.Height - 20)
        With rb
            .caption = rbCapt
            .Name = "Btn" & Trim(Str(i)) & "-" & Trim(Str(b))
            .LinkedCell = "D" + Trim(Str(myRow))
        End With
        v = v + 1
        a = a + 1
        b = b + 1
        z = z + 1
    Next c
'add GroupBox
    pp = (myRow + 1 + ExamData(i, 7) - 1)
    gbRange = "B" + Trim(Str(myRow + 1)) + ":B" + Trim(Str(pp))
    Set vvv = ws.Range(gbRange)
    Set gb = ws.GroupBoxes.Add(vvv.Left, vvv.Top, vvv.Width, vvv.Height)
    With gb
        .caption = ""
        .Name = "gb" + Trim(Str(i))
    End With
    rOff = rOff + (ExamData(i, 7) + 2)
    v = 4
    z = 1
    a = 2
Next i
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64865896

复制
相关文章

相似问题

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