2016-07-10 69 views
5

我有一个简短的宏,使用下面的命令放置一个细胞在编辑模式:哪个窗口是活动

Application.SendKeys "{F2}" 

的代码行正常运行如果宏从工作表中使用,比如运行正常Ribbon界面(那是因为F2把活动单元格进入编辑模式)

如果我运行从VBE窗口中的宏,因为VBE解释宏失败s F2是一个调出对象浏览器的命令。

我想包括在宏观测试,以检查此:

如果工作表是活动窗口,继续运行。
如果VBE是活动窗口,则发出警告MsgBox并中止。

我不知道如何确定哪个窗口处于活动状态。 ActiveWindow.Caption始终显示是这样的:

Book1.xlsm 
+1

看看这有助于:http://stackoverflow.com/questions/33266859/vba-copypastecode-with -sendkeys/33269447#33269447 –

+1

如果工作表处于活动状态,单元格中的值是否会更改?你可以检查改变吗?而不是使用SendKeys,你可以使用InputBox吗? –

+1

@ScottCraner这个想法很好,但它仍然让* VBE *窗口成为焦点................ Rodger的方法有效! –

回答

6

我想你遇到了一个VBE问题很遗憾。如果解决方案是为了避免编码时出错,这是否适合您?似乎没有办法查看activewindow是否是我能找到的VBE。如果此解决方案不能满足您的需求,Using VBS in WHS可能适用于您或调用外部程序,如autoit。

请注意,如果您单步执行代码,它将无法正常工作,但我认为您确实主要关心的是从VBE窗口中点击运行按钮,并且它可以用于此目的。将第一行放在代码的顶部,或者放在带有sendkeys或whatnot的部分之前。

ThisWorkbook.VBProject.VBE.MainWindow.Visible = False 
If ActiveWindow.Caption <> "Book1.xlsm" Then MsgBox ("Test") Else MsgBox ("testelse") 

您将无法使用Alt-Tab回来,必须按Alt-F11

+0

非常感谢您................我会在今天晚些时候进行测试................... –

+1

This works to完美!我不需要执行任何测试,只需关闭* VBE *窗口.......................再次感谢! –