Hallo Ulrich,
ja jetzt kann ich es schon etwas besser nachvollziehen was Du vor hast.
2.) Wenn ich diese Sub aus eine übergeortneten Sub aufrufe, müssen dann auch alle Object-Variablen deklariert werden.
Tja, wie soll ich es einfach sagen?
Jaien.
Es kommt auf die Situation drauf an.
Wenn nur in dieser Sub z.B. ein bestimmtes Tabellenblatt angesprochen wird, dann reicht es wenn die Variablen dort Lokal, also innerhalb der Sub, deklariert und definiert werden.
Wenn aber z.B. Werte, Texte oder ähnliches von einer Sub in die andere Sub übergeben werden sollen, dann muss die Variable, genauer gesagt der Variablenname Öffentlich deklariert werden.
Und öffentlich bedeutet, das die Variable als aller erstes ganz oben im Modul noch vor der ersten Sub deklariert werden muss. Die eigentliche definition der Variablen kann dann in der darauf folgenden oder erst in der 3 Sub geschehen.
Minimales Beispiel:
Normalerweise sieht ein neu angelegtes und unbeschriebenes Modul ja so aus.
In der aller ersten Zeile steht ja der Kommentar "REM ***** BASIC *****", die unbestraft gelöscht werden darf. Und das ist die Zeile ab der man anfängt Öffentlich zu deklarieren, was dann Beispielsweise wie folgt aussehen könnte.
Code: Alles auswählen
Dim oDok As Object, oMessen As Object, oDrucken As Object
Dim sTextUebergabe as String
Sub Erste_Routine
End Sub
Sub Zweite_Routine
End Sub
Nach dem so deklariert wurde, können in den folgenden Subs die Variablen definiert werden. Es gibt aber eine Regel die man beachten muss.
Wenn "Sub Erste_Routine" eine Variable zur Berechnung, oder ähnliches, an die "Sub Zweite_Routine" übergibt, dann muss die definition der Variable in der "Sub Erste_Routine" stattfinden. Oder aber halt auch anders herum.
Wichtig ist jedoch, das wenn eine Sub eine Variable an die andere Sub übergibt, das in der aufrufenden Sub die definition vollzogen wird, und erst dann in die andere Sub verzweigt werden darf.
Nehmen wir jetzt mal folgendes ganz einfaches Beispiel.
Angenommen Du arbeitest wohl mit mehreren Tabellenblättern, die aber nicht in jeder Sub Ver- beziehungsweise Bearbeitet werden, und ferner angenommen sei das die "Sub Erste_Routine" die Haupt-Sub ist die immer bei Aufruf des Makros ausgeführt wird, dann wäre folgendes Verfahren hilfreich (der Übersicht wegen).
In der Haupt-Sub werden alle Tabellenblätter definiert, auch selbst dann, wenn dort gar nicht auf ein Tabellenblatt zugegriffen wird.
Code: Alles auswählen
Dim oDok As Object, oMessen As Object, oDrucken As Object
Dim sTextUebergabe as String
Sub Erste_Routine
oDok = ThisComponent
oMessen = oDok.sheets.getByName("Messungen")
oDrucken = oDok.sheets.getByName("MessWerte")
' tu irgendwas in und mit oDrucken
' rufe die Zweite_Routine auf
End Sub
Sub Zweite_Routine
oBs = oMessen.getCellRangeByName("A2:G2")
[...]
End Sub
Das wärs eigentlich im groben und ganzen.
Gruß
balu