Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel中使用VBA循环浏览所有列_Excel_Vba_Loops - Fatal编程技术网

如何在Excel中使用VBA循环浏览所有列

如何在Excel中使用VBA循环浏览所有列,excel,vba,loops,Excel,Vba,Loops,基于一个教程,我在Excel中创建了一个小型联系人管理器,并为自己的目的进行了一些调整。到目前为止,作为VBA noob,这对我来说是一次很好的经历:) 一些背景信息 我有两张床单。第一个包含人和他们的地址。第二页包含他们所有的联系人详细信息(以防止在第一页上无限列地显示不同的电话、邮件等)。详细信息根据第一页中数据的ID进行匹配,并显示在两个列表框中。 搜索值存储在C5中。C4引用特定类型数据(如名称、地址、位置)的列,当我要搜索所有列时,该列为空 问题 当我尝试搜索某个东西时,它只返回找到的

基于一个教程,我在Excel中创建了一个小型联系人管理器,并为自己的目的进行了一些调整。到目前为止,作为VBA noob,这对我来说是一次很好的经历:)

一些背景信息

我有两张床单。第一个包含人和他们的地址。第二页包含他们所有的联系人详细信息(以防止在第一页上无限列地显示不同的电话、邮件等)。详细信息根据第一页中数据的ID进行匹配,并显示在两个列表框中。 搜索值存储在C5中。C4引用特定类型数据(如名称、地址、位置)的列,当我要搜索所有列时,该列为空

问题

当我尝试搜索某个东西时,它只返回找到的第一个项目并停止。我想我需要创建一个循环来获取所有项目,但到目前为止,我还没有成功地创建一个有效的循环

我目前掌握的代码

Private Sub btnZoeken_Click()
'dim the variables
Dim Crit As Range
Dim FindMe As Range
Dim DataSH As Worksheet

On Error GoTo errHandler:

Set DataSH = Sheet1

Application.ScreenUpdating = False

'Default search criteria is Alles (all columns).
If Me.cboHeader.Value <> "Alles" Then
        If Me.txtZoeken = "" Then
        DataSH.Range("C5") = ""
        Else
        DataSH.Range("C5") = "*" & Me.txtZoeken.Value & "*"
        End If
End If

'if all columns is selected
If Me.cboHeader.Value = "Alles" Then
'find the value in the column
    Set FindMe = DataSH.Range("B9:H30000").Find(What:=txtZoeken, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
'variable for criteria header
    Set Crit = DataSH.Cells(8, FindMe.Column)
'if no criteria is added to the search
        If Me.txtZoeken = "" Then
        DataSH.Range("C5") = ""
        DataSH.Range("C4") = ""
        Else
        'add values from the search
        DataSH.Range("C4") = Crit
            If Crit = "ID" Then
            DataSH.Range("C5") = Me.txtZoeken.Value
            Else
            DataSH.Range("C5") = "*" & Me.txtZoeken.Value & "*"
            End If
        End If
End If


'filter the data
DataSH.Range("B8").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("Data!$C$4:$C$5"), CopyToRange:=Range("Data!$N$8:$T$8"), _
Unique:=False
'add the dynamic data to the listbox
lstResult.RowSource = DataSH.Range("outdata").Address(external:=True)

'show which column contained to selected value (for now only for debugging)
Me.RegTreffer.Value = DataSH.Range("C4")

'error handler
On Error GoTo 0
Exit Sub
errHandler:
'if error occurs then show me exactly where the error occurs
MsgBox "No result for " & txtZoeken.Text & " in " & Me.cboHeader.Value
'clear the listbox if no match is found
Me.lstResult.RowSource = ""
Exit Sub
End Sub
Private Sub btnZoeken_Click()
"淡化变数"
暗爆作为射程
变暗鳍作为射程
Dim DataSH As工作表
错误转到错误处理程序时:
设置DataSH=Sheet1
Application.ScreenUpdating=False
'默认搜索条件为Alles(所有列)。
如果Me.cboHeader.Value“Alles”那么
如果Me.txtZoeken=“那么
数据范围(“C5”)=“”
其他的
DataSH.Range(“C5”)=“*”&Me.txtZoeken.Value&“*”
如果结束
如果结束
'如果选择了所有列
如果Me.cboHeader.Value=“Alles”,则
'在列中查找值
设置FindMe=DataSH.Range(“B9:H30000”).Find(What:=txtZoeken,LookIn:=xlValues_
查看:=xlPart,搜索顺序:=xlByRows,搜索方向:=xlNext_
MatchCase:=False,SearchFormat:=False)
'条件标题的变量
设置临界值=数据单元格(8,FindMe.列)
'如果搜索中未添加任何条件
如果Me.txtZoeken=“那么
数据范围(“C5”)=“”
数据范围(“C4”)=“”
其他的
'从搜索中添加值
数据范围(“C4”)=临界值
如果Crit=“ID”,则
数据范围(“C5”)=Me.txtZoeken.Value
其他的
DataSH.Range(“C5”)=“*”&Me.txtZoeken.Value&“*”
如果结束
如果结束
如果结束
'过滤数据
数据范围(“B8”).CurrentRegion.AdvancedFilter操作:=xlFilterCopy_
CriteriaRange:=范围(“数据!$C$4:$C$5”)、复制范围:=范围(“数据!$N$8:$T$8”)_
唯一:=False
'将动态数据添加到列表框
lstreult.RowSource=DataSH.Range(“outdata”).Address(外部:=True)
'显示所选值包含的列(目前仅用于调试)
Me.RegTreffer.Value=DataSH.Range(“C4”)
'错误处理程序
错误转到0
出口接头
错误处理程序:
'如果发生错误,请告诉我错误发生的确切位置
MsgBox“无结果”&txtZoeken.Text&“in”&Me.cboHeader.Value
'如果找不到匹配项,请清除列表框
Me.lstreult.RowSource=“”
出口接头
端接头
我应该如何构建一个循环来获取任何列中具有匹配值的所有行?我需要创建两个不同的循环吗?一个用于在所有列中搜索,另一个用于搜索特定列,这不重要吗