使用列表框调用用户窗体时出现运行时错误
Runtime Error when calling userform with listbox
希望你能帮我解决这个问题,因为我真的看不出错误。
我正在尝试创建一个带有列表框的用户窗体,用户可以在其中从数组中选择值。数组的代码如下:
Dim arrayData As Range
Dim sh As Worksheet
Dim Row_Count As Integer
Dim i As Integer
Dim lastRow2 As Long
Set sh = ThisWorkbook.Sheets("Import")
lastRow2 = sh.Columns(45).Find("*", , , , xlByRows, xlPrevious).Row
Set arrayData = sh.Range("AS2:AS" & lastRow2)
arArray = sh.Range("AS2:AS" & lastRow2)
Row_Count = arrayData.Rows.Count
For i = 1 To Row_Count
arArray(i, 45) = Cells(i, 45).Value
Next i
这非常有效。现在我正在初始化用户表单:
Public Sub UserForm_Initialize()
Auswertung.Lst_Tabellen.List.Clear
Auswertung.Lst_Tabellen.List = arArray
End Sub
但每次我尝试调用用户窗体“Auswertung”时,我都会收到错误“运行时错误 424:需要对象”。你们能看到问题吗?
Public Sub Call_Userform()
Auswertung.Show
End Sub
当我 运行 代码时,调试器标记行“Auswertung.Show”。
如您所写,arArray 是 Variant
arArray = sh.Range("AS2:AS" & lastRow2) --> arArray 是一个一维数组
...
arArray(i, 45) = Cells(i, 45).Value --> arArray 变成一个二维数组
...
Auswertung.Lst_Tabellen.List = arArray --> 结果未知
请检查以上内容,是您真正想要的吗?
正如我提到的,您需要在 UserForm_Initialize()
中填充数组
这是一个例子。要对此进行测试,请使用以下代码替换您的 UserForm_Initialize
。
Option Explicit
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim lRow As Long
Dim arRange As Range
Dim arData As Variant
'~~> Set your worksheet here
Set ws = ThisWorkbook.Sheets("Import")
With ws
'~~> Find last row in column AS
lRow = .Range("AS" & .Rows.Count).End(xlUp).Row
'~~> Identify your range
Set arRange = .Range("AS2:AS" & lRow)
'~~> Get the data into an array. This will be a 2D array
arData = arRange.Value2
End With
With Lst_Tabellen
.Clear
'~~> Transpose to get 0-based array
.List = Application.Transpose(arData)
End With
End Sub
希望你能帮我解决这个问题,因为我真的看不出错误。
我正在尝试创建一个带有列表框的用户窗体,用户可以在其中从数组中选择值。数组的代码如下:
Dim arrayData As Range
Dim sh As Worksheet
Dim Row_Count As Integer
Dim i As Integer
Dim lastRow2 As Long
Set sh = ThisWorkbook.Sheets("Import")
lastRow2 = sh.Columns(45).Find("*", , , , xlByRows, xlPrevious).Row
Set arrayData = sh.Range("AS2:AS" & lastRow2)
arArray = sh.Range("AS2:AS" & lastRow2)
Row_Count = arrayData.Rows.Count
For i = 1 To Row_Count
arArray(i, 45) = Cells(i, 45).Value
Next i
这非常有效。现在我正在初始化用户表单:
Public Sub UserForm_Initialize()
Auswertung.Lst_Tabellen.List.Clear
Auswertung.Lst_Tabellen.List = arArray
End Sub
但每次我尝试调用用户窗体“Auswertung”时,我都会收到错误“运行时错误 424:需要对象”。你们能看到问题吗?
Public Sub Call_Userform()
Auswertung.Show
End Sub
当我 运行 代码时,调试器标记行“Auswertung.Show”。
如您所写,arArray 是 Variant
arArray = sh.Range("AS2:AS" & lastRow2) --> arArray 是一个一维数组
...
arArray(i, 45) = Cells(i, 45).Value --> arArray 变成一个二维数组
...
Auswertung.Lst_Tabellen.List = arArray --> 结果未知
请检查以上内容,是您真正想要的吗?
正如我提到的,您需要在 UserForm_Initialize()
这是一个例子。要对此进行测试,请使用以下代码替换您的 UserForm_Initialize
。
Option Explicit
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim lRow As Long
Dim arRange As Range
Dim arData As Variant
'~~> Set your worksheet here
Set ws = ThisWorkbook.Sheets("Import")
With ws
'~~> Find last row in column AS
lRow = .Range("AS" & .Rows.Count).End(xlUp).Row
'~~> Identify your range
Set arRange = .Range("AS2:AS" & lRow)
'~~> Get the data into an array. This will be a 2D array
arData = arRange.Value2
End With
With Lst_Tabellen
.Clear
'~~> Transpose to get 0-based array
.List = Application.Transpose(arData)
End With
End Sub