VBA in Excel

Hallo,
ich hätte ein paar Fragen. Ich habe bereits selbst im Internet recherchiert. Ich bin aber auf der Suche nach einer einfachen Erklärung bitte keine Fachsprache.

Objektmodell in VBA was ist das?
Begriffe die zu erklären sind: Übergabeparameter/ Parameterübergabe; Funktionen; Programme; Ereignisse; Methoden
Alternativen zu VBA in Excel?
VBA in anderen (MS-)Office Produkten

Es wäre schön wenn ihr mir Helfen könntet.

Vielen Dank schon mal im Vorraus.

Grüße

hallo

zunächst mal ein kleine klärung: VBA bedeutet Visual Basic for Applications und ist eine an das gute alte basic angelehnte sprache, die leicht zu erlernen sein soll und sich gut in andere anwendungen integrieren soll (daher das „for Applications“). im gegensatz zum „ausgewachsenen“ visual basic hat VBA natürlich ein paar einschränkungen - ist dafür aber auch gratis mit dabei.

vba hat selbst natürlich auch ein objektmodel - allerdings im extrem eingeschränktem umfang. die stärke von vba liegt darin, möglichst flexibel fremdbibliotheken einbinden zu können und diese für den endbenutzer möglichst einfach zu unterstützen. man hat im vba eher mit dem objektmodel der anwendung zu tun, in die das vba eingebettet ist. da du speziell nach excel fragst, wirst du in excel-makros daher v.a. mit dem excel-com-objektmodel zu tun haben (com bedeutet „component object model“ und ist ein generisches objektmodel, dass von verschiedenen sprachen genutzt werden kann).

warum diese unterscheidung: das excel-com-objektmodel kann auch aus anderen sprachen verwendet werden, nicht nur aus vba heraus. über eine erweiterung kann man z.b. aus perl heraus com-objekte ansprechen - damit sind excel-makros in perl möglich, ohne auch nur einen strich in vba zu schreiben.

kleine einschränkung: com sieht manche konstrukte vor, die in anderen sprachen als vb (inkl. vba und vbscript) nicht oder nur eingeschränkt genutzt werden können (v.a. weil com und vba sogenannte defaultmethoden und defaultattribute unterstützt, die in anderen sprachen praktsich unbekannt sind). es kann daher manchmal nicht der volle umfang des jeweiligen objektmodels in anderen sprachen genutzt werden.

Objektmodell in VBA was ist das?

wie schon erwähnt: vba hat zwar ein objektmodel, aber ein unbedeutendes. wichtiger sind die objektmodelle der verwendeten bibliotheken (also das von office generell, das von excel, der windows script host etc.)

was ist nun ein objektmodel? eine spezielle programmbibliothek stellt bestimmte funktionen zur verfügung. diese funktionen sind in einzelne module zusammengefasst. diese module nennt man dann objekte. ein simples objektmodel besteht aus einem einzigen objekt, dass alle funktionen der programmbibliothek erledigt. das widerspricht aber den objektorientierten ansatz, der gerne alles auf möglichst kleine module/objekte aufteilt. gerade bei einer anwendung wie excel wäre ein ein-objekt-model daher sinnloss. desshalb wird in excel alles in kleine funktionale module (objekte) gegliedert, die sich alle um kleine spezialgebiete kümmern. es gibt z.b. ein range-objekt, dass sicht darum kümmert, dass bereiche in einem arbeitsblatt (also eine oder mehrere zellen) zu einer einheit zusammengefasst werden. die summe aller dieser objekte sowie deren beziehung untereinander ist dann das objektmodell von excel.

Begriffe die zu erklären sind: Übergabeparameter/
Parameterübergabe; Funktionen; Programme; Ereignisse; Methoden

ok - das wird jetzt ein programmierkurs und sprengt den rahmen dieses forums. einen entsprechenden link hast du ja schon gepostet bekommen.

Alternativen zu VBA in Excel?

