Excel VBA中如何在RowSource中使用工作表变量?
在Excel VBA中给ListBox的RowSource使用工作表变量的正确方法
你的示例代码存在两个关键问题:一是RowSource仅指定了单元格地址,未关联到定义的empMasterList工作表;二是Range仅取了第一行,没用到计算好的最后行号,无法显示完整数据。
核心逻辑
RowSource需要的是带工作表标识的单元格引用字符串,直接用Range.Address只会返回单元格的相对/绝对地址,默认指向当前激活工作表,和你定义的工作表变量无关。
两种正确实现方式
方式1:拼接工作表名称与单元格地址
手动用!连接工作表名称和数据区域地址,写法直观清晰:
Sub empRecListDisplay() Dim empMasterList As Worksheet Dim last_rowMasterlist As Long Set empMasterList = ThisWorkbook.Sheets("EMPLOYEE MASTERLIST") last_rowMasterlist = empMasterList.Cells(Rows.Count, 2).End(xlUp).Row With mainForm.EmpRecListBox .ColumnHeads = True .ColumnCount = 9 .ColumnWidths = "100,350,100,100,100,100,100,100,100" ' 拼接工作表名称和完整数据区域地址 .RowSource = empMasterList.Name & "!" & empMasterList.Range("B1:K" & last_rowMasterlist).Address End With End Sub
方式2:使用带External参数的Address
让Address方法返回包含工作簿和工作表的完整引用(当前工作簿下也能正确识别):
Sub empRecListDisplay() Dim empMasterList As Worksheet Dim last_rowMasterlist As Long Set empMasterList = ThisWorkbook.Sheets("EMPLOYEE MASTERLIST") last_rowMasterlist = empMasterList.Cells(Rows.Count, 2).End(xlUp).Row With mainForm.EmpRecListBox .ColumnHeads = True .ColumnCount = 9 .ColumnWidths = "100,350,100,100,100,100,100,100,100" ' 用External:=True获取带工作表的完整地址 .RowSource = empMasterList.Range("B1:K" & last_rowMasterlist).Address(External:=True) End With End Sub
关键注意点
- 必须把Range扩展到
last_rowMasterlist,否则只会显示第一行数据 - 若工作表名称包含空格,VBA会自动给名称添加单引号,无需手动处理
内容的提问来源于stack exchange,提问作者Ambet
相关产品推荐
相关产品推荐

