当在不同的工作表中重写范围时,在Userform_intialize上运行1004

我很难让我的Userform正确初始化。 我find了问题,但似乎无法find解决scheme。

我想在用户窗体启动时填充三个列表框。 RowSource必须是dynamic的。

这里是缩短到相关部分的代码。

Private Sub UserForm_Initialize() Dim varUserVE As Variant Dim varUserBL As Variant Dim varUserFL As Variant 'Find RowSource in Sheet Settings With Settings varUserVE = .Range("B7", Range("F80").End(xlUp)).Address varUserBL = .Range("H7", Range("L80").End(xlUp)).Address varUserFL = .Range("N7", Range("R80").End(xlUp)).Address End With 'Fill lists With lstVE .ColumnCount = 5 .ColumnWidths = "100;100;50;85;50" .ColumnHeads = True .RowSource = varUserVE End With With lstBL .ColumnCount = 5 .ColumnWidths = "100;100;50;85;50" .ColumnHeads = True .RowSource = varUserBL End With With lstFL .ColumnCount = 5 .ColumnWidths = "100;100;50;85;50" .ColumnHeads = True .RowSource = varUserFL End With End Sub 

“设置”是表单的代号。

当select“设置”表时,代码工作得很好。 如果我select不同的工作表然后运行代码:运行时错误'1004':对象'_worksheet'的方法'范围'失败

我曾尝试过几种方法来引用那张失败的表格。 我对vba比较陌生,所以我非常确定在引用范围时我缺less一些非常基本的东西。

任何帮助将非常感激!

本节可能会导致您的问题。

 With Settings varUserVE = .Range("B7", Range("F80").End(xlUp)).Address varUserBL = .Range("H7", Range("L80").End(xlUp)).Address varUserFL = .Range("N7", Range("R80").End(xlUp)).Address End With 

你在第一部分使用了.Range,但是它缺less“。” 在范围(“F80”)…..

所以这将是一样的事情

 varUserVE = .Range("B7", Activesheet.Range("F80").End(xlup)).Address 

尝试添加“。”

 With Settings varUserVE = .Range("B7", .Range("F80").End(xlUp)).Address varUserBL = .Range("H7", .Range("L80").End(xlUp)).Address varUserFL = .Range("N7", .Range("R80").End(xlUp)).Address End With