das excel-com-objektmodell kann von jeder com-fähigen sprachen angesteuert werden. dies sind v.a. alle vb-dialekte (vb, vba, vbscript), c#, c++ aber auch perl usw. über ein paar tricks (com-wrapper) kannst du excel auch aus java heraus ansteuern. aber wie erwähnt gibt es möglicherweise einschränkungen bei den einzelnen sprachen.

aber nicht vergessen: vba integriert sich am besten in excel und ist vor allem automatisch dabei, ohne dass man was nachinstallieren muss. man muss also schon einen guten grund haben, zu was anderem als vba zu greifen, wenn man was im excel automatisieren will.

VBA in anderen (MS-)Office Produkten

alle office-produkte unterstützen vba. zusätzlich haben einige andere softwarepakete vba integriert (z.b. corel draw). weiters gibt es ein paar clone, die vba simulieren (z.b. starbasic im staroffice bzw. openoffice.org)

lg
erwin

Danke Ralf

Könnte mir noch jemand folgende Begriffe erklären:
Übergabeparameter
Funktionen
Programme
Ereignisse
Methoden

Danke
Grüße

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

na gut…

programme
ein programm ist üblicherweise eine datei, die vom betriebssystem ausgeführt werden kann und die dann irgendwas am computer anstellt.

funktionen/methoden
funktionen und methoden sind im prinzip das selbe. der erste begriff stammt eher aus der prozeduralen ecke, der zweite aus der objektorienierten. es geht aber um das selbe: du hast irgendein modul, dass irgendwas tut. was das ist, hängt von der programmierung ab. üblicherweise will ich vom modul irgendeine arbeit erledigt haben. diesen wunsch nennt man manchmal auch anwendungsfall oder „use case“. eine funktion ist nun eine sammlung aller notwendiger arbeitsschritte, die notwendig ist, um diese arbeit zu erledigen. man kann nun eine wirklich grosse funktion schreiben, die sämtliche arbeitsschritte inkludiert, was aber nicht so gut ist - habe ich einen zweiten anwendungsfall, der eine ähnliche arbeit erledigt haben will, müsste ich viel von der ersten funktion kopieren oder neu schreiben. statt dessen untergliedert man die funktion in mehrere unterfunktionen, die sich alle um kleinere, abgeschlossene einheiten kümmern. eine übergeordnete funktion steuert dann die unterfunktionen an.

Übergabeparameter/Parameterübergabe
tja, du kannst eine funktion auch so schreiben, dass sie alles, was sie zum arbeiten braucht, fix einprogrammiert hat. ist aber blöd. stell dir vor, du willst zwei zahlen addieren. dein anwendungsfall ist also z.b. „addiere 1 und 2“. du kannst nun eine funktion schreiben, die die zahlen 1 und 2 addiert und dir das ergebnis rausschreibt. wenn du nun den anwendungsfall „addiere 3 und 5“ hast, müsstest du eine neue funktion schreiben. statt dessen schreibst du lieber eine funktion, die „addiere x und y“ erledigt und zur laufzeit für die variablen x und y werte von dir erwartet. damit hast du nur eine funktion für beide anwendungsfälle. das übernehmen von werten und befüllen der internen variablen mit diesen werten ist eben die übergabe von parametern.

Ereignisse
ereignisse sind was ähnliches wie funktionen/methoden. sie stammen auch aus der objektorientierten ecke. der hintergedanke dabei: es kommt oft vor, dass ein modul auf eine bestimmte zustandänderung von aussen reagieren muss. z.b. wird eine schaltfläche in einem programm darauf warten, dass der benutzer mit der maus darauf klickt. oder das darunterliegende fenster wartet darauf, dass jemand den button klickt usw. der prozedurale ansatz wäre nun, dass du eine hauptschleife hast, die ständig alle notwendigen zustände überprüft (z.b. position des mauszeigers, maustasten gedrückt oder nicht, etc.) und daraus dann irgendwelche folgeaktionen ableitet. also so wie ein manager einer firma, der ständig durch die zimmer läuft und schaut, ob eh alles ok ist. der objektorientierte ansatz ist, dass das fenster die kontrolle ständig an andere module delegiert und nur benachtrichtigt wird, wenn ein klar definierter zustandsübergang eintritt. z.b. prüft die schaltfläche selbständig, ob der mauszeiger sich über ihr befindet und die maustaste gedrückt wurde. ist das der fall, weiss die schaltfläche, dass sie von einem anderen modul eine klar definierte methode aufrufen soll, über die das drücken der schaltfläche gemeldet wird. also wie ein manager, der brav in seinem büro sitzt und angerufen wird, wenn irgendwas nicht stimmt.

