改变你的陈述
ListBox1.List = rngSource.Cells.Value
成为
ListBox1.List = Application.Transpose(rngSource.Cells.Value)
以便将单元格视为一列值而不是一行值。
正如 A.S.H 在评论中指出的那样,您还具有不合格的属性(即 Cells 之类的东西,您没有指定该属性所指的工作表,因此它默认为活动工作表)。一旦您开始需要在宏中使用多个工作表,这些可能会导致问题,因此最好现在就养成完全限定事物的习惯。
目前,您的代码(在我上面建议的更正之后)相当于:
Dim rngSource As Range
Dim lCol As Long
'Determine last column
lCol = ActiveSheet.Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column
'Set range source data to be included in listbox
Set rngSource = Worksheets("Sheet1").Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(1, lCol))
'Populate listbox with range source data
lstAllFields.List = Application.Transpose(rngSource.Cells.Value)
使用属于ActiveSheet 的Cells 作为Worksheets("Sheet1") 上的Range 的边界可以正常工作,而ActiveSheet 和Worksheets("Sheet1") 是相同的,但如果它们不同则会崩溃。
我建议使用With Worksheets("Sheet1") 块,它只允许我们在语法上将所有出现的Worksheets("Sheet1") 简化为.。您的代码将如下所示:
Dim rngSource As Range
Dim lCol As Long
With Worksheets("Sheet1")
'Determine last column
lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
'Set range source data to be included in listbox
Set rngSource = .Range(.Cells(1, 1), .Cells(1, lCol))
'Populate listbox with range source data
lstAllFields.List = Application.Transpose(rngSource.Cells.Value)
End With