2017-06-20 11 views
0

このフォーラムでこれまでに似たようなケースを見たことがありますが、私の正確な問題の適切な解決策は見られませんでした。リストボックスVBAでマルチカラムデータの複数のエントリを表示する

基本的に私は、データテーブルのデータを管理するリストボックスを持つユーザーフォームを持っています。各「エントリーID」(列Aの)に結び付けられた複数のエントリーがあります。私がsearchboxの "エントリーID"を検索すると、リストボックス内の各エントリーの列AからJまでのすべての関連するエントリーを見たいと思います(したがって、コードはループして複数の行を見つけ、リストボックスへの各行の複数の列、私は苦労していると思います)。

私はここにフォーラムで同様のケースで見つけたコードの一部を採用しているが、複数の列をコピーするように見えることはできません。

Private Sub cmdFind_Click() 
Dim sht As Worksheet 
Dim lastrow As Variant 
Dim strSearch As String 
Dim aCell As Range 
Dim row_number As Integer 
Dim item_in_review As Variant 


Set sht = ActiveWorkbook.Sheets("a") 
lastrow = sht.Range("A" & Rows.Count).End(xlUp).Row 
strSearch = txtSearch.Text 
    Set aCell = sht.Range("A1:A" & lastrow).Find(What:=strSearch, LookIn:=xlValues, _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 

     If Not aCell Is Nothing Then 
     GoTo wfrefvalid 
    Else 
MsgBox "Oops! That Work File does not exist. Please try again.", Title:="Try again" 
txtSearch.Value = "" 
     End If 
    Exit Sub 

wfrefvalid: 
row_number = 3 
'clears the listbox so that you have dont have a continuously growing list 
lstSearch.Clear 
Do 
DoEvents 
row_number = row_number + 1 
item_in_review = sht.Range("A" & row_number) 
If item_in_review = txtSearch.Text Then 
lstSearch.AddItem sht.Range("A" & row_number & ":J" & row_number) 

End If 
Loop Until item_in_review = "" 

End Sub 

私はこれではないかなり確信しています私がやりたいことをやっている正しい方法ですが、私は全く同じような事例を見つけることができません。

すべてのヒントに非常に感謝します。

編集:@braXはランタイムエラー(コードが更新されました)を削除するのに役立ちましたが、リストボックスにデータがアップロードされていません...おそらく、私は "行" -loopまたはaddItem関数を正しく参照していません彼らのうちのどれが確かですか?

答えて

0

あなたはA列の行番号が欠落している: あなたはそれがより多くのこのような

lstSearch.AddItem Sheets("a").Range("A" & row_number & ":J" & row_number)

+0

はあなたに感謝しているはずです。この

lstSearch.AddItem Sheets("a").Range("A:J" & row_number)

を持っています!私は自分のコードを修正し、少なくともエラーを削除したが、データはリストボックスにアップロードされませんでした。エラーハンドラは、IDが存在しない場合には認識しますが、IDが存在する場合(つまり、人口などがない場合)は何も起こりません。私は技術的にあなたが私が持っていた特定のエラーに答えたと思うので、私はあなたに "答え"のポイントを与えますが、あなたは私のリストボックスにデータを挿入するためのポインタがありますか?前もって感謝します! Dim Arr()As Variant Arr = Range( "E6:H6") ListBox1.List = –

+0

最初に範囲を配列に変換してから、 '.AddItem'の代わりに' Arr – braX

+0

良いアイデアのように聞こえます。もう1つの最後の質問:私の配列は変化し、場合によっては不連続な範囲になるため、配列にデータを追加するのにどの構文を使うのが最適でしょうか?特に、AのIDが検索条件に一致する場合に基準がなることを考慮してください。私はおそらくあなたの指針のおかげでそこから自分自身を取ることができました。 –

関連する問題