为什么我的以下代码出现错误

问题描述

我有以下代码,并不断收到消息“对象变量或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时,它将从上一次运行中选择的内容开始搜索