Die Windows-API ist eine umfangreiche Sammlung an Funktionen für die Ausführung systemnaher Aufgaben. Viele dieser Windows-API kann man nicht nur in Visaul Basic - Programmen verwenden, sondern auch im Visaul Basic für Applicationen (VBA) der Office-Anwendungen.
Ziele des Einsatzes von API - Funktionen
Überschreiten von VBA-Grenzen
Erweiterung der Funktionalität eigener Anwendungen
Einbindung und Ausführung fremder Anwendungen
Optimierung eigener Anwendung
Eingriffe ins Betriebssystem und die Registry
…
Beschreibung von API - Funktionen
Es gibt eine Vielzahl von Windows-API-Funktionen. Da es im Internet zumeist nur Visual Basic Beispiele gibt, ist es schwierig, sofort passende codes zu finden. Die Beschreibungen sind zumeist in Englisch. Es gibt Unterschiede im Umfang der Befehle, Methoden und Eigenschaften zwischen Visual Basic und Visual Basic für Applikationen, wodurch z.B. für eine API notwendige Argumente nicht oder nur mit weiteren Umwegen bereitgestellt werden können. Eine Umsetzung in Visual Basic für Applikationen ist dadurch nur selten einfach möglich.
Eine Liste aller Funktionen, ihrer Deklarierungen und Verwendung sowie weitere Informationen sind unter den folgenden URL auf den Microsoft-Webseiten zu finden, allerdings nur in Englisch.
... und einige MS Webcasts finden sich hier:64-Bit-Problematik
Durch die Verbreitung der 64 – Bit – Betriebssysteme und Office-Versionen wird zusätzlich bei vielen API eine Differenzierung zwischen einer 32 bit und einer 64 bit Programmierung notwendig. Informationen dazu findet man z.B. auf diesen Misrosoft-Seiten:
Compatibility Between the 32-bit and 64-bit Versions of Office 2010
Office 2010 Help Files: Win32API_PtrSafe with 64-bit Support
Deklarierung von API - Funktionen
API-Funktionen sind in DLL-Dateien ("Dynamic Link Libraries") gespeichert. DLL’s sind dynamische Bibliotheken mit Programmcode, Daten und Ressourcen, die von einzelnen oder verschiedenen Anwendungen allein oder gemeinsam genutzt werden können. Bei gemeinsamer Nutzung wird eine DLL nur einmal in den Speicher geladen. DLL-Konflikte können auftreten, wenn von verschiedenen Anwendungen verschiedene Versionen einer DLL benötigt werden.
Um eine Programm-Funktion aus einer Bibliothek zu verwenden, muss sie zuerst deklariert werden. Zur Deklaration einer Funktion verwendet man folgende Syntax:
Declare Function Funktionsname Lib ”Bibliothek” (Argumente)
Sobald eine Funktion deklariert ist, kann sie im Programm verwendet werden, als wäre es eine integrierte Funktion von Visual Basic bzw. Visual Basic für Applicationen.
Hier nun zwei Beispiele, die die Verwendung der API demonstrieren. Im ersten Beispiel wird mittels API ein flexibler Ton erzeugt. Unter VBA ist nur der Zugriff auf einen Systemton möglich.
Im zweiten Beispiel wird mittels API eine Wartezeit der Codeausführung programmiert. Bei genauerer Analyse kann man unter Umständen feststellen, dass es unter VBA zu ungenauen Zeiten kommt. Zudem ist die Systemauslastung höher als bei Nutzung der API-Funktion Sleep.
Modul Beispiel1' Erzeugung eines Signaltons, ' Vergleich API und VBA Application ' Deklarierung der API-Funktion Private Declare Function Beep _ Lib "kernel32" _ (ByVal dwFreq As Long, _ ByVal dwDuration As Long) _ As Long ' Sub Beispiel1a() ' Argumente der API-Funktion Beep ' Frequenz in Hertz, Dauer in Millisekunden Beep 440, 1000 End Sub ' Sub Beispiel1b() ' VBA-Funktion Beep ' Abspielen eines Systemtons Beep End Sub
' Auslösung einer Wartezeit, ' Vergleich API und VBA Application ' Deklarierung der API-Funktion Private Declare Sub Sleep _ Lib "kernel32" (ByVal dwMS As Long) ' ' Deklarierung der API-Funktion GetTickCount ' zusätzlich im Beispiel zur Prüfung der Dauer ! Private Declare Function GetTickCount _ Lib "kernel32" () As Long ' Sub Beispiel2a() ' Argumente der API-Funktion Sleep ' Dauer in Millisekunden 'Variablendeklaration 'Long Dim loStartTime As Long 'Startzeit aus System holen loStartTime = GetTickCount 'zwei Sekunden warten Sleep 2000 'Laufzeitmeldung MsgBox "Laufzeit Beispiel2a: " & _ GetTickCount - loStartTime & _ " Millisekunden" End Sub ' Sub Beispiel2b() ' VBA-Funktion Application.Wait 'Variablendeklaration 'Long Dim loStartTime As Long 'Startzeit aus System holen loStartTime = GetTickCount 'zwei Sekunden warten Application.Wait (Now() + TimeValue("00:00:02")) 'Laufzeitmeldung MsgBox "Laufzeit Beispiel22b: " & _ GetTickCount - loStartTime & _ " Millisekunden" End Sub
Weitere interessante Seiten zum Thema API
ActiveVB mit einem sehr guten API - Tutorial