VBA mit API...

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.

Windows API Reference

Windows Development

... und einige MS Webcasts finden sich hier:

Windows Development

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 
 

Modul Beispiel2
' 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 ActiveVB API Tutorial

ABOUT Visual Basic

vb@rchiv

vb-fun.de

VBNet developer resource center

JKP Application Development Services