如何切换到工作表?

时间:2016-12-06 05:44:07

标签: excel vba excel-vba excel-2010

我已经在MSDN中asked了这个问题

如何在运行时从Visual Basic编辑器切换到工作表

如果程序正在运行,我可以单击View Microsoft Excel按钮(Alt + F11)。有没有VBA声明做同样的事情?

谢谢, 沙恩。

Excel 2010 SP2(14.0.7173.5000)64位

2 个答案:

答案 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