【发布时间】:2014-07-05 11:28:16
【问题描述】:
我正在尝试编写一个脚本,它将按以下顺序执行以下操作:
- 找到位于包含特定字符串 (DateRng) 的 2 个单元格之间的范围
- 在此范围内搜索具有值 的单元格 (i)
- 比较另外两个偏移到“i”的单元格
- 将以“i”为中心的一系列行导出到不同的工作表,等待结果 上述条件。
我可以让第 2 步和第 4 步工作(如果第 2 步搜索整个工作表而不是 DateRng. 我也可以让第 1 步开始工作
但是,当我尝试将它们放在一起时,我收到一条错误消息:对象'_Global' 的方法'范围'失败。
这对我来说毫无意义,因为正在找到 DateRng。 如果有人可以就此提出建议,那就太好了。我刚刚开始学习 VBA,所以我也对脚本其余部分的建议/更正持开放态度。
在下面我粘贴了有问题的脚本,其中调试器在 marked
处停止的行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)
【问题讨论】:
-
您的意思是使用命名范围 (
"DateRng") 还是使用变量DateRng?那里有很大的不同。