Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
TutorialsAPI - Ein Mythos auf dem Prüfstand
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --
API - Jeder staunt und wundert sich
(Dies ist natürlich keine Abhandlung wie man mit API's umgeht, dafür gibt es 1000seitige Bücher,
sondern einfach eine Mythos-Bereinigung von API und ein wenig mehr Verständnis dafür zu vermitteln)
Wenn man von API hört, liest, hat man sofort ein dieses unsägliche Gefühl eine dunkle Magie würde hier am Werke sein,
die nur von Cracks beherrscht wird, die einen Pakt mit dem Teufel geschlossen haben und dafür ihren Arbeitsspeicher ihm verpfändeten.
Mit diesem Mythos will ich hier ein wenig aufräumen.
Tatsächlich sind diese Cracks genaus arme Würstchen wie wir, die einfach nur die Syntax und die Funktionsweise, respektive die Argumente von API Funktionen oder Prozeduren sich erarbeitet haben.
Zugegebenermaßen muss man ein wenig mehr Senf nehmen, wenn es an's Eingemachte geht.
Aber genau dieser Crack kann vor einer komplizierten Matrixberechnung genausodastehen, wie wir vor der API.
Im folgenden rede ich immer von Funktionen obwohl es auch Prozeduren (Sub) gibt.
Was ist überhaupt API.
API - Application Interface oder Anwendungs Schnittstelle.
Hier ist der erste Fehler im allgemeinen Umgang.
Denn wenn wir von API reden, meinen wir in der Regel die Windows API.
Windows ist die Anwendung(Application) also die Schnittstelle zu Windows.
Windows stellt über seine API Funktionen zur Verfügung - nichts anderes.
Um dies etwas besser zu verstehen, wollen wir mal eine Excel API schaffen.
Vorab:
Beispiele die folgen, alle auf eigene Gefahr und mit Sorgfalt zu behandeln.
Trotz aller Flappsigkeit ist dies Thema natürlich nicht für den VBA Einsteiger geeignet.
Sie sollten gute bis sehr gute Kenntnisse in VBA haben, um dies alles nachzuvollziehen.
Weiterhin werde ich Codebeispiele bringen, deren Funktionsweise ich nicht näher erkläre, da diese nur demonstrieren sollen.
Aber in anderen Tutorials werden die Segmente noch erklärt werden, sofern diese es noch nicht sind.
WorksheetFunction.Average eine API ???
Im eigentlichen Sinne natürlich nicht aber es ist eine Funktion die Excel zur Verfügung stellt, um aus Argumenten den Mittelwert zu berechnen.
Excel ist also die Anwendung (Application) und gibt eine Schnittstelle zur Worksheetfunction.
Sie glauben mir nicht ?
(Ich glaube mir ja fast selbst nicht)
Für das nachfolgende Beispiel öffnen Sie Word mit einer leeren Arbeitsmappe.
Wechseln Sie dort in die VBA Umgebung und erstellen Sie ein allgemeines Modul.
Dies funktioniert wie in Excel - aber das wissen Sie sicherlich.
Kopieren Sie dann nachfolgenden Code genau so in das Modul und führen Sie dann die
Sub ZeigsMir() - Keine anderen des Beispielcodes
aus
' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************
Option Explicit
' #################################################
'
' Nur die Sub ZeigsMir ausführen, nicht die anderen
'
'##################################################
Dim oExcelApp As Object
Public Sub ZeigsMir()
'***** Nur Diese Sub ausführen ***** nicht die anderen
If Not Excel_Connect Then Exit Sub
On Error Resume Next
MsgBox oExcelApp.worksheetfunction.average(2, 4, 6, 8)
Excel_Disconnect
End Sub
Private Function Excel_Connect() As Boolean
Excel_Connect = True
On Error GoTo CreateError
Set oExcelApp = CreateObject(Class:="Excel.Application")
Exit Function
CreateError:
'Excel ist nicht vorhanden
MsgBox "Kein Excel vorhanden"
Excel_Connect = False
End Function
Private Sub Excel_Disconnect()
On Error Resume Next
oExcelApp.Close
Set oExcelApp = Nothing
End Sub
Code eingefügt mit: Word Code Jeanie
Wenn nun alles gut geht, sollten Sie eine MsgBox sehen mit dem Wert 5, also dem Mittelwert.
Bitte experimenieren Sie nur weiter mit dem Code, wenn Sie diesen wirklich verstehen, da Sie sonst im Hintergrund auf einmal mehrere Wordinstanzen öffnen könnten, ohne dass Sie dies sehen.
Aber was ist nun wirklich passiert?
Wir haben eine Verbindung zu Excel hergestellt - zur Anwendung Excel - zur Application Excel und haben dann über die Schnittstelle von Excel die von Excel zur Verfügung gestellte Funktion Average benutzt.
Wo sind die grundlegenen Probleme:
1. Sicherlich, die Kommunikation zu Excel herzustellen.
Die Art und Weise, wie ich das mache, muss ich einfach kennen.
(Tatsächlich war dies nun wirklich nur ein Beispiel, dass es funktioniert und sollte nicht als Standard für solche Angelegenheiten angesehen werden, eine Instanz von Excel zu öffnen ist nicht gerade die feine Art aber mir war gerade so ;-) )
2. Die Funktion und was diese macht und welche Argumente ich ihr übergeben muss.
Dies ist für uns Excelianer nun gar kein Problem. Wir wissen dass die Funktion den Mittelwert berechnet und als Argumente Zahlen erwartet.
Was soll uns das ganze nun sagen?
Nun, dass die Windows API vereinfacht dargestellt, genau nichts anderes ist.
Als Anwendung habe ich Windows und nicht Excel und die Funktionen sind ein bisserl anders.
Letztendlich reduziert in unser:
1. Wie stelle ich eine Verbindung her
2. Was macht die Funktion und welche Argumente muss ich ihr übergeben.
Ich will natürlich hier nicht verschweigen, dass die Windows API nicht zu verachtende Risiken mit sich bringt, da ich mit ihr zum Teil tief ins System eindringen kann aber Windows ist nunmal das Betriebssystem und wenn ich Funktionen benutze, die dort eingreifen, kann ich mir bös die Finger verbrennen.
Auch hier eine Vergleich zu Excel: Wenn ich VBA Code schreibe, der Excel verändert, Einstellungen verändert, muss ich damit rechnen, dass ich Excel verunstalte, ruiniere, kaputtmache etc...
Aber ich werde mich hüten, so etwas in Excel zu machen. Genauso ist es mit der Windows API.
Kommen wir zu einem einfachen Beispiel, diesmal natürlich wieder in Excel.
' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Sub GibVergangeneZeit()
Dim iStart As Long, i As Long, b As Boolean
iStart = GetTickCount
For i = 1 To 10000000
b = Not b
Next i
MsgBox "Die Schleife brauchte " & GetTickCount - iStart & " Millisekunden"
End Sub
Hier benutzen wir eine der einfachsten Windows API Funktionen die es gibt.
GetTickCount gibt mir die Millisekunden seit Systemstart zurück.
Und für unse Erstens Zweitens Geschichte:
1. Private Declare Function GetTickCount Lib "kernel32" () As Long
Gibt mir die Schnittstelle zu der Funktion. Was ich dort schreibe muss ich kennen.
2. Die Funktion liefert, wie gesagt, die Millisekunden seit Systemstart zurück
Argumente an die Funktion: Keine
Letztendlich ist es so einfach.
Aber letztendlich ist es auch so schwer, dies will ich nicht verschweigen.
Es gibt viele Windows API's, die ich aus Excel heraus nicht so einfach nutzen kann, da diese Argumente benötigen, welche mir Excel nicht zur Verfügung stellt (oder nicht so einfach zur Verfügung stellt).
Wenn wir dies nun zusammenfassen:
Windows API ist nichts anderes als Funktionen,Prozeduren, die mir die Anwendung Windows zur Verfügung stellt.
Weitergehend muss ich diese noch nicht mal verstehen, um diese einzusetzen, wenn ich einen funktionierenden Code zur Verfügung gestellt bekomme (Im Net gibt es tausende von Beispielcodes).
(Bsp.: Die Osterformel muss man nicht verstehen, um diese einzusetzen)
Windows API ist keine Magie, sondern auch nur eine Frage von Wissen.
Und nun der saure Drops
Wer nun glaubt, dass er so einfach Windows API selbstständig nutzen kann, der irrt gewaltig.
Es gibt sicherlich einige Funktionen, die sich mir einfach erschließen aber die meisten benötigen doch einiges Hintergrundwissen.
Es gibt über die WindowsApi viel Literatur, der Guru - und in seinem Fall kann man ihn wirklich so bezeichnen - ist sicherlich Dan Appleman.
Sein Buch Guide to the Win32 API ist die Bibel der Windows API.
Und der süße Drops
Ich muss keine Angst haben, ausgetestete API Funktionalitäten in meine Anwendung einzubauen.
Und ich muss sicherlich keine Angst vor API haben.
Wie überall benötigt es nur Arbeit, um ein tieferes Verständnis zu entwickeln.
Denken Sie einfach an die Zeit zurück, als VBA für Sie noch ein Buch mit 7 Siegeln war.
Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben