与之前的线程*类似,当我在Excel 2016中进入VBA子,然后进入语句时:
Workbooks.Open文件名:=“C:\ file2”
文件打开没问题但是在返回时,sub的剩余部分只执行到最后(我失去了进入模式)。
我在64位计算机上运行Windows 10,在32位版本的Office Professional Plus 2016上运行
*以下链接描述了同样的问题: Excel 2013 VBA Workbooks.Open Loses Debug Step Mode? 但是“理想的”解决方案是在workbooks.open行之后添加断点。这在Excel 2016中不起作用 - 例程停止但在第一次按F8时例程完成结束。
这里描述了同样的问题:
http://blog.contextures.com/archives/2014/09/04/excel-vba-problem-with-step-into-f8/ 但解决方案(需要更改注册表)适用于早期版本的Excel,不适用于Windows 10 / Office 2016.
这是阻止有效调试的令人沮丧的问题。 Microsoft Pro支持已将我引导至Excel论坛。所以我们在这里...... :)
任何热烈欢迎的想法都欢迎。
答案 0 :(得分:2)
我遇到了这个问题。 VBA“宏”子程序仅在Excel中可以正常工作,但是如果从Access中调用,该例程将跳过Excel VBA的重要部分,并且整个过程将失败。 我在Excel中创建了一个新的代码模块,将完全相同的vba代码粘贴到了该模块中,但是给Sub赋予了新的名称。
然后我从Access调用了该例程,但使用了新的Excel VBA子名称,它运行良好。我认为旧模块以某种方式损坏了。
答案 1 :(得分:0)
我遇到了你所描述的问题,对我来说,以下工作:
1)而不是ActiveSheet
使用变量,例如:
ActiveSheet
这允许您在打开文件的行之前和之后放置断点,这样您就可以再次单步执行代码。有一些关于做文件输入/输出行的事情会导致Excel宏只运行代码而不是踩到那些行。此外,分配变量是一种很好的做法,因为它允许您解决代码中的问题。但请注意,在打开几个工作簿时,您需要跟踪哪个是哪个 - 因此将变量分配给{{1}}(代码所在的那个)也是个好主意。最后,如果您使用上面显示的{{1}}并且您正在调试中,那么无论哪个工作表处于活动状态都将是{{1}} - 这可能会造成混淆。如果您有疑问,请告诉我。