excel vba列到列表框

时间:2016-12-18 01:42:09

标签: excel-vba listbox vba excel

我正在寻找一个Excel VBA用户表单列表框,其中包含工作表1,第1行中带有动态列数的列(列可以在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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

更改您的陈述

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)

使用属于Cells的{​​{1}}作为ActiveSheetRange的界限,Worksheets("Sheet1")ActiveSheet正常同样的事情,但如果它们不同则会崩溃。

我建议使用Worksheets("Sheet1")块,这样我们就可以在语法上将所有出现的With Worksheets("Sheet1")简化为Worksheets("Sheet1")。您的代码将如下所示:

.