作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据一个教程,我在 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 LookForMatches()
' Set a reference to our range
Dim MyRange As Range
Set MyRange = ThisWorkbook.Sheets("Sheet1").Range("A1:C4")
' Loop through all of the cells in the range
Dim Cell As Variant
For Each Cell In MyRange.Cells
' In this example, we will check if the cell equals 1
' If it does, display a message informing the user of the match and the location of the cell
If Cell.Value = 1 Then
MsgBox "Match found. The cell " & Cell.Address & " equals 1."
End If
Next Cell
End Sub
这是用于我的示例的 Sheet1 上的数据。
Cell.Row
方法而不是
Cell.Address
方法。
关于excel - 如何在 Excel 中使用 VBA 遍历所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66295663/
我是一名优秀的程序员,十分优秀!