【发布时间】:2021-01-26 10:42:25
【问题描述】:
希望你能帮帮我,因为我真的看不到错误。
我正在尝试创建一个带有列表框的用户窗体,用户可以在其中从数组中选择值。数组的代码如下:
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”行。
【问题讨论】:
-
您在
UserForm_Initialize()中使用了arArray,但您在该事件中的何处填充它? -
arArray变量在哪里声明?是Public并在标准模块级别声明吗?正如 Siddharth Rout 所问的那样,它居住在哪里?而不是“完美运行”的程序,您可以简单地使用:arArray = ThisWorkbook.Sheets("Import").Range("AS2:AS" & lastRow2).value。代码应该只计算lastRow2。这个简单的方法就可以了:lastRow2 = ThisWorkbook.Sheets("Import").Cells(rows.count, 45).End(xlUp).Row. -
arArray在第一个模块中声明为Public arArray As Variant -
没关系,但你在哪里填充它?此外,当调试器标记“Auswertung.Show”行时,按 F8 并逐步浏览每一行。最后告诉我们哪一行给了我们错误?
-
我在哪里填充它是什么意思?该数组在另一个名为“Import_CSV”的子中定义。我正在对导入的 csv 文件进行排序。该数组是可能的数据集列表,用户可以选择以进行进一步评估。因此,调试器一直工作到 UserForm_Initialize 子中的
Auswertung.Lst_Tabellen.List = arArray行。然后它停止并跳回到Auswertung.Show
标签: excel vba listbox userform