2016-12-06 5 views
2

Ich habe bereits asked diese Frage in MSDNWie kann ich zu einem Arbeitsblatt wechseln?

Wie kann ich aus dem Visual Basic-Editor zu einem Arbeitsblatt wechseln während der Laufzeit?

Wenn die Prozedur nicht ausgeführt wurde, konnte ich auf die Schaltfläche Microsoft Excel anzeigen (Alt + F11) klicken. Gibt es eine VBA-Anweisung, die dasselbe tut?

Danke, Shane.

Excel 2010 SP2 (14.0.7173.5000) 64-Bit-

+0

Ich sehe, was Sie sagen, nicht sicher, dass dies möglich ist. Ich habe ursprünglich die 'Activate' Methode vorgeschlagen, aber dadurch wird das Excel Fenster nicht angezeigt.Können Sie die Methode von einem Schaltflächenformular aus ausführen, das dasselbe tut (und zwischen Arbeitsblättern wechselt, wenn Sie die Methode 'Activate' verwenden) – AER

Antwort

0

Zuerst habe ich ärgere dich, indem du wiederholst, was du von MSDN bekommen hast;). Dann beschreibe ich, welche Wege ich gefunden habe, um Fenster nach vorne zu bringen.

Ich sehe auch nicht die Notwendigkeit zu tun, was Sie fragen. Sie möchten Ihren Code debuggen, aber zum Debuggen finde ich es (meistens) wichtig, den Code während der Ausführung zu sehen. Die Fenster nebeneinander zu platzieren und F8 zu verwenden, um durch den Code zu gehen, scheint eine bessere Option zu sein.

Für die wenigen Szenarien, die ich mir vorstellen kann, wäre es genug, um das Makro aus dem Excel-Fenster zu starten (Alt + F8).


Jetzt für die tatsächliche Antwort: ich über andere Versionen weiß nicht, aber für mich nur ein Fenster zu aktivieren bringe es nicht an die Front (Office 2016, 10 Windows). Ich fand die folgende Arbeit:

  • AppActivate Mit Hilfe von (wahrscheinlich die beste Methode, obwohl Ich mag keine Fenster nach ihrem Namen Angabe)

    AppActivate Application.Caption 
    
  • Schlüssel senden Alt + F11:

    Application.SendKeys "%{F11}" 
    

    jedoch sollten Sie vielleicht überprüfen, ob die Excel-Fenster bereits vor sind (oder Sie könnten die VBE bringen). Der einzige Weg, fand ich wurde mit der System-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}" 
    
  • System-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 
    
  • Einstellen der Sichtbarkeit auf false und true wieder bringt es auch für mich an die Front

    ThisWorkbook.Windows(1).Visible = False 
    ThisWorkbook.Windows(1).Visible = True 
    
+0

Es tut mir wirklich leid, dass ich so lange gebraucht habe, um zu antworten. Ich habe alle Ihre Vorschläge versucht, und das einzige, was funktioniert, ist dies: Application.SendKeys „% {F11}“ Wie bereits erwähnt, wenn das Excel-Fenster bereits vor ist, wird es mich nehmen zu das VBE, aber ich würde es nur zum Debuggen verwenden. Also das wird tun, was ich brauche. Danke für die Hilfe. Shane. –

3

Um die VBE anzuzeigen:

Sub ShowVBE() 
    With Application.VBE.MainWindow 
     .Visible = True 
     .SetFocus 
    End With 
End Sub 

ein Arbeitsmappe Fenster zu aktivieren, so etwas wie:

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 
+0

Das Aktivieren der Arbeitsmappe oder Arbeitsmappe bringt es nicht für mich (Büro 2016) – arcadeprecinct

+0

@arcadeprecinct Siehe Bearbeiten meines Codes für 'ShowThisWorkbook()', sollte ich die Arbeitsblatt aktivieren Zeile enthalten. Außerdem hinzugefügt, um den WindowState als Maximized zu erzwingen. – PatricK

Verwandte Themen