2017-07-24 161 views
-1

我有兩個問題。首先,在下面的代碼中,我試圖搜索單詞以便更快地找到確切的對象,但是每次我啓動程序時,都會從空白開始,直到我放入字符並擦除,然後出現列表框中的所有內容。我認爲拿走Me.allitems.Clear會解決它,但是當我試圖刪除Me.allitems.Clear時,它不會影響它。在Excel VBA上搜索多列

我的第二個問題是,由於我有兩列,我需要它來搜索兩個列的各個單詞。我嘗試複製底部代碼

If Left(itemsheet.Cells(i, 1).Value, a) = Left(Me.searchbox.Text, a) Then 
Me.allitems.AddItem itemsheet.Cells(i, 1).Value 
Me.allitems.List(allitems.ListCount - 1, 1) = itemsheet.Cells(i, 2).Value 
End If 

並添加2到它,但沒有奏效。

整個代碼:

Private Sub searchbox_Change() 

Dim itemsheet As Worksheet 
Set itemsheet = Application.ActiveWorkbook.Sheets(6) 

Dim i As Long 

Me.searchbox.Text = StrConv(Me.searchbox.Text, vbProperCase) 
Me.allitems.Clear 
For i = 2 To Application.WorksheetFunction.CountA(itemsheet.Range("A:B")) 
    a = Len(Me.searchbox.Text) 
    If Left(itemsheet.Cells(i, 1).Value, a) = Left(Me.searchbox.Text, a) Then 
     Me.allitems.AddItem itemsheet.Cells(i, 1).Value 
     Me.allitems.List(allitems.ListCount - 1, 1) = itemsheet.Cells(i, 2).Value 
    End If 
Next i 

End Sub 

有什麼建議?

編輯: 我發現的第一個問題實際上是增加的項目時到列表框在這一行:

.List(i, 0) = itemnum 
.List(i, 1) = Description 
i = i + 1 

這是添加在ListBox代碼的信息:

For Each itemname In itemsheet.Range("A2:A3400") 
    With Me.allitems 
     .ColumnCount = 2 
     .ColumnWidths = "60;60" 
     .AddItem itemname.Value 
     .List(i, 0) = itemnum 
     .List(i, 1) = Description 
     i = i + 1 
    End With 
Next itemname 

所以具體我是問題,但我需要它來添加列

這就是這樣看起來當我第一次打開它

enter image description here

當我把一個字符,然後刪除這似乎

enter image description here

這是它是如何想的樣子,我應該能夠添加它:

enter image description here

回答

-1

對於那些,誰是wonderi NG如何解決這種類型,這是很容易,只需要加一個還是爲列如下:

If Left(itemsheet.Cells(i, 1).Value, a) = Left(Me.searchbox.Text, a) Or Left(itemsheet.Cells(i, 2).Value, a) = Left(Me.searchbox.Text, a) Then

至於我的第一個問題,還在尋找,但現在我已經是做Do Until loop ="" 哪一個只顯示一列中的所有內容