【发布时间】:2018-03-27 16:44:35
【问题描述】:
我正在为用户表单中的组合框创建 excel 宏。我已成功在单个工作簿中创建。 这是我在当前工作簿中的代码。
ComboBox1.RowSource = "Sheet1!G1:G" & Range("G" & Rows.Count).End(xlUp).Row
我现在想要做的是,我想从另一个工作簿中获取我的组合框的值,比如说范围列 G 中的 Project.xlsx。
知道代码会是什么样子吗?
【问题讨论】:
我正在为用户表单中的组合框创建 excel 宏。我已成功在单个工作簿中创建。 这是我在当前工作簿中的代码。
ComboBox1.RowSource = "Sheet1!G1:G" & Range("G" & Rows.Count).End(xlUp).Row
我现在想要做的是,我想从另一个工作簿中获取我的组合框的值,比如说范围列 G 中的 Project.xlsx。
知道代码会是什么样子吗?
【问题讨论】:
您只需在方括号中添加工作簿名称的前缀,但如果您这样做了:
ComboBox1.RowSource = "[Project.xlsx]Sheet1!G1:G" & Range("G" & Rows.Count).End(xlUp).Row
那么这将不起作用,因为您没有限定要使用的Range(例如,项目工作簿中某些工作表中的那个)。
下面的代码将在 Project 工作簿的 Sheet1 的 G 列中找到范围,并将值分配给您的 UserForm 中的 ComboBox:
Option Explicit
Private Sub UserForm_Initialize()
Dim wbExternal As Workbook '<-- the other workbook with the data
Dim wsExternal As Worksheet '<-- the worksheet in the other workbook
Dim lngLastRow As Long '<-- the last row on the worksheet
Dim rngExternal As Range '<-- range of data for the RowSource
Set wbExternal = Application.Workbooks("Project.xlsx")
Set wsExternal = wbExternal.Worksheets("Sheet1") '<-- change to your sheet if required
lngLastRow = wsExternal.Range("G" & wsExternal.Rows.Count).End(xlUp).Row
Set rngExternal = wsExternal.Range("G1:G" & CStr(lngLastRow))
ComboBox1.RowSource = rngExternal.Address(External:=True)
End Sub
【讨论】: