03.10.2020, 13:13
Hallo Olaf,
Bisher war keine Deiner Fragen lächerlich, auch in diesem Beitrag kann ich keine lächerliche Frage finden.
Grundsätzlich kannst Du den Code hineinschreiben wo Du möchtest. Makros, die mit einem Dokument weitergegeben werden sollen, musst Du natürlich im Dokument platzieren. Makros, die nicht an ein bestimmtes Dokument gebunden sind und auf dem lokalen Rechner bleiben sollen, kannst Du in die (von Corel angelegte) GMS-Datei „GlobalMakros“ schreiben. Weil das schnell unübersichtlich werden kann, solltest Du Deine Projekte aber in eigenen GMS-Dateien ablegen.
Innerhalb von Dokumenten oder GMS-Dateien kannst Du so viele Module anlegen, wie Du willst. Neben einfachen Codemodulen gibt es noch Klassenmodule, UserForm-Module (für Benutzerdialoge) und Module die Ereignisse durch Ereignisprozeduren verarbeiten können. Zu letzteren gehören „ThisMacroStorage“ in GMS-Dateien und „ThisDocument“ in Dokumenten.
![[Bild: neuesdokument-1mvj9u.jpg]](https://abload.de/img/neuesdokument-1mvj9u.jpg)
Das öffnen eines Dokuments wäre ein Ereignis, das durch die Ereignisprozedur „Document_Open“ verarbeitet werden kann. Steht die Ereignisprozedur in „ThisDocument“ wird das Öffnen dieses Dokuments verarbeitet, steht sie in „ThisMacroStorage“ wird sie bei jedem Öffnen irgendeines Dokuments verarbeitet. Auch in Deinen eigenen GMS-Dateien findest Du „ThisMacroStorage“, Du musst also die „GlobalMakros“ nicht verwenden.
In diesen speziellen Modulen sind die möglichen Ereignisse vorgegeben. Du kannst ein Ereignis über ein Dropdown auswählen und die Ereignisprozedur wird automatisch angelegt.
![[Bild: docopenh0kwy.gif]](https://abload.de/img/docopenh0kwy.gif)
Prozeduren, die von Ereignisprozeduren aufgerufen werden, können auch in anderen Modulen stehen.
Klassenmodule werden im Tutorial gut erklärt, darauf möchte ich jetzt nicht eingehen.
Eine Liste der Befehle, die Bestandteil der Programmiersprache VBA sind, findest Du in der Funktionsreferenz des Tutorials. Diese ist thematisch geordnet und für jeden Befehl gibt es dort eine Kurzerklärung.
Die Befehle der Wirtsanwendung (also des Programms in das VBA integriert ist wie CorelDRAW, Word, AutoCAD usw.) findet man in der Hilfe des entsprechenden Programms. Die Befehle des Programms sind als Methoden von Objekten und deren Unterobjekten angelegt. Die oberste Ebene ist dabei das Application-Objekt, also das Programm selber. Objekte und Unterobjekte bilden das Objektmodell. Dieses Objektmodell wird oft (so übersichtlich wie möglich) in einer Grafik beschrieben. Das Objektmodell für CorelDRAW X7 findest Du z.B. hier.
Die Befehle (Methoden) wird man aber kaum verstehen, wenn man sich nicht vorher mit dem Programm selber und den Objekten des Programms befasst hat. Solche Listen haben eine einschüchternde Länge. Eine solche Liste durchzugehen ist (meiner Meinung nach) keine sinnvolle Lernmethode.
Zusätzliche Hinweise:
Damit ein Objekt zur Verfügung steht, muss ein Verweis auf die Objektbibliothek gesetzt sein.
Einen Verweis kann man unter Extras/Verweise setzen:
![[Bild: verweise1nk9k.jpg]](https://abload.de/img/verweise1nk9k.jpg)
Wenn Du z.B. von Coreldraw auf Microsoft-Word-Objekte zugreifen willst, kannst Du einen Verweis auf die Word-Objektbibliothek setzen.
Ein kleines Beispiel bei dem der erste Absatz eines geöffneten Word-Dokuments in den dritten Absatz eines CorelDraw-Mengentextes kopiert wird:
![[Bild: vonword3djux.gif]](https://abload.de/img/vonword3djux.gif)
Das Objekt „Word“ würde es ohne den Verweis nicht geben.
(tolles Beispiel, sowas braucht man täglich!)
Wenn Du sehen willst, welche Objekte zur Verfügung stehen ist der Objektkatalog (F2) nützlich.
Gruß
Koter
(02.10.2020, 21:09)Olaf schrieb: ...Ich habe ein paar Allgemeine Fragen zu VBA. Teilweise sicherlich lächerlich Dinge aber für mich wichtig, da ich wirklich noch am Anfang stehe...
Bisher war keine Deiner Fragen lächerlich, auch in diesem Beitrag kann ich keine lächerliche Frage finden.
(02.10.2020, 21:09)Olaf schrieb: Was ist der Unterschied zwischen einem Modul in das ich Code eingebe und z.B. This Macro Storage oder This Document. Ist es wichtig Wo ich welchen Code eintrage oder könnte ich, übertrieben gefragt, den Code reinschrieben wo ich möchte? Kann ich, wenn ich möchte, jede "Funktion" für mich zur Übersicht in viele einzelne Module hineinschreiben um den Code schön sauber zu separieren?
Grundsätzlich kannst Du den Code hineinschreiben wo Du möchtest. Makros, die mit einem Dokument weitergegeben werden sollen, musst Du natürlich im Dokument platzieren. Makros, die nicht an ein bestimmtes Dokument gebunden sind und auf dem lokalen Rechner bleiben sollen, kannst Du in die (von Corel angelegte) GMS-Datei „GlobalMakros“ schreiben. Weil das schnell unübersichtlich werden kann, solltest Du Deine Projekte aber in eigenen GMS-Dateien ablegen.
Innerhalb von Dokumenten oder GMS-Dateien kannst Du so viele Module anlegen, wie Du willst. Neben einfachen Codemodulen gibt es noch Klassenmodule, UserForm-Module (für Benutzerdialoge) und Module die Ereignisse durch Ereignisprozeduren verarbeiten können. Zu letzteren gehören „ThisMacroStorage“ in GMS-Dateien und „ThisDocument“ in Dokumenten.
![[Bild: neuesdokument-1mvj9u.jpg]](https://abload.de/img/neuesdokument-1mvj9u.jpg)
Das öffnen eines Dokuments wäre ein Ereignis, das durch die Ereignisprozedur „Document_Open“ verarbeitet werden kann. Steht die Ereignisprozedur in „ThisDocument“ wird das Öffnen dieses Dokuments verarbeitet, steht sie in „ThisMacroStorage“ wird sie bei jedem Öffnen irgendeines Dokuments verarbeitet. Auch in Deinen eigenen GMS-Dateien findest Du „ThisMacroStorage“, Du musst also die „GlobalMakros“ nicht verwenden.
In diesen speziellen Modulen sind die möglichen Ereignisse vorgegeben. Du kannst ein Ereignis über ein Dropdown auswählen und die Ereignisprozedur wird automatisch angelegt.
![[Bild: docopenh0kwy.gif]](https://abload.de/img/docopenh0kwy.gif)
Prozeduren, die von Ereignisprozeduren aufgerufen werden, können auch in anderen Modulen stehen.
Klassenmodule werden im Tutorial gut erklärt, darauf möchte ich jetzt nicht eingehen.
(02.10.2020, 21:09)Olaf schrieb: ...Gibt es irgendwo eine Art Übersicht über alle Befehle in Form einer Liste die z.B. in verschiedene Bereiche aufgeteilt ist und wo eventuell auch eine Kurzerklärung steht was der Befehl bewirkt?...
Eine Liste der Befehle, die Bestandteil der Programmiersprache VBA sind, findest Du in der Funktionsreferenz des Tutorials. Diese ist thematisch geordnet und für jeden Befehl gibt es dort eine Kurzerklärung.
Die Befehle der Wirtsanwendung (also des Programms in das VBA integriert ist wie CorelDRAW, Word, AutoCAD usw.) findet man in der Hilfe des entsprechenden Programms. Die Befehle des Programms sind als Methoden von Objekten und deren Unterobjekten angelegt. Die oberste Ebene ist dabei das Application-Objekt, also das Programm selber. Objekte und Unterobjekte bilden das Objektmodell. Dieses Objektmodell wird oft (so übersichtlich wie möglich) in einer Grafik beschrieben. Das Objektmodell für CorelDRAW X7 findest Du z.B. hier.
Die Befehle (Methoden) wird man aber kaum verstehen, wenn man sich nicht vorher mit dem Programm selber und den Objekten des Programms befasst hat. Solche Listen haben eine einschüchternde Länge. Eine solche Liste durchzugehen ist (meiner Meinung nach) keine sinnvolle Lernmethode.
Zusätzliche Hinweise:
Damit ein Objekt zur Verfügung steht, muss ein Verweis auf die Objektbibliothek gesetzt sein.
Einen Verweis kann man unter Extras/Verweise setzen:
![[Bild: verweise1nk9k.jpg]](https://abload.de/img/verweise1nk9k.jpg)
Wenn Du z.B. von Coreldraw auf Microsoft-Word-Objekte zugreifen willst, kannst Du einen Verweis auf die Word-Objektbibliothek setzen.
Ein kleines Beispiel bei dem der erste Absatz eines geöffneten Word-Dokuments in den dritten Absatz eines CorelDraw-Mengentextes kopiert wird:
![[Bild: vonword3djux.gif]](https://abload.de/img/vonword3djux.gif)
Code:
Sub AbsatzAusWordEinfügen()
Dim WordAbsatz As String
WordAbsatz = Word.ActiveDocument.Paragraphs(1).Range
ActiveLayer.Shapes("MText1").Text.Story.Paragraphs(3) = WordAbsatz
End Sub
Das Objekt „Word“ würde es ohne den Verweis nicht geben.
(tolles Beispiel, sowas braucht man täglich!)

Wenn Du sehen willst, welche Objekte zur Verfügung stehen ist der Objektkatalog (F2) nützlich.
Gruß
Koter