【问题标题】:VBA ComboBox Value in Module1Module1 中的 VBA 组合框值
【发布时间】:2020-06-24 15:11:47
【问题描述】:

您好,我正在尝试从我的 ComboBox 中获取选定的值,以便在 Module1 中的子例程中工作。

Private Sub UserForm_Initialize()
    With ComboBox1
        .AddItem "Monday"
        .AddItem "Tuesday"
    End With
End Sub

我基本上是在尝试将我选择的值粘贴到“Sheet1”上。如果我在 UserForm1 中调用“ComboBox1.value”,但不是在模块 1 中调用“ComboBox1.value”,它会引发错误,说明“ComboBox1.value”未定义,我可以让它工作。我将不胜感激!

Sub EmailGenerator()
   UserForm1.Show
   Worksheets("Sheet1").Range("O5").Value = ComboBox1.Value
End Sub()

【问题讨论】:

  • 试试UserForm1.ComboBox1.Value

标签: excel vba


【解决方案1】:

请尝试这种方法:

    With UserForm1.ComboBox1
        .AddItem "Monday"
        .AddItem "Tuesday"
        .ListIndex = 0
    End With

    ActiveSheet.Range("I1").value = UserForm1.ComboBox1.value

没有必要为此显示表单。但是,如果您没有在组合中选择任何内容,则单元格中不会返回任何内容。如果你想在连续的步骤中这样做,我建议首先检查UserForm1.Visible = True。仅假设您要手动更改组合值,然后才在工作表上收集值。

但这种方法至少对我来说很奇怪......我只是试图向你展示它是如何可能的,但我不推荐它。

【讨论】:

    【解决方案2】:

    表单是一个对象:它是 UserForm1 类的一个实例——一个您没有明确创建自己的实例(请参阅 UserForm1.Show 了解所有相关内容),但它仍然是一个对象。

    有一个名为ComboBox1ComboBox 控件实例,它存在于该UserForm1 对象中,并暴露在表单的公共接口上(就好像它是表单本身的公共属性一样!)- 就是这样您可以从表单的代码隐藏外部访问控件(注意:这是执行 UI 的最简单方法,但有更好、更具可扩展性的方法不会破坏这样的封装并使表单对其控件负责其余代码完全不知道 UI 的布局以及具体的控件是什么,请参阅上面的链接。

    VBA 不知道您指的是什么ComboBox1,除非您使用. 点运算符限定该成员调用它所属的对象:

    UserForm1.ComboBox1
    

    您可以有一个UserForm2 也有一个ComboBox1 控件,并且可以有20 个工作表,每个工作表都有自己的ComboBox1 控件:它们不能存在于全局范围内,它们也不会。

    因此:

    Worksheets("Sheet1").Range("O5").Value = UserForm1.ComboBox1.Value
    

    或者更好:

    Public Sub EmailGenerator()
       With New UserForm1
           .Show '<~ form is modal, execution is blocked here until form is closed.
           Worksheets("Sheet1").Range("O5").Value = .ComboBox1.Value
       End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      相关资源
      最近更新 更多