excel VBA:当组合框中的选定值发生变化时如何触发事件

wn9m85ua  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(431)

我是VBA的新手,希望在组合框(UserForm)中的选择发生变化时触发一个简单的变化事件。
我尝试了Private Sub myCombo_AfterUpdate()Private Sub myCombo_Change(),但在这两种情况下,当我在组合框中选择不同的值时,都没有任何React。
这是组合框的错误方法吗?

我的Sub开始如下,因为我想比较下拉列表中当前选定的项目与表中的值:

Private Sub myCombo_AfterUpdate()
    If Me.myCombo.Value = Worksheets(8).Range("A4") Then
    'do stuff
End Sub

非常感谢你的任何帮助,蒂姆。

bq9c1y66

bq9c1y661#

默认情况下,创建新图纸时,命名将如下所示:Sheet1Sheet2Sheet3等。它们按创建顺序编号。
“函数”Worksheets(1)Worksheets(2)可用于get sheet by index。此索引可以是图纸名称的编号:
使用Worksheets(index)(其中index是工作表索引号或名称)返回单个Worksheet对象。
它基本上意味着Worksheets(i)返回当前工作簿的第i个工作表(如果i是整数)。
问题是,纸张编号(例如Sheet1Worksheets(1))* 中的“1”不一定相同 *。如果逐个创建图纸且顺序不变,则默认情况下它们相同。然而,当数字不匹配时,可能存在多个情况。
因此强烈建议按名称获取工作表,而不是按编号获取工作表,即:

Worksheets("Sheet1")

而不是

Worksheets(1)

此外,仍有一个选项将图纸称为对象(Sheet1)。

P.S.如何重现工作表索引不匹配的示例

1.在MS Excel中使用默认名称创建至少2张工作表。在我们的例子中。创建Sheet1Sheet2
1.在Sheet1上添加Button对象。
1.将Sheet2移到左边,使其成为最左边的页面(如屏幕截图所示)。

  • Sheet1上的Button对象添加宏,并向宏添加断点。另外,使用Add Watch...命令将变量添加到调试部分
  • Worksheets(1).CodeName
  • Worksheets(2).CodeName
  • 如果单击Button对象并转到VB代码窗口,在Watches窗口中,您将看到
  • Worksheets(1).CodeName = "Sheet2"(最左边的工作表)
  • Worksheets(2).CodeName = "Sheet1"(第二页)
    Screenshot

相关问题