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.
Beep
Gibt einen kurzen Ton aus, in Abhängigkeit zu den Soundeinstellungen des Computers.
DeleteSetting AppName As String, [Section As String, [Key As String]])
Löscht unterhalb von HKEY_CURRENT_USER\Software\VB and VBA Program Settings
einen Eintrag aus der Registry . Ohne Key
wird auch die Schlüsseleinstellung,
ohne Section
auch der Abschnitt gelöscht.
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(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
GetAllSettings(AppName As String, Section As String) As Variant
Gibt eine Liste von Schlüsseleinstellungen aus der Registry in Form eines
zweidimensionales Arrays zurück. Für jeden Key
in Section
wird Key
und Setting
zurückgegeben. Es kann nur auf
Einstellungen unter HKEY_CURRENT_USER\Software\VB and VBA Program Settings
zugegriffen werden.
Sub Registriere() Dim Registry 'Variant für Datenfeld Dim intSettings As Integer 'Einträge in der Registrierung vornehmen SaveSetting "Anhalter", "Problem", "Frage", "Sinn des Lebens" SaveSetting "Anhalter", "Problem", "Antwort", 42 'Einträge abrufen Registry = GetAllSettings("Anhalter", "Problem") 'Einträge ausgeben For intSettings = LBound(Registry, 1) To UBound(Registry, 1) Debug.Print Registry(intSettings, 0), Registry(intSettings, 1) Next 'Einträge wieder löschen DeleteSetting "Anhalter" End Sub
GetSetting(AppName As String, Section As String, Key As String, [Default] As String) As String
Gibt aus der Registry unter HKEY_CURRENT_USER\Software\VB and VBA Program Settings
den Wert einer Schlüsseleinstellung zurück. Mit Default
kann ein
Rückgabewert definiert werden für den Fall, dass kein Schlüssel festgesetzt ist.
SaveSetting AppName As String, Section As String, Key As String, Setting As String
Erstellt in der Registry einen neuen Eintrag oder überschreibt ihn, falls er
schon besteht. Der Eintrag erfolgt stets unterhalb von
HKEY_CURRENT_USER\Software\VB and VBA Program Settings
.
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(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 Shell "AcroRd32 /A page=5 C:\myvba.pdf", vbNormalNoFocus