[英]excel vba columns to listbox
我正在寻找用表格1,第1行中的值填充表格中动态列数的Excel VBA用户窗体列表框(列的范围可以在22到30列之间)。
到目前为止,我有以下代码,但是它仅填充列表框中单元格“ A1”的值。
Dim rngSource As Range
Dim lCol As Long
'Determine last column
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
'Set range source data to be included in listbox
Set rngSource = Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, lCol))
'Populate listbox with range source data
lstAllFields.List = rngSource.Cells.Value
感谢您的协助。
更改您的陈述
ListBox1.List = rngSource.Cells.Value
成为
ListBox1.List = Application.Transpose(rngSource.Cells.Value)
以便将单元格视为值的一列而不是一行的值。
正如ASH的评论中指出的那样,您还具有不合格的属性(例如,像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
和Worksheets("Sheet1")
是相同的东西时,使用属于ActiveSheet
的Cells
作为Worksheets("Sheet1")
上的Range
的边界可以很好地Worksheets("Sheet1")
,但是如果它们不同,则会崩溃。
我建议使用With Worksheets("Sheet1")
块,该块仅允许我们在语法上将所有出现的Worksheets("Sheet1")
简化为simple .
。 您的代码将如下所示:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.