【问题标题】:VBA How to generate the name of an option button dynamically?VBA如何动态生成选项按钮的名称?
【发布时间】:2019-09-29 02:42:01
【问题描述】:

VBA 我需要动态生成选项按钮的名称。选项按钮是用户表单上的表单控件选项按钮。我在模块中有以下代码,而不是在用户表单的后面代码中

        Sub Test_Form()

            Dim MyOptionButton As String
            Dim OptionButton As String
            Dim i As Integer

       i = 1

            MyOptionButton = OptionButton & i
            'I'm hoping the compiler will understand this as "OptionButton1"

            If Range("C2").Value = 5 Then
                MyOptionButton.Value = True
               'Error message here:  "invalid qualifier"

            End If

    frmTest_Form.Show
End Sub

看来编译器需要将控件名称预定义为“OptionButton1”,并且不会将 MyOptionButton 读取为“OptionButton1”。

提前感谢您的帮助。

【问题讨论】:

  • 您要解决的选项按钮在哪里?在工作表上?它是什么类型的选项按钮 - 表单或 ActiveX?
  • 您很可能必须找到替代方法,例如使用 Tag 属性,并具有通过控件搜索 Tag 而不是 Name 的函数,
  • MyOptionButton = "OptionButton" & i 然后您需要使用该名称索引到 ActiveSheet.Shapes() 之类的内容
  • 选项按钮是用户表单上的表单控件按钮。
  • 你的选项按钮是字符串,不能作为控件,请试试controls(myopt button).value

标签: excel vba radio-button


【解决方案1】:

您的问题暗示您想要更改选项按钮的名称,但这不是您的代码表明您想要做的。如果单元格中的值等于 5,您的代码似乎只是将选项按钮设置为 true。如果值不是 5,您应该考虑将其设置为 false。

您可以通过从用户表单的 Controls 集合中引用它来访问选项按钮。

您需要限定范围所在的工作表 - 如果不这样做,它将是活动工作表,可能并不总是您期望的工作表;如果您也确定了哪个工作簿,那也会更好。我假设您的代码所在的工作簿 (ThisWorkbook)。

最好不要使用用户表单的默认实例;将变量声明为您要使用的表单,然后新建它。

在对象名称中使用下划线不是一个好习惯。下划线将对象与其事件分开(例如 CommandButton1_Click)。我删除了用户表单名称中的下划线。

Dim myForm As frmTestForm
Set myForm = New frmTestForm
Dim myOptButton As Control
Set myOptButton = myForm.Controls("OptionButton1")
If ThisWorkbook.Worksheets("mySheet").Range("C2").Value = 5 Then
    myOptButton.Value = True
Else
    myOptButton.Value = False
End If

【讨论】:

  • 是的,笑脸!效果很好!也感谢您对风格的指导。
  • 在问题中使用“生成”一词是一个糟糕的选择。 “访问”会更好。如果在单元格中找到正确的值,该项目将打开用户表单上的按钮。
猜你喜欢
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多