2017-06-20 94 views
0

我在這個論壇上看過類似的案例之前,但我還沒有看到一個適當的解決方案,我的確切問題,所以在這裏它...搜索並顯示列表框中的多列數據的多個條目VBA

基本上我有一個用戶窗體和一個用於管理數據表中數據的列表框。有多個條目與每個「條目ID」(列A中)相關聯。當我在搜索框中搜索「條目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幫助我刪除運行時錯誤(代碼更新),但沒有數據上傳到列表框中......也許我沒有正確引用「row」-loop或addItem函數,但沒有確定他們哪一個?

回答

0

你缺少的行號列A: 你有這個

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

它應該看起來更像這個

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

+0

謝謝!我修改了我的代碼,至少刪除了錯誤,但沒有數據上傳到列表框。錯誤處理程序可以識別ID何時不存在,但是如果ID確實存在(即沒有人口或任何東西),則不會發生任何事情。我想在技術上你回答了我遇到的具體錯誤,所以我會給你一個「回答」的觀點,但是你有沒有關於填充我的列表框的指示?提前致謝! –

+0

嘗試先將範圍轉換爲數組,然後使用'.List'而不是'.AddItem'如下所示: Dim Arr()As Variant Arr = Range(「E6:H6」) ListBox1.List = Arr – braX

+0

這聽起來像個好主意。最後一個問題:由於我的數組會變化並且在某些情況下不連續範圍,因此最好使用哪種語法將數據添加到數組中?特別考慮到如果A中的ID與搜索標準相匹配,那麼標準將是。我可以從那裏拿走它自己,謝謝你的指點。 –