2016-12-18 4 views
0

Excel VBAのユーザーフォームリストボックスに、シート1、行1の値をシートの動的な列数(列の範囲は22〜30列の範囲)に設定します。vboxの列をリストボックスに変換する

これまでのところ、私は以下のコードを持っていますが、セル "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 

ありがとうございました。

答えて

0
は、彼らが値の列の代わりに、値の行であるかのように細胞が扱われるように

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")ながら、細かいRangeWorksheets("Sheet1")の作品のための境界としてActiveSheetに属するCellsの使用同じものですが、異なる場合はクラッシュします。

私はちょうど私達が文法的にWorksheets("Sheet1")単に.のすべての出現をショートカットすることができますWith Worksheets("Sheet1")ブロックの使用をお勧めします。あなたのコードは次のようになります:

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 
+0

@A.S.H - あなたは私を見ている必要があります!私は更新を掲示し、あなたのコメントをupvoteに行ったが、すでに消えてしまった。 – YowE3K

関連する問題