问题描述
我有以下代码,并不断收到消息“对象变量或With Block变量未设置
Sub Find()
Dim Order As String
Order = frmForm.txtSO
Sheets("Download").Select
Range("D2:D4130").Find(What:="Order").Select
End Sub
frmForm.txtSO是我创建的用户表单中的一个字段。我不确定为什么会一直收到错误消息
解决方法
修复错误:
您需要删除“ Order”周围的引号,当前您正在搜索字符串“ Order”而不是变量,这应该可以:
Sub Find()
Dim Order As String
Order = frmForm.txtSO
Sheets("Download").Select
Range("D2:D4130").Find(What:=Order).Select
End Sub
找不到搜索字符串:
您可能还想添加一些代码来处理找不到“订单”的情况,如下所示:
Sub Find()
Dim Order As String
Dim findRng As Range
Order = frmForm.txtSO
Set findRng = Sheets("Download").Range("D2:D4130").Find(What:=Order)
If Not findRng Is Nothing Then
Sheets("Download").Activate
findRng.Select
Else
MsgBox ("Order not found")
End If
End Sub
确保可以找到多个搜索字符串:
为确保您能够“遍历” D列中的重复记录,您需要再次修改代码。本质上,您需要更改Find
范围,以便它从当前选定的单元格开始搜索,并从此开始向下移动:
Sub Find()
Dim Order As String
Dim findRng As Range
Order = frmForm.txtSO
Set findRng = Range("D" & ActiveCell.Row & ":D4130").Find(What:=Order)
If Not findRng Is Nothing Then
findRng.Select
Else
MsgBox ("Order not found")
End If
End Sub
但是,如果打开用户窗体时当前选择的单元格位于要搜索的记录的下方,则上述代码将找不到该记录。要解决此问题,无需激活该子菜单中的“下载”工作表,只需激活工作表并从启动用户窗体的同一子菜单中选择单元格D1
,如下所示:
Sheets("Download").Activate
Range("D1").Select
frmForm.Show
这将确保在最初启动用户表单时,搜索将从D1
开始,但是随后每次运行Find
时,它将从上一次运行中选择的内容开始搜索