【问题标题】:VBA Combo Box Value Compile IssueVBA 组合框值编译问题
【发布时间】:2020-06-08 11:55:05
【问题描述】:

我正在尝试将值添加到 VBA 中的组合框,但不断收到以下错误。知道我做错了什么吗?这是一个 ActiveX 控件。

Option Explicit

Private Sub Workbook_Open()
' Add items to combobox - based off selection in DND worksheet
With Sheet1.cmbComboBox
    .AddItem "Paris"
    .AddItem "New York"
    .AddItem "London"
End With

End Sub

【问题讨论】:

  • @BigBen 更新
  • 我无法重现该问题 - 您能否确认您的组合框的实际名称是 cmbComboBox
  • @dwirony 我可以确认它是“cmbComboBox”
  • @dwirony 我添加了 ComboBox 属性的屏幕截图
  • 你能确认sheet的代号是Sheet1吗?

标签: excel vba combobox


【解决方案1】:

有趣的是,由于某种原因,它没有将 Sheet1 识别为代号。下面的代码似乎可以工作。

Option Explicit

Private Sub Workbook_Open()
' Add items to combobox - based off selection in DND worksheet
With Worksheets(1).cmbComboBox
    .AddItem "Paris"
    .AddItem "New York"
    .AddItem "London"
End With

End Sub

【讨论】:

  • 那么第一个工作表的代号不是Sheet1
  • 按 F4 以显示属性窗格,并停止使用默认值!调用该表CountriesSheet 并停止使用Sheet1,尤其是如果您不知道Sheet1 是哪个表的代号!代码名称是(Name) 属性 - 列表中的第一个。
  • 关键是您使用了错误代码名称。解决方案是使用正确的代号,而不是切换到基于索引的解引用。 Worksheets(1) 将在用户将该工作表移动到其他任何位置时立即中断,而Worksheets("Sheet1") 将在用户重命名该工作表时立即中断。代号不能被用户篡改。
  • @MathieuGuindon - 是的。这就是为什么我不得不对这个答案投反对票。
  • 嗯...有趣的是...组合框真的在那张纸上吗?这是我可以重现错误的唯一方法。
【解决方案2】:

非常简单的解决方法,您不能仅通过放置 Sheet1 来引用名为“Sheet1”的工作表,除非您将“Sheet1”设置为变量 Sheet1。不是很好的代码。 只需以通常的方式引用工作表.... Sheets("sheet1") 或者如果您知道它的代号或索引等......

Private Sub Workbook_Open()
' Add items to combobox - based off selection in DND worksheet
With Sheets("Sheet1").cmbComboBox
    .AddItem "Paris"
    .AddItem "New York"
    .AddItem "London"
End With

End Sub

【讨论】:

  • 不,这是不正确的。 Sheet1 引用了工作表的代号。
  • Sheet1 的代号。它实际上是 非常 好的代码 :-) 如果它不是代码名称,那将是完全不同的错误消息。实际上Option Explicit 会标记一个未声明的变量。
  • 你需要阅读CodeName: Sheet1 =)
  • Sheet1 是任何英语系统上工作簿的第一个创建工作表的默认代码名称。最佳实践是给它一个实际有意义的名称,但是看到代码中未声明的Sheet1 99.99% 肯定是它 - 因为编译器没有抱怨 identfiier,所以确定性是 100% 感谢Option Explicit =)
猜你喜欢
  • 2012-05-13
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 2012-08-21
相关资源
最近更新 更多