我是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
非常感谢你的任何帮助,蒂姆。
1条答案
按热度按时间bq9c1y661#
默认情况下,创建新图纸时,命名将如下所示:
Sheet1
、Sheet2
、Sheet3
等。它们按创建顺序编号。“函数”
Worksheets(1)
,Worksheets(2)
可用于get sheet by index。此索引可以是图纸名称的编号:使用Worksheets(index)(其中index是工作表索引号或名称)返回单个Worksheet对象。
它基本上意味着
Worksheets(i)
返回当前工作簿的第i
个工作表(如果i
是整数)。问题是,纸张编号(例如
Sheet1
和Worksheets(1)
)* 中的“1”不一定相同 *。如果逐个创建图纸且顺序不变,则默认情况下它们相同。然而,当数字不匹配时,可能存在多个情况。因此强烈建议按名称获取工作表,而不是按编号获取工作表,即:
而不是
此外,仍有一个选项将图纸称为对象(
Sheet1
)。P.S.如何重现工作表索引不匹配的示例
1.在MS Excel中使用默认名称创建至少2张工作表。在我们的例子中。创建
Sheet1
和Sheet2
。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