簡體   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