Anzeige
Archiv - Navigation
1136to1140
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variablen eines Formulares

Variablen eines Formulares
Marcel
Hallo,
in einem Formular (Name: Eingabe_1_1) habe ich mehrere Variablen (Var1...Var7) eingegeben.
Das Format dieser Variablen ist bekanntermaßen "Name Formular.Name Variable"; also "Eingabe_1_1.Var1" - "Eingabe_1_1.Var7".
Diese möchte ich jetzt über eine Schleife abrufen.
For Schleife = 1 to 7
NameVariable = "Eingabe_1_1.Var" & Schleife
Debug.Print NameVariable
Next Schleife
Heraus kommt dann aber "Eingabe_1_1.Var1" ... " Eingabe_1_1.Var7" anstelle der Werte dieser Variablen.
Wie komme ich an diese Werte ran?
Danke

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Variablen eines Formulares
16.02.2010 16:30:04
Rudi
Hallo,
du kannst keine Var-Namen in einer Schleife zusammenbasteln.
Was sind Var1-Var7? Textfelder?
For Schleife = 1 to 7
NameVariable = Eingabe_1_1.controls("Var" & Schleife)
Debug.Print NameVariable
Next Schleife
Gruß
Rudi
AW: Variablen eines Formulares
16.02.2010 16:40:10
Marcel
Hallo,
danke für die schnelle Antwort.
Var1 - Var7 sind teils Strings teils Zahlen.
Aufgrund des Format der Variablen aus Formularen (NameFormular.NameVariable) ist es mein Ziel, den eingegebenen Variablen eine möglichst fortlaufende Bezeichnung zu geben, um sie über eine Schleife auszulesen.
Du sagst das geht nicht?
Gibt es eine andere Methode, um dem besonderen Format der Formular-Variablen gerecht zu werden und diese möglichst in 1 Schleife auszulesen?
Anzeige
lad' doch mal ein kleines Beispiel hoch...
16.02.2010 17:06:50
Christian
Hallo Marcel,
Das Format dieser Variablen ist bekanntermaßen "Name Formular.Name Variable" Das wäre mir neu, und wahrscheinlich auch vielen hier im Forum. Bei "Formular" denke ich erst mal an ein Userform ( und so auch Rudi).
lad' doch mal ein kleines Beispiel hoch, dann können wir dir bestimmt helfen.
Gruß
Christian
AW: lad' doch mal ein kleines Beispiel hoch...
16.02.2010 17:41:00
Marcel
https://www.herber.de/bbs/user/68048.xls
Hallo,
Dies ist ein kleiner Ausschnitt des eigentlichen Programmes.
Daher wird euch vermutlich mein Lösungsansatz ein wenig umständlich vorkommen.
Daher einige kurze Zusatzerklärungen:
- Ich habe insgesamt ca. 10 Formulare mit unterschiedlicher Anzahl von abgefragten Variablen.
- Die Zeile "Set Formular = VBA.UserForms.Add("Eingabe_" & wstest.Range("A3") & "_" & wstest.Range("B3"))" ist meines Wissens die einzige Art und Weise, wie man ein Formular mit einem aus Strings zusammengesetzten Namen aufruft.
- Durch "Me.Hide" gehen die im Formular eingegeben Variablen nicht verloren sondern können über das Format "NameFormular.NameVariable" im Modul1 weiterverarbeitet werden.
- Im Modul1 habe ich versucht, die 7 Variablen in der Schleife auszulesen...was nicht funktioniert.
- Mit "Debug.Print Formular.Var1" etc. klappt alles hervorragend. Aber dies ist nicht wirklich elegant, und klappt nicht wirklich toll bei mehreren Formularen mit unterschiedlicher Anzahl von Variablen.
Schön mal im voraus Danke für eure Mühen.
Marcel
Anzeige
also doch TextBoxes
16.02.2010 17:56:22
Christian
Hallo,
es handelt sich hier nicht um Variablen sondern um Controls vom Typ TextBox in einem Userform.
Deren Werte kannst du in einer Schleife zB wie folgt abfragen:
For Schleife = 1 To Anzahl_Variablen
test = "Formular" & ".Var" & Schleife
Debug.Print Formular.Controls("Var" & Schleife)
Next Schleife
Btw - schau dir mal den Vriablen-Typ "Double" an. Und alternativ hierzu Integer oder Long
Gruß
Christian
AW: also doch TextBoxes
17.02.2010 13:15:48
Marcel
Klasse.
Funktioniert reibungslos.
Erlaubt mir eine weitere Frage loszuwerden, die vermutlich mit derselben Problematik zusammenhängt.
Anbei eine Beispieldatei:
https://www.herber.de/bbs/user/68069.xls
Der Vorteil der "Controls" im Format "NameFormular.NameVariabel" ist für mich, dass sie nach Schließen der UserForm weiter zur Verfügung stehen.
Wenn ich im Modul1 jetzt die UserForm per
Set Formular = VBA.UserForms.Add("Eingabe_" & wstest.Range("A3") & "_" & wstest.Range("B3"))
Formular.Show
aufrufe, um mir dann im Code der UserForm die Eingaben per Debug.Print anzusehen, funktioniert "Debug.Print Eingabe_3_3.Var1" nicht, obwohl die UserForm "Eingabe_3_3" und die Variable "Var1" heisst. Nur "Debug.Print Me.Var1" ergibt einen Wert.
Auch "Eingabe_3_3.Hide" funktioniert nicht.
Die Werte der "Controls" im Format "NameFormular.NameVariabel" sind aber für mich wichtig, da ich nach Schließen der UserForm mit den Werten weiterarbeiten will.
Hat hier jemand eine Ahnung, was Ursache des Problems ist und wie man es lösen kann?
Marcel
Anzeige
AW: also doch TextBoxes
17.02.2010 14:14:42
Christian
Hallo,
das geht so nicht - Set Formular = VBA.UserForms.Add.... Du willst ja kein zusätzliches Object erzeugen, sondern ein forhandenes Userformular öffnen.
Also:
Rufe das Userform ganz normal mit .Show" auf. Alle weiteren Aktionen gehören in das Klassenmodul des Userform.
Wenn du auf die Einträge der Textboxen später zugreifen willst, dann schreib diese in ein Array.
Gruß
Christian
AW: also doch TextBoxes
17.02.2010 15:31:22
Marcel
Du hast recht.
Doch Deine Idee scheitert bei mir an der Umsetzung.
Der Befehl ".Show" funktioniert nicht bei UserForm Namen, die aus Variablen zusammengesetzt werden.
Siehe hier: http://support.microsoft.com/kb/213574/de
Dies ist aber bei mir erforderlich, da ich eine Vielzahl von UserForms habe, die aufgrund einer Eingabe des Nutzers aufgerufen werden und dessen Name daher aus Variablen zusammengesetzt werden.
Wenn Du eine andere Lösung hast, küsse ich Dir (virtuell) die Füße.
Anzeige
AW: also doch TextBoxes
17.02.2010 17:24:52
Christian
Hallo,
ok, das kannte ich so noch nicht...
aber - bleiben wir mal bei meinem Vorschlag:
Ich geh mal davon aus, dass sich die X Userforms nur durch die Anzahl der TextBoxes unterscheiden.
(also zB Userform1 hat 7, Userform2 hat 9, Userform3 hat 4, etc.
Dann erzeuge ein Userform mit der max Anzahl an TextBoxes. Bei jedem Aufruf öffnest du immer dieses eine Userform und blendest die überzähligen TextBoxes aus.
Mit Click auf einem Button schreibst du die Einträge der TextBoxes in eine Tabelle "Data". Beim Öffnen holst du diese WErte wieder ab und schreibst sie in deine TextBoxes.
Hier ein Bsp mit max 10 TextBoxes. Der "Identifier2" ist hier nicht berücksichtigt.
https://www.herber.de/bbs/user/68074.xls
watt hältst'e davon?
Gruß
Christian
Anzeige
AW: also doch TextBoxes
17.02.2010 17:53:58
Marcel
Coole Idee,
so brauche ich nicht 10 Formulare anzulegen sondern nur 1, das ich dann individuell gestalte.
Mein Problem, dass ich im Modul1 nicht mit den Werten der "Controls" weiterarbeiten kann, hast Du elegant dadurch gelöst, dass Du die Werte aus dem Formularcode heraus wieder ins Arbeitsblatt der Excel Datei geschrieben hast, wodurch ich mit diesen Werten beliebig weiterarbeiten kann.
Eine einfache und elegante Lösung.
Manchmal sieht man den Wald vor lauter Bäumen nicht.
Danke
Marcel
kleine Korrektur
17.02.2010 17:55:06
Christian
Hallo Marcel,
schreib in dem Code ganz oben unter "Dim lngTypID As Long" folgende Zeile: "Dim lngVarCnt As Long"
und lösche in "Private Sub UserForm_Initialize()" die Deklaration von lngVarCnt.
dann läuft das.
Gruß
Christian
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige