【发布时间】:2019-04-14 17:34:14
【问题描述】:
我在此行收到“下标超出范围”错误消息:
Set NextRow = Sheets(xSheet).Cells.FindNext(After:=bookmark)
理论上,我在设置 foundCell 的那一刻就设置了书签。
我想:
搜索与“Str”变量中的文本匹配的第一条记录。
使用 Excel 的查找功能,查找文本及其所在的行并根据单元格值填充用户表单
计算总结果,以便我可以在用户表单的某处找到 [3] 中的 [1]
使用按钮返回(上一个和下一个)我的搜索结果。
'Global Variables
Dim foundCell
Dim bookmark
Private Sub btnSearch_Click()
Dim Str
Dim FirstAddr
Dim xSheet
xSheet = "Office Spaces"
Str = "B-32"
With Sheets(xSheet)
Set foundCell = .Cells.Find(What:=Str, After:=.Cells(1, 1), _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
Set bookmark = foundCell
End With
If Not foundCell Is Nothing Then
MsgBox ("""Bingo"" found in row " & foundCell.Row)
UserForm1.location.Text = Sheets(xSheet).Cells(foundCell.Row, 3).Value
UserForm1.office.Value = Sheets(xSheet).Cells(foundCell.Row, 2).Value
UserForm1.floor.Value = Sheets(xSheet).Cells(foundCell.Row, 1).Value
UserForm1.status.Value = Sheets(xSheet).Cells(foundCell.Row, 4).Value
UserForm1.telephone.Value = Sheets(xSheet).Cells(foundCell.Row, 5).Value
UserForm1.mobile.Value = Sheets(xSheet).Cells(foundCell.Row, 6).Value
UserForm1.owner.Value = Sheets(xSheet).Cells(foundCell.Row, 7).Value
UserForm1.notes.Value = Sheets(xSheet).Cells(foundCell.Row, 8).Value
UserForm1.recnum.Value = 1
FirstAddr = foundCell.Address
Dim i
Do Until foundCell Is Nothing
Set foundCell = Sheets(xSheet).Cells.FindNext(After:=foundCell)
i = i + 1
If foundCell.Address = FirstAddr Then Exit Do
Loop
If i > 1 Then
btnPrev.Enabled = True
btnNext.Enabled = True
End If
UserForm1.recmax.Value = i
Else
MsgBox ("Bingo not found")
End If
End Sub
Private Sub btnNext_Click()
Dim NextRow
Set NextRow = Sheets(xSheet).Cells.FindNext(After:=bookmark)
UserForm1.location.Value = Sheets(xSheet).Cells(NextRow.Row, 3).Value
UserForm1.office.Value = Sheets(xSheet).Cells(NextRow.Row, 2).Value
End Sub
【问题讨论】:
-
在
btnNext_Click中,您引用的是在您的其他子中定义的xSheet。 -
尝试并明确地
Dim您的变量。即Dim Str as String等等 -
另外你需要在 FindNext 之前找到。
-
@cybernetic.nomad 最好是
Dim someOtherName As String。Str正在隐藏 a native VBA function... ;-) -
好的,请把它作为解决方案发布,我会接受的。