即使范围存在,VBA-全局对象也会失败

时间:2014-07-05 02:53:20

标签: vba excel-vba excel

我正在尝试编写一个脚本,它将按以下顺序执行以下操作:

  1. 找到位于包含特定字符串(DateRng)
  2. 的2个单元格之间的范围
  3. 在此范围内搜索具有值< = Value
  4. 的单元格(i)
  5. 比较偏向“i”
  6. 的其他两个单元格
  7. 将以“i”为中心的行范围导出到不同的工作表,等待结果 以上条件。
  8. 我可以得到第2步& 4工作(如果步骤2搜索整个工作表而不是DateRng。 我也可以让第1步工作

    但是,当我尝试将它们放在一起时,我得到一个错误消息:对象'_Global'的方法'范围'失败了。

    这对我来说没有任何意义,因为找到了DateRng。 如果有人可以就此提出建议那就太好了。我刚刚开始学习VBA,所以我对其余的脚本也提出建议/更正。

    下面我使用调试器在标记

    上停止的行粘贴了有问题的脚本
    Sub ReportCells()
    
    Dim LR As Long, i As Long
    Dim j, k As Long
    Dim StartDate, FinishDate As String
    Dim Sh As Worksheet: Set Sh = Sheets("Full chart and primary cals")
    Dim CellFound As Range
    
    'Range Extraction Script
    'Search location and values
    LookupColumn = "B"
    StartDate = "2013.01.02 20:00"
    FinishDate = "2013.01.09 20:00"
    'Find Lower Limit
    For j = 1 To 30000
    If Sh.Range(LookupColumn & j).Value = FinishDate Then FinishDateRow = j
    Next j
    'Find Upper Limit
    For k = FinishDateRow To 1 Step -1
    If Sh.Range(LookupColumn & k).Value = StartDate Then StartDateRow = k - 1
    Next k
    'Set Range once located
    Dim DateRng As Range: Set DateRng = Sh.Range(LookupColumn & StartDateRow & ":" & LookupColumn & FinishDateRow)
    
    MsgBox DateRng.Address
    
    'Find Cell
    **With Range("DateRng")**
    For i = 1 To LR
    Set CellFound = .Find(Sh.Range("M:M").Value <= 25)
    If Not CellFound Is Nothing And .Range("CellFound").Offset(0, -4).Value < .Range("CellFound").Offset(-10, -4).Value Then .Offset(-3, 0).Resize(10, 1).EntireRow.Copy Destination:=Sheets("Sheet18").Range("A" & Rows.Count).End(xlUp).Offset(2)
    If Not CellFound Is Nothing And .Range("CellFound").Offset(0, -4).Value > .Range("CellFound").Offset(-10, -4).Value Then .Offset(-3, 0).Resize(10, 1).EntireRow.Copy Destination:=Sheets("Sheet19").Range("A" & Rows.Count).End(xlUp).Offset(2)
    Next i
    End With
    End Sub
    

    编辑:所以建议的修复纠正了错误,但是现在我遇到了我猜的逻辑中的错误。该脚本未将任何单元格返回到sheet18或sheet19。 我知道应该返回单元格,因为如果手动查找这些单元格是可以找到的。没有错误消息,脚本似乎正常运行。我已经删除了以前有问题的脚本下的代码,似乎无法找到逻辑中的错误。也许它与这一行(?)有关:

     Set CellFound = .Find(Sh.Range("M:M").Value <= 25)
    

1 个答案:

答案 0 :(得分:0)

您很可能使用Range("DateRng") - 一个命名范围 - 而不是DateRng,这实际上是您在上面的线上定义的范围,错误。

我建议尝试以下方法:

With DateRng
    '...
End With

编辑:

该行后面的代码告诉我这绝对是你犯的错误。定义范围对象时,必须按原样使用它。您不能通过将带有变量名称的字符串传递给Range()的调用来调用它(有关其他错误,请参阅"CellFound")。