die tatsache, dass der vordefinierte zustandsübergang eintritt, nennt man ereignis. die methode, die aufgerufen werden soll, wenn das ereignis auftritt, nennt man ereignismethode. meist sagt man aber einfach nur „event“, sowohl zum ereignis selbst als auch zur methode, die das ereigniss behandelt.

der sinn dahinter ist, dass die software klarer strukturiert werden soll. eine funktion soll nicht ständig sämtliche zustände überwachen, weil das den code extrem unübersichtlich und schwer handhabbar macht. statt dessen wird der code aufgeteilt auf kleine blöcke, die sich nur um spezielle zustände kümmern. laut theorie wird damit der code lesbarer und wartbarer. in der praxis schaffen es die programmiere aber immer wieder, auch mit ereignisprozeduren gröbsten spaghetti-code zu erzeugen.

VBA in anderen (MS-)Office Produkten

Alle Office-Produkte arbeiten mit VBA.

Hallo Ralf,
nicht nur Office Produkte (Oder gehört MS schon Corel,AutoCad,?)

Derzeit (Stand 2006) ist VBA in den Microsoft-Office-Programmen Word (seit Version 97), Excel (seit Version 95), Access (seit Version 95), Project, PowerPoint, FrontPage, Visio (seit Version 2000) und Outlook verfügbar. Darüber hinaus wird VBA von der Corel Corporation lizenziert und ist in Corel Draw und Corel Photo Paint verfügbar. VBA wird auch als Makrosprache in AutoCAD, ARIS, MindManager und vielen anderen Anwendungen eingesetzt. Microsoft Office 2008 für den Mac wird keine VBA-Unterstützung mehr bieten.

Quelle: http://de.wikipedia.org/wiki/Visual_Basic_for_Applic…

Und was soll das mit Office 2008, ich hatte ja noch gar keine Gelegenheit mich über Office 2007 zu ärgern, geht alles viel zu schnell :frowning: :smile:)

Gruß
Reinhard

Grüezi Mathew,

Könnte mir noch jemand folgende Begriffe erklären:
Übergabeparameter
Funktionen
Programme
Ereignisse
Methoden

Was hältst Du vom Selbst-Studium? :wink:

http://www.fernuni-hagen.de/zmi/katalog/B012.shtml
http://www.rhirte.de/vb/home.htm

Grüezi Reinhard

Und was soll das mit Office 2008, ich hatte ja noch gar keine
Gelegenheit mich über Office 2007 zu ärgern, geht alles viel
zu schnell :frowning: :smile:)

Die 2004-er und die 2008-er Versionen sind die jeweiligen MAC-Versionen von 2003 und 2007.
Sie weisen aber dennoch weitere Unterschiede zur Win-Version auf, sind also nicht 1:1 verlgeichba–
Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -r.

OT: Office 2004 und 2008 sind für MAC

Die 2004-er und die 2008-er Versionen sind die jeweiligen
MAC-Versionen von 2003 und 2007.
Sie weisen aber dennoch weitere Unterschiede zur Win-Version
auf, sind also nicht 1:1 verlgeichba–

Hallo Thomas,
wußte ich nicht, danke dir.
Da es anderen ja auch so gehen kann habe ich den Betreff fürs Archiv geändert.
Gruß
Reinhard