Hallo theindless,
Kann es sein, dass ich da grundsätzlich was falsch verstehe?
Ja.
Dazu komme ich gleich noch.
Kann ich überhaupt in der Sub "init" eine Definition wie
machen, die für alle Subs des Moduls gelten?
Ja.
Jedoch, und da wird es dann schon etwas verzwickter, kommt es wirklich auf das gesamte Makro drauf an.
Zu unterscheiden gilt:
- Wird mit Formularen gearbeitet, wie z.B. einem Button in der Tabelle?
- Wird mit Dialogen gearbeitet?
- Kommen Formulare UND Dialoge zum Einsatz?
- Werden weder Formulare noch Dialoge eingesetzt?
- Aus wievielen Modulen besteht das Makro?
- Wenn mehrere Module, welche Variablen werden in den anderen Modulen angewendet?
Mal ein kleiner versuch zu verdeutlichen was ich damit sagen will, und vielleicht verstehst Du dann auch Dannenhöfer besser.
In dem einen Thread von dir:
Mehrere Inputbox-Variablen vereinfachen, ist ja eine Beispieldatei von mir; Simpler_Dialog_anstatt_Inputboxen_0.ods
Und mit dieser kannst Du eigentlich recht gut testen was passiert wenn...
Füge dort in der
sub auswerten nach der Zeile mit
oDialog1.endexecute noch folgende 2 Zeilen ein.
Code: Alles auswählen
oSheet = oDoc.Sheets(0)
oSheet.getcellByPosition(0,10).value = 123456
Nun klicke auf den Grünen Button im Tabellenblatt, und klicke gleich im Dialog auf OK. Das Ergebnis ist sehr eindeutig, denn Du wirst ne Fehlermeldung bekommen.
Und warum?
Weil die Variablen
oDoc und
oSheet nur in der
Sub Projekt_erfassen_Array deklariert und definiert sind. Sie sind also nur dort gültig, sie sind also nur Lokal wirksam. Und das ist dein ungewollter Fehler.
Damit aber die Variablen
oDoc und
oSheet auch in der
sub auswerten gelten, müssen sie Öffentlich deklariert werden. Und das geschieht dadurch, das sie
nicht in einer Sub, sondern ganz am Anfang eines Moduls "freistehend" deklariert werden. Genau so wie dort zu sehen mit diesen beiden Zeilen.
Code: Alles auswählen
Public oDialog1 as Object
Public oProjektBlatt as Object
Folglich müssten dann in ungefähr die allerersten Zeilen wie folgt aussehen.
Code: Alles auswählen
Public oDialog1 as Object
Public oProjektBlatt as Object
dim oDoc as Object, oSheet as Object
Ob jetzt Dim oder Public angewendet wird, ist wahrscheinlich Geschmackssache.
-{Bin ich mir aber noch nicht so 100pro sicher.}- Auf jeden Fall kann jetzt in in der
Sub Projekt_erfassen_Array die Zeile mit den Dim gelöscht werden.
Die deklaration der Varialen ist also Öffentlich erledigt worden. Nun können die Variablen in einer Sub defeniert werden, und sie gelten dann auch in anderen Subs, so wie zu sehen mit
oProjektBlatt.
Je nach Aufgabe und Funktionalität des Makros reicht es einmal
zu deklarieren und zu defenieren. Aber pauschal gilt die Aussage dennoch nicht, da die von mir eingangs genannten Punkte zum tragen kommen. Es sei denn, Du nimmst anstatt Dim oder Public die "dauernd" wirkende Global. Diese jedoch bitte mit Vorsicht anwenden!
Wenn Du weiterhin Probleme mit den Leerzeichen zwischen den Wörtern hast, vermute ich das etwas mit deinem Benutzerprofil nicht stimmt. Denn weder in OOo 3.2.1, 3.3.0 noch in LO 3.3.4 werden bei mir hier unter WinXP Leerzeichen ignoriert.
Gruß
balu