【问题标题】:vba run-time error 91: Find date in rangevba 运行时错误 91:在范围内查找日期
【发布时间】:2018-11-09 05:42:38
【问题描述】:

我有一个我在 excel 中编写的 vba 脚本,它运行得非常愉快,直到几天前它变得喜怒无常。我有四个具有命名范围的工作表,我正在复制名称范围,并粘贴到具有今天日期的列中。此宏在第二次日期查找 (Sheet2) 和 (Sheet4) 时失败

如果我尝试再次运行它,它似乎在所有日期查找中都失败了。 这段代码甚至简要了解了要做什么,并且没有错误地执行,然后在重新运行时返回错误。

我明白了

运行时错误 91:对象变量或未设置块

让我感到困惑的是,这在过去一年到大约一周前都运行良好。任何帮助将不胜感激。

Sub Test()

Range("Sheet1").Copy
Worksheets("Sheet1").Cells.Find(What:=Date, After:=Range("A1"), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(4, 0).PasteSpecial Paste:=xlPasteValues
Sheets("Sheet1").Select
Range("C2").Select

Range("Sheet2").Copy
Worksheets("Sheet2").Cells.Find(What:=Date, After:=Range("A1"), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(4, 0).PasteSpecial Paste:=xlPasteValues
Sheets("Sheet2").Select
Range("C2").Select

Range("Sheet3").Copy
Worksheets("Sheet3").Cells.Find(What:=Date, After:=Range("A1"), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(4, 0).PasteSpecial Paste:=xlPasteValues
Sheets("Sheet3").Select
Range("C2").Select

Range("Sheet4").Copy
Worksheets("Sheet4").Cells.Find(What:=Date, After:=Range("A1"), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext).Offset(4, 0).PasteSpecial Paste:=xlPasteValues
Sheets("Sheet4").Select
Range("C2").Select

End Sub

【问题讨论】:

  • 似乎 Find() 没有匹配,因此该行的其余部分失败。
  • @TimWilliams 是的 - 我尝试创建一个新的 excel 工作簿,创建一个新工作表并在工作表之间使用相同的日期复制工作表(认为工作簿可能已损坏),但仍然无法找到日期对于 sheet2。如果我将单词日期更改为“2018 年 9 月 11 日”,它会起作用。
  • Sheet2 出现问题 - 日期真的是日期还是文本?

标签: excel vba


【解决方案1】:

使用Find() 时,在尝试对匹配项进行操作之前检查您是否获得匹配项更为可靠。

例如:

Sub Test()

    Dim f As Range, nm

    For Each nm In Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")

        Set f = Worksheets(nm).Cells.Find(What:=Date, After:=Worksheets(nm).Range("A1"), _
                          LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext)

        If Not f Is Nothing Then
            With Range("Sheet1")
                f.Offset(4, 0).Resize(.Rows.Count, .Columns.Count).Value = .Value
            End With
        Else
            MsgBox "Date not found on '" & nm & "'"
        End If

    Next nm

End Sub

【讨论】:

  • 这些工作表具有完全相同的格式和数据,因为我在创建工作表中的所有数据以用于测试目的时突出显示了四张工作表。我刚刚尝试的是在宏中移动 Sheet 执行,所以 Sheet2、1、4、3。它在每第二张纸上都失败,(目前是第 1 和第 3 页)
  • 您的代码完美运行 :) 没有错误并找到所有日期...我想知道是不是因为使用了 Dim 和 Set
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 2016-10-08
  • 2020-02-19
相关资源
最近更新 更多