【发布时间】:2023-02-21 01:52:16
【问题描述】:
Windows 10 专业版
版本 21H2
操作系统版本 19044.1586
Excel 2007,VBA:零售 6.5.1057 - Forms3:12.0.6723.500
关注点:
Sheets("SUMMARY").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) = _
Application.WorksheetFunction.Average(irng)
当上面的代码在下面的模块中“手动”(F5) 使用时,它可以工作。但是,当“计时器”触发/启动时,程序会在该行中断/停止。
我已将代码分散到多个过程中以进行故障排除;没有帮助我的事业。
Option Explicit
Public RunWhen As Double
Public Const cRunWhat = "kcal" ' the name of the procedure to run
Sub StartTimer()
RunWhen = TimeSerial(23, 45, 0)
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
Schedule:=True
End Sub
Private Sub kcal()
Sheets("SUMMARY").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Date
Sheets("SUMMARY").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = Sheets("TODAY_(24hr)").Range("E40").Value
kcal2
End Sub
Sub kcal2()
Dim i As String
Dim irng As Range
i = Sheets("SUMMARY").Cells(Rows.Count, 2).End(xlUp).Address
Set irng = Range("B2:" & i)
Sheets("SUMMARY").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) = Application.WorksheetFunction.Average(irng)
ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\Back_Up\Bak-Up_" & Format(Now, "yyyymmdd") & "_m" & ActiveWorkbook.Name
StartTimer
End Sub
【问题讨论】:
-
Set irng = Range("B2:" & i)是一个不合格的范围,因此它假定为ActiveSheet- 并且可能应该是Set irng = Range("B2:B" & i)。 -
我能理解的最好的意思是 = 它坏了。我不明白的是,为什么,如果它是不合格的——以及——代码在手动运行 (F5) 时有效的事实,我会得到两个不同的结果吗? IE。我认为如果“i”不合格,无论计时器运行它还是从 F5 运行,它都会保持这种状态。请赐教。
-
@ braX,我最初误读了你的 ...Set irng = Range("B2:B" & i)... 使用该代码,我想到了两件事:当原始代码失败并且我选择“调试”时,然后将鼠标悬停在将鼠标悬停在“i”上,它会正确计算出 $col$num(地址);但不会计算平均值。如果我听从您的建议,结果“var”似乎是 B2:BB118。我说/假设是因为在调试中并将鼠标悬停在“i”上 <-- 它填充了 $B$118.. 此外,该代码使用 F5 工作。请进一步解释。
标签: excel vba excel-2007