我已经在MSDN中asked了这个问题
如何在运行时从Visual Basic编辑器切换到工作表?
如果程序不正在运行,我可以单击View Microsoft Excel按钮(Alt + F11)。有没有VBA声明做同样的事情?
谢谢, 沙恩。
Excel 2010 SP2(14.0.7173.5000)64位
答案 0 :(得分:3)
显示VBE:
Sub ShowVBE()
With Application.VBE.MainWindow
.Visible = True
.SetFocus
End With
End Sub
要激活工作簿窗口,请执行以下操作:
Sub ShowThisWorkbook()
With ThisWorkbook
.Activate
.Windows(1).Activate
.Windows(1).WindowState = xlMaximized
.Worksheets("Sheet2").Activate ' <-- Change to your desired Worksheet name here
End With
End Sub
答案 1 :(得分:0)
首先,我会通过重复你从MSDN获得的东西来惹恼你;)。然后,我将描述我将窗户带到前面的方法。
我也不认为有必要按照你的要求去做。您想调试代码但是为了进行调试,我发现在执行代码时必须(大多数时候)查看代码。将窗口并排放置并使用F8逐步执行代码似乎是一个更好的选择。
对于少数情况,我可以想到从Excel窗口(Alt + F8)启动宏就足够了。
现在回答实际问题: 我不知道其他版本,但对我来说,只是激活一个窗口并没有把它带到前面(Office 2016,Windows 10)。我找到了以下工作:
使用appactivate(可能是最好的方法,虽然我不喜欢用他们的名字指定窗口)
AppActivate Application.Caption
发送密钥Alt
+ F11
:
Application.SendKeys "%{F11}"
但是你应该检查excel窗口是否已经在前面(或者你可能会带回VBE)。我发现的唯一方法是使用系统API:
'on top of your module
Declare Function GetForegroundWindow Lib "user32" () As Long
'in your sub
If GetForegroundWindow = Application.VBE.mainwindow.hwnd Then Application.SendKeys "%{F11}"
使用系统API
'on top of your module
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
'in your sub
SetForegroundWindow ThisWorkbook.Windows(1).hwnd
再次将可见性设置为false和true也会将它带到我面前
ThisWorkbook.Windows(1).Visible = False
ThisWorkbook.Windows(1).Visible = True