Nix&Alleswisser
Grünschnabel
N'Abend, liebe Leut!
Ich quäle mich schon seit längerem durch die Suche und googeln hat mich auch nicht zum Ziel gebracht. Vielleicht ist meine Frage so dä..., dass man das nie thematisiert hat.
Kurzfassung:
Gibt es einen ähnlichen Befehls-Ausdruck für VBA Word, wie er in VB6 möglich ist:
Set ctlControl = Controls(<Name des Controls, das in einem Array abgelegt wurde>)
Langfassung:
Vorgeschichte:
In MS Word muss der Anwender (AW) in angebotenen Dot-Vorlagen mehrere Forms abarbeiten bis dann nach dem letzten fertig bearbeitetem Form erst die Inhalte aller durchlaufenen Forms in das Dokument geschrieben werden. Ich habe eine Ablaufsteuerung realisiert, womit der AW u.a. mit "Weiter" ins nächste Form kommt, aber auch mit "Zurück" in das vorige Form springen kann (die weiteren Möglichkeiten lasse ich jetzt mal weg). Bisher hatte ich es so realisiert, dass die zu verlassenen Forms dann einfach per Hide versteckt werden.
Jetzt wurde ich verdonnert, Forms zu schließen und die Controls eben zwischenzuspeichern wegen Speicherplatz ...
Gegebenheiten:
Mit Klassenmodulen konnte ich mich bislang nicht anfreunden - ich lege die Werte und Eigenschaften ausgesuchter Controltypen des zu verlassenen Forms nach einem bestimmten Schema in ein dynamisches Array mit 4 Dimensionen ab (ich mag Arrays
).
Damit es hier nachvollziehbar bleibt, nehme ich mal exemplarisch ein Array mit 2 Dimensionen: "Dim Array() as String".
Das Beispielformular (Form01) hat 3 Controls: TextBox1 und 2 Command-Buttons.
Beim Verlassen des Form01 mit "Weiter" werden alle Controls des Form01 im Wege einer Schleife abgehandelt und der Control-Typ ausgewertet, also nur die für mich interessanten Controls ins Array gespeichert (z.B. "If TypeOf Control Is TextBox Then ..."). Das Array wurde jetzt befüllt mit:
Array(0 , 0) = "TextBox1" - Name des Controls
Array(0 , 1) = "Hallo" - Value des Controls
Array(0 , 2) = "Wahr" - Eigenschaft Visible des Controls
Form01 wird dann per Unload geschlossen.
Wenn ich in Form01 wieder zurückspringen will, wird es neu geladen. Anhand des Arrays (das mir auch den Formularnamen verrät) erkenne ich, dass Frm01 schon einmal initialisiert bzw. bearbeitet wurde. Daher mache ich keine Grund-Initialisierung des Forms (das geschieht nur, wenn das Form zum 1. Mal geladen wird), sondern möchte nun die Controls entsprechend befüllen oder z.B. die EIgenschaft "Visible" setzen.
Problem:
Die Prozedur zur Abhandlung der Controls ist in ein Modul ausgelagert, befindet sich also nicht als Modul in der Form.
In VB6 konnte man folgendes verwenden:
Dim i As Integer
i = 0
Do
Ich erhalte zum Begriff Controls die Fehlermeldung "Sub oder Function nicht definiert". Nun suche ich eine Anweisung, die in VBA verarbeitet werden kann.
Der Befehl Control.Add(Array(i , 0)) geht nicht und mein Bauch sagt mir auch, dass ein Add wohl hier falsch wäre. Problematisch ist wohl, dass ich nicht in einem formularinternen Modul operiere. Aber ich möchte auch nicht in jedem Form einen Haufen Code integrieren.
Kann mir jemand helfen? Besten Dank!
Ich quäle mich schon seit längerem durch die Suche und googeln hat mich auch nicht zum Ziel gebracht. Vielleicht ist meine Frage so dä..., dass man das nie thematisiert hat.
Kurzfassung:
Gibt es einen ähnlichen Befehls-Ausdruck für VBA Word, wie er in VB6 möglich ist:
Set ctlControl = Controls(<Name des Controls, das in einem Array abgelegt wurde>)
Langfassung:
Vorgeschichte:
In MS Word muss der Anwender (AW) in angebotenen Dot-Vorlagen mehrere Forms abarbeiten bis dann nach dem letzten fertig bearbeitetem Form erst die Inhalte aller durchlaufenen Forms in das Dokument geschrieben werden. Ich habe eine Ablaufsteuerung realisiert, womit der AW u.a. mit "Weiter" ins nächste Form kommt, aber auch mit "Zurück" in das vorige Form springen kann (die weiteren Möglichkeiten lasse ich jetzt mal weg). Bisher hatte ich es so realisiert, dass die zu verlassenen Forms dann einfach per Hide versteckt werden.
Jetzt wurde ich verdonnert, Forms zu schließen und die Controls eben zwischenzuspeichern wegen Speicherplatz ...
Gegebenheiten:
Mit Klassenmodulen konnte ich mich bislang nicht anfreunden - ich lege die Werte und Eigenschaften ausgesuchter Controltypen des zu verlassenen Forms nach einem bestimmten Schema in ein dynamisches Array mit 4 Dimensionen ab (ich mag Arrays

Damit es hier nachvollziehbar bleibt, nehme ich mal exemplarisch ein Array mit 2 Dimensionen: "Dim Array() as String".
Das Beispielformular (Form01) hat 3 Controls: TextBox1 und 2 Command-Buttons.
Beim Verlassen des Form01 mit "Weiter" werden alle Controls des Form01 im Wege einer Schleife abgehandelt und der Control-Typ ausgewertet, also nur die für mich interessanten Controls ins Array gespeichert (z.B. "If TypeOf Control Is TextBox Then ..."). Das Array wurde jetzt befüllt mit:
Array(0 , 0) = "TextBox1" - Name des Controls
Array(0 , 1) = "Hallo" - Value des Controls
Array(0 , 2) = "Wahr" - Eigenschaft Visible des Controls
Form01 wird dann per Unload geschlossen.
Wenn ich in Form01 wieder zurückspringen will, wird es neu geladen. Anhand des Arrays (das mir auch den Formularnamen verrät) erkenne ich, dass Frm01 schon einmal initialisiert bzw. bearbeitet wurde. Daher mache ich keine Grund-Initialisierung des Forms (das geschieht nur, wenn das Form zum 1. Mal geladen wird), sondern möchte nun die Controls entsprechend befüllen oder z.B. die EIgenschaft "Visible" setzen.
Problem:
Die Prozedur zur Abhandlung der Controls ist in ein Modul ausgelagert, befindet sich also nicht als Modul in der Form.
In VB6 konnte man folgendes verwenden:
Dim i As Integer
i = 0
Do
Set ctlControl = Controls(Array(i , 0)) 'Ctrl-Namen zuweisen
If TypeOf ctlControl Is TextBox Then
... behandle die Text-Box entsprechend des Arrays
ElseIf TypeOf ctlControl Is CheckBox Then
usw.
End If
i = i + 1 'nächstes Control einstellen
If i > UBound(Array, 1) Then Exit Do 'Wenn der Höchstwert der 1. Dimension erreicht ist, dann Schleife verlassen
Loop While Ablauf_aStrFrmDaten(i , 0) <> "" 'wenn nächster Platz nicht mit Control-Namen belegt ist, dann rausIf TypeOf ctlControl Is TextBox Then
... behandle die Text-Box entsprechend des Arrays
ElseIf TypeOf ctlControl Is CheckBox Then
usw.
End If
i = i + 1 'nächstes Control einstellen
If i > UBound(Array, 1) Then Exit Do 'Wenn der Höchstwert der 1. Dimension erreicht ist, dann Schleife verlassen
Ich erhalte zum Begriff Controls die Fehlermeldung "Sub oder Function nicht definiert". Nun suche ich eine Anweisung, die in VBA verarbeitet werden kann.
Der Befehl Control.Add(Array(i , 0)) geht nicht und mein Bauch sagt mir auch, dass ein Add wohl hier falsch wäre. Problematisch ist wohl, dass ich nicht in einem formularinternen Modul operiere. Aber ich möchte auch nicht in jedem Form einen Haufen Code integrieren.
Kann mir jemand helfen? Besten Dank!