2016-06-21 4 views
0

シートのセル行をユーザーフォームの複数列リストボックスに追加しようとしています。シート内の列の数も変化します。私は「タイプミスマッチ」というエラーが出ています。私のコードを踏んで、最初の.AddItem行にあることがわかりました。 .AddItemで複数の項目を追加できないことがわかりました。これを行う別の方法がありますか?私はvbaにはとても新しいです。ご協力いただきありがとうございます!VBAエラー13種類の不一致

Private Sub GenerateButton_Click() 
    Dim i As Long, counter As Long, counter_RA As Long, x As Integer 
    Dim LastColRA As Long, LastColCP As Long 


    LastColRA = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column 
    LastColCP = Sheet2.Cells(1, Columns.Count).End(xlToLeft).Column 


    'Check to make sure that enough items were selected 
    For x = 0 To ListBox2.ListCount - 1 
    If ListBox2.Selected(x) Then 
     counter_RA = counter_RA + 1 
     With TabData.DataTable 
     .AddItem Sheets(Sheet1).Range(Cells(x + 2, 1), Cells(x + 2, LastColRA)).Text 
     End With 
    End If 
    Next x 

    For i = 0 To ListBox1.ListCount - 1 
    If ListBox1.Selected(i) Then 
     counter = counter + 1 
     With TabData.DataTable 
     .AddItem Sheets(Sheet2).Range(Cells(i + 2, 1), Cells(i + 2, LastColCP)).Text 
     End With 
    End If 
    Next i 
End Sub 

答えて

1

あなたにはいくつかの問題があります。まず、複数のセル範囲のTextプロパティを使用すると、すべてのセルに同じテキストが含まれていない限り、Nullが返されます。第二に、あなたは注意して、あなたはAddItemを使用して一度に配列を追加することはできません - あなたは、インデックスは0ベースのしていることを思い出して、列を移入するために、ループの項目を追加する必要があります。

With TabData.DataTable 
    .AddItem 
    For n = 1 to LastColRA 
     .List(.ListCount - 1, n - 1) = Sheet1.Cells(x + 2, n).Value 
    next n 
End With 

ここではそのバージョンです10列以上で動作します:

Dim i As Long, counter As Long, counter_RA As Long, x As Long 
Dim LastColRA As Long, LastColCP As Long 
Dim vList() 


LastColRA = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column 
LastColCP = Sheet2.Cells(1, Columns.Count).End(xlToLeft).Column 


'Check to make sure that enough items were selected 
For x = 0 To ListBox2.ListCount - 1 
    If ListBox2.Selected(x) Then 
     counter_RA = counter_RA + 1 
     ReDim Preserve vList(1 To LastColRA, 1 To counter_RA) 
     For i = 1 To LastColRA 
      vList(i, counter_RA) = Sheet1.Cells(x + 2, i).Value 
     Next i 
    End If 
Next x 
For x = 0 To ListBox1.ListCount - 1 
    If ListBox1.Selected(x) Then 
     counter_RA = counter_RA + 1 
     ReDim Preserve vList(1 To LastColRA, 1 To counter_RA) 
     For i = 1 To LastColRA 
      vList(i, counter_RA) = Sheet2.Cells(x + 2, i).Value 
     Next i 
    End If 
Next x 

With TabData.DataTable 
    .ColumnCount = LastColRA 
    .Column = vList 
End With 
+0

ありがとうございます。 .List行のエラー13が再び表示されます。 – Liz

+0

いくつの列がありますか?あなたは 'AddItem'で10に制限されています。また、セルにエラー値がありますか? – Rory

+0

今のところ、私が扱っている5つの列があります。しかし、将来的には、このツールをもっと多く使うことができるようになることを願っています。エラー値はありません。すべての列にはテキストのみが含まれています。あなたの助けをもう一度ありがとう。 – Liz

関連する問題