我正在尝试编写一个脚本,它将按以下顺序执行以下操作:
我可以得到第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)
答案 0 :(得分:0)
您很可能使用Range("DateRng")
- 一个命名范围 - 而不是DateRng
,这实际上是您在上面的线上定义的范围,错误。
我建议尝试以下方法:
With DateRng
'...
End With
编辑:
该行后面的代码告诉我这绝对是你犯的错误。定义范围对象时,必须按原样使用它。您不能通过将带有变量名称的字符串传递给Range()
的调用来调用它(有关其他错误,请参阅"CellFound"
)。