debugging 使用F8单步执行代码,使用F5在标准执行中停止

w7t8yxp5  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(170)

我已经编写了一个宏,它根据我们的预测模型按年份和月份对数字进行求和。
当使用F8逐步执行时,它会从头到尾执行。
在标准执行中,使用F5键立即停止。
第一个麻烦是
运行时错误91

issmIndex = Range("A1:Z1").Find("ck.IssMon").Column  'issmIndex an integer

最初我尝试了Application.WorksheetFunction.Match(...),但遇到了同样的问题:在调试模式下运行,但不在执行模式下运行(改为Error 1004)。
我认为这可能是Excel版本的问题(Match函数在意大利版本中有不同的名称)。我换了一个更中性的Find,但仍然没有运气。

o75abkj4

o75abkj41#

当您遇到由多个命令组合而成的行错误时,请尝试将其分解为各个步骤。
例如,以下方法有效:

Sub findDemo()
  Const toFind = "blah"
  Dim rg As Range, f As Range
  Set rg = Range("A2:C5")
  Set f = rg.Find(toFind)
  If f Is Nothing Then
    Stop 'not found
  Else
    Debug.Print "found in column #" & f.Column
  End If
End Sub

另请参阅Range.Find()文档中的示例。

3qpi33ja

3qpi33ja2#

欢迎 来到 SO 。 有时 Excel * 读取 * 代码 * 比 执行 * 快 , 所以 当 读取 一 个 命令 时 , 前面 的 命令 还 没有 完成 。 这 很 奇怪 , 但 如果 你 的 代码 做 了 很多 事情 和 演算 , 这种 情况 经常 发生 。
此外 , 在 调试 时 , 每个 命令 行 都 是 在 读取 下 一 个 命令 行 之前 执行 的 , 因此 您 无法 仅 通过 调试 来 检测 到 这 一 点 。
因此 , 如果 代码 在 调试 时 运行 良好 , 但 正常 执行 时 出现 错误 , 请 尝试 在 出现 问题 的 代码 行 前面 添加 命令 DoEvents

' your previous code
'
'
'
Doevents
issmIndex = Range("A1:Z1").Find("ck.IssMon").Column 'issmIndex an integer
'
'rest of your code

中 的 每 一 个
这个 命令 * 强制 * Excel 在 读取 之前 确保 所有 内容 都 已 执行 。 它 有点 像 检查 点 , 类似 于 * 确保 在 转到 下 一 行 之前 已 执行 所有 内容 * 。
DoEvents function 的 最 大 值

相关问题