【问题标题】:Why do I get the an error with the code below为什么我会收到以下代码的错误
【发布时间】:2020-11-11 07:37:02
【问题描述】:

我有以下代码并不断收到消息“对象变量或未设置块变量

Sub Find()
Dim Order As String
Order = frmForm.txtSO   
Sheets("Download").Select
Range("D2:D4130").Find(What:="Order").Select
End Sub

frmForm.txtSO 是我创建的用户表单中的一个字段。我不知道为什么我不断收到错误消息

【问题讨论】:

  • 可能“frmForm”在 Sub 中是未知的。

标签: vba excel-2010


【解决方案1】:

修复错误:

您需要删除“订单”周围的引号,目前您正在搜索字符串“订单”而不是变量,这应该可以:

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 时,它将从上一次运行中选择的任何内容开始搜索

【讨论】:

  • 怀疑 frmForm.txtSO 是否会起作用。您应该尝试检查变量。它可能是您要使用的 frmForm.txtSO.text(如果 txtSO 是 TextBox)。
  • @LoBellin 一开始我也持怀疑态度,但我在发布答案之前测试了上面的代码,并且可以确认它可以工作,而无需在参考末尾添加.text
  • 成功了,谢谢。有时订单会被列出不止一次,因为订单中有多个产品。关于如何循环列出每个条目的任何想法?
  • 没问题,我已经更新了我的答案来解决这个问题,如果您有任何问题,请告诉我
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 2016-09-05
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 2011-08-05
  • 1970-01-01
相关资源
最近更新 更多