我在excel 2013中有一个vba sub(“ sub ”),它将打开另一个工作簿,从中读取一些数据,返回该数据并关闭新打开的工作簿。可以通过键盘快捷键和上下文菜单中的条目来运行此子程序。
此调用(这是“ UTILS.sub”)工作得很好:
' Add the sub-call to a new context menu entry
Call UTILS.addContextMenuEntry("Caption", 2556, "UTILS.sub")
但是此调用不会:
' Add the sub-call to a new keyboard shortcut
App.OnKey "+^{M}", "UTILS.sub"
如果我使用键盘快捷键调用sub,它会中断而不会出现错误。我设法解决了特定的代码行,在此行通过调试中断了该行:
'[...]
Application.ScreenUpdating = False
' Open the external Workbook
Set wbHandle = Workbooks.Open("wb.xls", ReadOnly:=True)
MsgBox "Debug"
'[...]
wb.xls打开(并显示),但MsgBox“ Debug”没有打开。“ Open”行之后什么也不会运行,并且在此行之后也不会命中任何断点。另一个奇怪的事情是:如果我在该行之前调试了一个带有断点的sub调用,那么一切都将正常运行。
如何使子程序正确运行,而不考虑上下文菜单项或键盘快捷键是否调用了该子程序?
我已经找到了解决问题的答案:stackoverflow.com/questions/17409524/
显然,如果通过包含[SHIFT]键的键盘快捷方式调用了子程序,则excel无法处理“ Workbooks.Open()”方法。解决方案:改用“ Workbooks.Add()”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句