繁体   English   中英

Excel VBA列到列表框

[英]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)

ActiveSheetWorksheets("Sheet1")是相同的东西时,使用属于ActiveSheetCells作为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM