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