Excel 使用.Find和if语句vba在列表框中使用不同的偏移量
我在userform中有一个列表框,其中显示了数据库中的搜索。我在数据库中有14列,我希望能够搜索信息。因此,我有一个用于搜索的文本框和一个列表框,用于在文本框更改时查看结果。以下是我目前拥有的代码:Excel 使用.Find和if语句vba在列表框中使用不同的偏移量,excel,vba,userform,Excel,Vba,Userform,我在userform中有一个列表框,其中显示了数据库中的搜索。我在数据库中有14列,我希望能够搜索信息。因此,我有一个用于搜索的文本框和一个列表框,用于在文本框更改时查看结果。以下是我目前拥有的代码: With ARK_database.Range("A:AS") Dim rng2Find As Range Dim strFirstFind As String lstLookup.Clear If Not kritLookup.Text = "" Then
With ARK_database.Range("A:AS")
Dim rng2Find As Range
Dim strFirstFind As String
lstLookup.Clear
If Not kritLookup.Text = "" Then
Set rng2Find = .Find(kritLookup.Text, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
If Not rng2Find Is Nothing Then
strFirstFind = rng2Find.Address
Column = rng2Find.Column
Do
If Column = 1 Then
If rng2Find.Row > 1 Then
lstLookup.AddItem rng2Find.Value 'RefNr
lstLookup.List(lstLookup.ListCount - 1, 1) = rng2Find.Offset(0, 3) 'navn
lstLookup.List(lstLookup.ListCount - 1, 2) = rng2Find.Offset(0, 1) 'dato
lstLookup.List(lstLookup.ListCount - 1, 3) = rng2Find.Offset(0, 4) 'varsler navn
lstLookup.List(lstLookup.ListCount - 1, 4) = rng2Find.Offset(0, 6) 'varlser adr
lstLookup.List(lstLookup.ListCount - 1, 5) = rng2Find.Offset(0, 5) 'varsler tlf
lstLookup.List(lstLookup.ListCount - 1, 6) = rng2Find.Offset(0, 7) 'varsler zip
lstLookup.List(lstLookup.ListCount - 1, 7) = rng2Find.Offset(0, 8) 'varsler sted
lstLookup.List(lstLookup.ListCount - 1, 8) = rng2Find.Offset(0, 9) 'region
End If
End If
If Column = 43 Then
If rng2Find.Row > 1 Then
lstLookup.AddItem rng2Find.Value 'nettstasjon
lstLookup.List(lstLookup.ListCount - 1, 1) = rng2Find.Offset(0, -42) 'refnr
lstLookup.List(lstLookup.ListCount - 1, 2) = rng2Find.Offset(0, -41) 'dato
lstLookup.List(lstLookup.ListCount - 1, 3) = rng2Find.Offset(0, -39) 'reg av
lstLookup.List(lstLookup.ListCount - 1, 4) = rng2Find.Offset(0, -36) 'adr feil
lstLookup.List(lstLookup.ListCount - 1, 5) = rng2Find.Offset(0, -4) 'avg
lstLookup.List(lstLookup.ListCount - 1, 6) = rng2Find.Offset(0, -38) 'varsler
lstLookup.List(lstLookup.ListCount - 1, 7) = rng2Find.Offset(0, -21) 'kat
lstLookup.List(lstLookup.ListCount - 1, 8) = rng2Find.Offset(0, -33) 'region
lstLookup.List(lstLookup.ListCount - 1, 9) = rng2Find.Offset(0, -18) 'beskrivelse
End If
End If
Set rng2Find = .FindNext(rng2Find)
Loop While Not rng2Find Is Nothing And rng2Find.Address <> strFirstFind
End If
Else
lstLookup.Clear
End If
End With
带有ARK_数据库.Range(“A:AS”)
Dim RNG2查找As范围
Dim strFirstFind As字符串
好的,明白了
如果不是kritLookup.Text=“”,则
设置rng2Find=.Find(kritLookup.Text,LookIn:=xlValues,LookAt:=xlPart,MatchCase:=False)
如果不是rng2Find,则为Nothing
strFirstFind=rng2Find.Address
Column=rng2查找列
做
如果列=1,则
如果RNG2查找行>1,则
lstLookup.AddItem rng2Find.Value“RefNr”
lstLookup.List(lstLookup.ListCount-1,1)=rng2Find.Offset(0,3)'navn
lstLookup.List(lstLookup.ListCount-1,2)=rng2Find.Offset(0,1)'dato
lstLookup.List(lstLookup.ListCount-1,3)=rng2Find.Offset(0,4)'varsler navn
lstLookup.List(lstLookup.ListCount-1,4)=rng2Find.Offset(0,6)'varlser adr
lstLookup.List(lstLookup.ListCount-1,5)=rng2Find.Offset(0,5)'varsler tlf
lstLookup.List(lstLookup.ListCount-1,6)=rng2Find.Offset(0,7)'varsler-zip
lstLookup.List(lstLookup.ListCount-1,7)=rng2Find.Offset(0,8)'varsler
lstLookup.List(lstLookup.ListCount-1,8)=rng2Find.Offset(0,9)”区域
如果结束
如果结束
如果列=43,则
如果RNG2查找行>1,则
lstLookup.AddItem rng2Find.Value“nettstatsjon”
lstLookup.List(lstLookup.ListCount-1,1)=rng2Find.Offset(0,-42)”参考编号
lstLookup.List(lstLookup.ListCount-1,2)=rng2Find.Offset(0,-41)'dato
lstLookup.List(lstLookup.ListCount-1,3)=rng2查找偏移量(0,-39)'reg av
lstLookup.List(lstLookup.ListCount-1,4)=rng2Find.Offset(0,-36)'adr feil
lstLookup.List(lstLookup.ListCount-1,5)=rng2Find.Offset(0,-4)“平均值
lstLookup.List(lstLookup.ListCount-1,6)=rng2Find.Offset(0,-38)'varsler
lstLookup.List(lstLookup.ListCount-1,7)=rng2Find.Offset(0,-21)'kat
lstLookup.List(lstLookup.ListCount-1,8)=rng2Find.Offset(0,-33)”区域
lstLookup.List(lstLookup.ListCount-1,9)=rng2Find.Offset(0,-18)'beskrivelse
如果结束
如果结束
设置rng2Find=.FindNext(rng2Find)
非rng2Find时的循环为Nothing,rng2Find.Address strFirstFind为Nothing
如果结束
其他的
好的,明白了
如果结束
以
我的问题是,我不知道如何使用.Find对结果进行排序。我假设使用a For Each会更容易,但速度要慢得多。我希望所有结果都显示在同一个列表框中,但偏移量正确。有更好的方法吗?或者用什么方法让它起作用
谢谢,我知道怎么做了。这就是我的结局
Private Sub cmd_lookup_Click()
Application.ScreenUpdating = False
ARK_database.Activate
With ARK_database.Range("A:AS")
Dim StartDate As Date
Dim EndDate As Date
Dim Tomorrow As Date
Tomorrow = Date + 1
Dim rng2Find As Range
Dim strFirstFind As String
Dim KritLookupFind As Range
lstLookup.Clear
If Not kritLookup.Text = "" Then
Set rng2Find = .Find(kritLookup.Text, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
'if value found then set a variable for the address
If Not rng2Find Is Nothing Then
strFirstFind = rng2Find.Address
Column = rng2Find.Column
If Column = 1 Or Column = 2 Or Column = 4 Or Column = 5 Or Column = 6 Or Column = 7 Or Column = 20 Or Column = 21 Or Column = 22 Or Column = 31 Or Column = 34 Or Column = 39 Or _
Column = 43 Or Column = 45 Then
Do
If rng2Find.Row > 1 Then
sjekkVariabel = Cells(rng2Find.Row, 1).Value
For i = 0 To lstLookup.ListCount - 1
If lstLookup.List(i) = sjekkVariabel Then
GoTo LastLine
End If
Next i
lstLookup.AddItem Cells(rng2Find.Row, 1).Value 'RefNr
lstLookup.List(lstLookup.ListCount - 1, 1) = Cells(rng2Find.Row, 1).Offset(0, 1) 'dato
lstLookup.List(lstLookup.ListCount - 1, 2) = Cells(rng2Find.Row, 1).Offset(0, 42) 'NS
lstLookup.List(lstLookup.ListCount - 1, 3) = Cells(rng2Find.Row, 1).Offset(0, 20) 'kommune
lstLookup.List(lstLookup.ListCount - 1, 4) = Cells(rng2Find.Row, 1).Offset(0, 21) 'komponent
lstLookup.List(lstLookup.ListCount - 1, 5) = Cells(rng2Find.Row, 1).Offset(0, 4) 'kunde navn
lstLookup.List(lstLookup.ListCount - 1, 6) = Cells(rng2Find.Row, 1).Offset(0, 24) 'beskrivelse
End If
'find the next address to add
LastLine:
Set rng2Find = .FindNext(rng2Find)
Loop While Not rng2Find Is Nothing And rng2Find.Address <> strFirstFind
End If
Set rng2Find = .FindNext(rng2Find)
End If
Else
lstLookup.Clear
End If
End With
End Sub
Private Sub cmd\u lookup\u Click()
Application.ScreenUpdating=False
ARK_database.Activate
使用ARK_database.Range(“A:AS”)
Dim StartDate作为日期
Dim EndDate作为日期
黯淡的明天
明天=日期+1
Dim RNG2查找As范围
Dim strFirstFind As字符串
Dim KritLookupFind As范围
好的,明白了
如果不是kritLookup.Text=“”,则
设置rng2Find=.Find(kritLookup.Text,LookIn:=xlValues,LookAt:=xlPart,MatchCase:=False)
'如果找到值,则为地址设置一个变量
如果不是rng2Find,则为Nothing
strFirstFind=rng2Find.Address
Column=rng2查找列
如果Column=1或Column=2或Column=4或Column=5或Column=6或Column=7或Column=20或Column=21或Column=22或Column=31或Column=34或Column=39或_
列=43或列=45,则
做
如果RNG2查找行>1,则
Sjekvariabel=单元格(rng2Find.Row,1).Value
对于i=0到lstLookup.ListCount-1
如果lstLookup.List(i)=sjekvariabel,则
转到最后一行
如果结束
接下来我
lstLookup.AddItem单元格(rng2Find.Row,1)。值'RefNr
lstLookup.List(lstLookup.ListCount-1,1)=单元格(rng2Find.Row,1).Offset(0,1)'dato
lstLookup.List(lstLookup.ListCount-1,2)=单元格(rng2Find.Row,1).Offset(0,42)'NS
lstLookup.List(lstLookup.ListCount-1,3)=单元格(rng2Find.Row,1).Offset(0,20)'kommune
lstLookup.List(lstLookup.ListCount-1,4)=单元格(rng2Find.Row,1).Offset(0,21)'komponent
lstLookup.List(lstLookup.ListCount-1,5)=单元格(rng2Find.Row,1).Offset(0,4)'kunde navn
lstLookup.List(lstLookup.ListCount-1,6)=单元格(rng2Find.Row,1).Offset(0,24)'beskrivelse
如果结束
'查找要添加的下一个地址
最后一行:
设置rng2Find=.FindNext(rng2Find)
非rng2Find时的循环为Nothing,rng2Find.Address strFirstFind为Nothing
如果结束
设置rng2Find=.FindNext(rng2Find)
如果结束
其他的
好的,明白了
如果结束
以
端接头
我知道怎么做了。这就是我的结局
Private Sub cmd_lookup_Click()
Application.ScreenUpdating = False
ARK_database.Activate
With ARK_database.Range("A:AS")
Dim StartDate As Date
Dim EndDate As Date
Dim Tomorrow As Date
Tomorrow = Date + 1
Dim rng2Find As Range
Dim strFirstFind As String
Dim KritLookupFind As Range
lstLookup.Clear
If Not kritLookup.Text = "" Then
Set rng2Find = .Find(kritLookup.Text, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
'if value found then set a variable for the address
If Not rng2Find Is Nothing Then
strFirstFind = rng2Find.Address
Column = rng2Find.Column
If Column = 1 Or Column = 2 Or Column = 4 Or Column = 5 Or Column = 6 Or Column = 7 Or Column = 20 Or Column = 21 Or Column = 22 Or Column = 31 Or Column = 34 Or Column = 39 Or _
Column = 43 Or Column = 45 Then
Do
If rng2Find.Row > 1 Then
sjekkVariabel = Cells(rng2Find.Row, 1).Value
For i = 0 To lstLookup.ListCount - 1
If lstLookup.List(i) = sjekkVariabel Then
GoTo LastLine
End If
Next i
lstLookup.AddItem Cells(rng2Find.Row, 1).Value 'RefNr
lstLookup.List(lstLookup.ListCount - 1, 1) = Cells(rng2Find.Row, 1).Offset(0, 1) 'dato
lstLookup.List(lstLookup.ListCount - 1, 2) = Cells(rng2Find.Row, 1).Offset(0, 42) 'NS
lstLookup.List(lstLookup.ListCount - 1, 3) = Cells(rng2Find.Row, 1).Offset(0, 20) 'kommune
lstLookup.List(lstLookup.ListCount - 1, 4) = Cells(rng2Find.Row, 1).Offset(0, 21) 'komponent
lstLookup.List(lstLookup.ListCount - 1, 5) = Cells(rng2Find.Row, 1).Offset(0, 4) 'kunde navn
lstLookup.List(lstLookup.ListCount - 1, 6) = Cells(rng2Find.Row, 1).Offset(0, 24) 'beskrivelse
End If
'find the next address to add
LastLine:
Set rng2Find = .FindNext(rng2Find)
Loop While Not rng2Find Is Nothing And rng2Find.Address <> strFirstFind
End If
Set rng2Find = .FindNext(rng2Find)
End If
Else
lstLookup.Clear
End If
End With
End Sub
Private Sub cmd\u lookup\u Click()
Application.ScreenUpdating=False
阿库数据库。