Interaktion mit dem Betriebssystem

AppActivate

siehe auch
AppActivate(Title As Variant, [Wait As Variant = False])

Setzt den Focus auf eine laufende Anwendung. Title kann eine Zeichenfolge sein, die mit dem Titel einer Anwendung aus der Taskleiste übereinstimmt. Bei mehreren Übereinstimmungen wird zufällig irgendeine Anwendung gewählt. Bei den meisten Officeapplikationen kann der Titel mit Application.Caption eingestellt werden. Title kann aber auch die Task-ID sein, die von der Shell-Funktion zurückgegeben wird.

Wird Wait auf True gesetzt, wartet VBA, bis der Befehl verarbeitet wurde.

DoEvents

DoEvents As Integer

Übergibt die Steuerung an das Betriebssystem, damit es andere Ereignisse verarbeiten kann. Dabei kann es sich um Ereignisse handeln, die von zuvor ausgelösten Befehlen wie CreateObject abhängen.

Das Programm erhält erst dann die Steuerung wieder zurück, wenn das Betriebssystem alle wartenden Ereignisse verarbeitet hat. In VBA gibt DoEvents immer „0“ zurück.

Environ

Environ(Expression As Variant) As String

Gibt eine Umgebungsvariable des Betriebssystems zurück.

Expression kann der Name einer existierenden Umgebungsvariablen sein.

Debug.Print Environ("Path")
C:\Windows\system32;C:\Windows

Alternativ kann Expression auch die Nummer der Umgebungsvariablen sein, gemäß der Reihenfolge, in der sie das System verwaltet. Dann gibt Environ nicht nur den Inhalt der Umgebungsvariablen zurück, sondern den Namen der Umgebungsvariablen, gefolgt von einem Gleichheitszeichen und dann den Inhalt. Das folgende Beispiel gibt alle Umgebungsvariablen des Systems zurück.

Sub Umgebung()
Dim i As Integer, env As String

Do
    i = i + 1
    env = Environ(i)
    Debug.Print i, env
Loop Until env = ""

End Sub

SendKeys

siehe auch
SendKeys(String As String, [Wait As Variant])

Simuliert Tastenanschläge, die an das aktive Fenster gesendet werden. Mit SendKeys lässt sich jede Aktion durchführen, die man auch über die Tastatur durchführen könnte, und zwar auf genau die gleiche Art und Weise. Das macht SendKeys zwar zu einer mächtigen, aber zugleich auch schwer zu kontrollierenden Anweisung: Manchmal lässt sich nicht unbedingt vorhersagen, ob ein bestimmtes Fenster immer genau so wie erwartet reagiert, oder ob es überhaupt wirklich gerade aktiv ist. Daher gilt SendKeys als äußerst verpönt. Man sollte sehr gute Gründe haben, wenn man es doch einmal einsetzen sollte.

Die in String angegebenen Zeichen wie angegeben gesendet. Für Tasten, für die es keine direkte Zeichenentsprechung gibt, gibt es spezielle Codes, weswegen die Zeichen +^%~(){} in geschweifte Klammern geschrieben werden müssen.

Wird Wait auf True gesetzt, wartet VBA, bis der Befehl verarbeitet wurde.

Im folgenden Beispiel wird der Windows-Rechner gestartet und gewartet, bis er aktiviert werden kann. Im Direktfenster wird zur Information ausgegeben, wie oft das versucht werden musste. Anschließend werden die Zahlen von 1-10 addiert. Löscht man in diesem Beispiel die Zeile
AppActivate TaskID ' Rechner aktivieren,
wird wahrscheinlich ein nicht genau bestimmbarer Teil der Tastenanschläge ins Direktfenster geschrieben (das aufgrund des Debug.Print-Befehls aktiviert wurde), noch bevor der Rechner den Fokus bekommen kann.

Sub EinsBisZehn()
Dim TaskID As Double, i As Integer, anzFehler As Double

On Error GoTo NichtAktiv

TaskID = Shell("CALC.EXE") 'Rechner starten
AppActivate TaskID         'Rechner aktivieren

Debug.Print anzFehler      'Wie oft ging AppActivate schief?

For i = 1 To 10
    SendKeys i & "{+}"
Next i
SendKeys "="

AppActivate TaskID, True   'Rechner in den Vordergrund holen

Exit Sub

NichtAktiv:
anzFehler = anzFehler + 1
Resume

End Sub

Shell

siehe auch
Shell(PathName As Variant, [WindowStyle As VbAppWinStyle = vbMinimizedFocus]) As Double

Startet ein ausführbares Programm (EXE, COM, BAT) und gibt die Task-ID zurück, über die das Programmfenster anschließend eindeutig identifizierbar ist.

PathName ist der Name der Anwendung. Die Dateierweiterung ist nicht notwendig. Sofern der Name in der Path-Umgebungsvariable enthalten ist, muss auch keine Pfadangabe enthalten sein. PathName kann auch Befehlszeilenargumente enthalten.

In welcher Fenstergröße das neue Programmfenster geöffnet wird und ob es den Fokus erhält, kann über VbAppWinStyle gesteuert werden.

Debug.Print Shell("F:\Programme\MeinBrowser http://www.vba-tutorial.de/")
 6000
Debug.Print Shell("calc.exe")
 1764