【问题标题】:Stepping Through (F8) Code suddenly executes all code?Stepping Through (F8) 代码突然执行所有代码?
【发布时间】:2012-07-20 07:27:00
【问题描述】:

我(在另一台机器上)编写的宏突然在我的电脑上表现得很奇怪。我在Excel 2010 环境中编写了代码,并尝试在相同的环境中单步执行。

每次我这样做,几行之后,其余的代码就会立即执行。如果我设置断点,它将停止。有时,我可以在它再次自动执行之前单步执行几行。

什么给了?我在网上没有找到答案……因此我在 Stackoverflow 上发表了第一篇文章。

感谢您的任何提示!这让我的生活变得困难。

更新: 我现在已经回到原来的编程环境,单步执行代码没有问题。所以它一定是我的Excel设置中的东西!我不知道它可能是什么。

【问题讨论】:

  • 奇怪 - 您是否尝试在遇到问题的机器上调试代码之前对其进行编译? (不确定它会做什么,但值得一试)
  • 嗨 Assylias,尝试了你的建议并学会了如何编译 VBA 代码(至少在 Excel 中),但不行......仍然是同样的问题。
  • 您应该将您的最终更新排除在问题之外,将其作为答案发布并接受它。
  • 嗨,吉米,好的……可以。谢谢。我是新来的,不知道这里的礼仪!顺便说一句……我喜欢你的博客!我自己也是一名优秀的博主。

标签: vba excel


【解决方案1】:

我发现这个solution 也引用了here。解决方案是对注册表进行更改(取自源):

注册表更改会影响 RPC 调试,您可以在 Microsoft 网站上阅读更多信息:Debugging COM Clients and Servers Using RPC Debugging

1.关闭Excel

2.备份注册表文件,然后打开注册表——微软网站上有说明

3.转到适用的注册表项:

  • 对于 64 位窗口上的 32 位 Office,请转到注册表项: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VBA
  • 对于 32 位 Window 上的 32 位 Office,请转到注册表项: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VBA
  • 对于 64 位 Windows 上的 64 位 Office,请转到注册表项: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VBA

4.在右侧窗口中右击,点击新建

5.单击 DWORD(在下面的屏幕截图中,DWORD 是指在 64 位计算机上运行的 32 位 Office)

6.将 DWORD 命名为 DisableOrpcDebugging7

7.右键单击 DWORD,然后单击修改

8.将值更改为1,然后单击确定。

9.完成的DWORD会出现在注册表中

10.关闭注册表,然后重新打开 Excel,F8 键现在应该可以正常工作,单步执行代码。

【讨论】:

  • 虽然在我的情况下删除已安装的应用程序解决了当时的问题,但我后来在 Excel 2010 的其他情况下也遇到了这个问题。我认为 Debra 和你的回答可能是正确的。下次有机会我会实施。感谢您的更新!
【解决方案2】:

由于您一开始提到 F8 按钮按预期工作,所以我的大部分想法都从桌子上清除了。
我无法解释这一点,但也许我可以提供一个临时的“解决方法”,这是我能做的最好的。
您可以通过单击每一行然后应用 CTRL+F8(运行到光标)来模拟 F8。 光标将充当断点,它比在每一行放置/删除断点更麻烦。
它需要更多的手工操作,但速度一样快(至少在普通桌面上)。 希望它至少可以减少您在调试时的一些挫败感!

【讨论】:

  • 嗨,Kim,感谢您的建议。我现在正在使用它,你是对的,它至少没有那么大的痛苦。
  • 是的,你好像中了倒霉的彩票号码:-)
【解决方案3】:

最终更新: 事实证明,我在后台运行的另一个应用程序,称为 KeyRocket,旨在帮助您记住办公应用程序中的键盘快捷键,是造成这种奇怪行为的原因。我希望这对其他人有帮助!

最后感谢大家的建议!

【讨论】:

【解决方案4】:

我遇到了类似的问题,但关闭了 excel,发现有一个 EXCEL.EXE *32 进程仍在运行,将其杀死,然后重新打开并再次运行宏。无法重现,但宏已按预期进行。

【讨论】:

    【解决方案5】:

    我遇到了同样的问题,但是在 Word(不是 Excel)2010 中。

    我尝试了上面其他贡献者提到的各种事情,例如关闭其他可能使用 F8 键的程序,并关闭其他可能干扰的 MS Office 2010 应用程序,但是,问题顽固地存在:从我的 VBA 代码的某个点,逐步执行代码(F8 键)被忽略,整个过程立即执行。

    然后我用我的代码做了一些实验。因此我发现:就我而言,当我如下调用外部过程时,不想要的行为就出现了:

    Application.Run MacroName:="OneProcedureOfMine"
    

    为了规避这个问题,我像这样重写了代码:

    Call OneProcedureOfMine
    

    无论如何,这是更优雅的方式。它解决了这个问题。 以这种方式调用子程序后,F8 可以整齐地通过主程序,并在其中调用每个程序。

    【讨论】:

    • 嗨克里斯蒂安,有趣的评论。我仍然偶尔会处理这个问题,并且注意到它也会发生,例如在我调用 MsgBox 之后。单击“确定”后,代码会自动执行。您是否知道这是否也发生在 Word 中?如果发生,那么我认为这是 VBA 中的某种错误。
    • 目前,我对这种情况没有明确的观察(在MsgBox之后逐步执行[F8键])。但是你写的东西对我来说听起来有点熟悉......一旦我(再次)面临这种情况,我会调查它并发布结果。
    【解决方案6】:

    我通过做两件事成功地解决了这些问题: 1.如果您加载了多个键盘驱动程序,请删除您不使用的一个 2. 如果您的键盘有一个“F Lock”键(位于我的键盘上 F12 的右侧),请按它并重试。

    【讨论】:

      【解决方案7】:

      我知道这是一个非常古老的线程,但我刚刚找到它。我检查了任务管理器,发现我有一个“卡住”的访问进程正在运行。我摆脱了它,现在一切正常。

      【讨论】:

        【解决方案8】:

        我遇到了同样的问题。我创建了一个新模块并将我的代码粘贴到这个新模块中,它成功了!!希望对遇到同样问题的人有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-11
          • 1970-01-01
          • 2021-08-10
          • 2011-09-07
          • 1970-01-01
          相关资源
          最近更新 更多