Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
248to252
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
248to252
248to252
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Controls eines Formulars nachträglich indizieren

Controls eines Formulars nachträglich indizieren
29.04.2003 11:11:09
fcbok
Hallo,

habe leider im Forum zu diesem Thema noch keine Lösung gefunden.

Ich möchte per For-Next-Schleife auf Controls-Elemente einer Userform über den Index zugreifen. Leider ist dieser Index nicht in der gewünschten Reihenfolge angelegt, weil ich die Controls nicht hintereinander angelegt habe.

Kann ich den Index der Controls in der Auflistung nachträglich verändern, oder muss ich mir schon beim Anlegen der Form überlegen, in welcher Reihenfolge ich Steuerelemente erstelle? Wenn der Index nicht einfach zu ändern ist, gibt es die Möglichkeit, die Controls-Objekte hin- und herzuverschieben?

Gruss fcbok

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Controls eines Formulars nachträglich indizieren
29.04.2003 11:43:51
Michael Scheffler

Hi,

nein, aber das ist doch egal, welchen Index sie haben, Du kannst Doch auch mit dem Namen auf sie zugreifen?

Controls(ctrName)

Gruß

Micha

Re: Controls eines Formulars nachträglich indizieren
29.04.2003 12:01:50
fcbok

Hi Micha,

Vielen Dank für Deine prompte Antwort!

Ich kann zwar über die Namen auf die Elemente zugreifen, aber ich wollte eigentlich mit einem Zähler arbeiten, so dass ich in der Form >controls(i)< auf die einzelnen Elemente zugreifen kann. Damit würde ich mir die Eingabe der Namen für den Zugriff ersparen. Zudem würde der Codetext länger werden, wenn ich einzeln auf die Elemente per Namens-Eigenschaft zugreife.

Ich hätte zudem beim Einsatz von einer Zählervariablen den Vorteil, dass ich diese zur Abfrage bestimmter Daten aus einem Excel-Sheet mitverwenden kann.

Ich habe mir jetzt damit geholfen, dass ich die fraglichen Steuerelemente, falls die Reihenfolge des Indizes nicht gestimmt hat, ausgeschnitten und dann wieder hinein kopiert habe. Das hat die Auswirkung, dass die Indizes der noch vorhanden Controls beim Ausschneiden neu geordnet werden. Beim Einfügen erhalten die eingefügten Elemente Indizes, die aufsteigend angehängt werden.

Beispiel: Ich habe 10 Steuerelemente. Controls(7) und Controls(8) sollen an Stelle 9 und 10. ==> Controls(7) und Controls(8) auswählen, ausschneiden und wieder einfügen.

Damit ist mein Problem wohl gelöst. Interessant wäre es dennoch, ob die Index-Eigenschaft der Controls per Code geändert werden kann.

Gruß fcbok

Anzeige
Re: Controls eines Formulars nachträglich indizieren
29.04.2003 12:50:18
Michael Scheffler

Hi,

ich weiß immer noch nicht, wo das Problem liegt. Der Code wird nicht länger, wenn Du per Namen zugreifst. Wenn Du ein paar Regeln für Steuerelementnamen einhälst, geht das sehr gut.

Aber Du kannst Controls ja auch dynamisch erzeugen, dann haszt Du die Reihenfolge selbst in der Hand.

Gruß

Micha

Re: Controls eines Formulars nachträglich indizieren
29.04.2003 13:51:15
fcbok

Hallo,

ich versuche noch einmal, mein Problem deutlich zu machen.

Beispiel:
Die Excel-Datei dient zum Vergleich von Kosten für einzelne Artikel bei verschiedenen Anbietern. Dabei können in der UserForm die Mengen vom Nutzer eingegeben werden. Der Einzelpreis und der sich aus Menge * Artikel ergebende Gesamtpreis werden im Formular mit angezeigt. Die daraus resultierende Daten werden in ein Excel-Sheet geschrieben und durch ein Diagramm grafisch dargestellt. Die zuletzt vorgenommenen Eintragungen sollen bei einem weiteren Aufruf des Formulars wieder angezeigt werden, wobei Artikel-Daten in einem separaten Sheet gespeichert werden.

Für jeden Artikel ist in der Userform eine Zeile vorgesehen, in der für jeden Anbieter die Eintragungen vorgenommen werden können. Bei der Initialisierung der UserForm habe ich beispielsweise für den Anbieter x drei Felder zu initialisieren:

Menge --> mit der Menge aus Sheet
EP --> mit Preis aus Sheet
GP --> Summe (Menge * EP)

Der Zugriff über den Namen wäre etwa so.
Userform.Controls("txt_Mengeschnurlos_Siemens").Value = 0
Userform.Controls("lbl_EPschnurlos_Siemens").Caption = 55.13
Userform.Controls("lbl_GPschnurlos_Siemens").Caption = 0
(Eine For-Schleife kann ich hier meines Erachtens nicht einbauen und muss für jedes zu initalisierende Element eine Zeile schreiben)

Der Zugriff über eine For-Schleife wäre etwa so.
For Zaehler = 0 To Controls.Count - 1
Userform.Controls(Zaehler).Value = Mengenermittlung(Zaehler)
Userform.Controls(Zaehler + 1).Caption = Einzelpreis(Zaehler)
Userform.Controls(Zaehler + 2).Caption = Gesamtpreis(Zaehler)
Next Zaehler
(Hier habe ich für alle Steuerelemente insgesamt nur drei Zeilen. Zur Abfrage der Mengen- und Preisinformationen könnte ich mit Hilfe des Zaehlers auf ein Daten-Sheet zurückgreifen.)

Mein Problem war, dass z. B. das Mengenfeld als controls(22) hinter dem Einzelpreisfeld als controls(21) kam. Somit wäre die obige For-Schleife nicht mehr in Ordnung, weil nach der Initialisierung des Mengenfelds der Index für den Einzelpreis auf 23 stehen würde, obwohl der Index der Einzelpreis-Control eigentlich 21 ist.

Ich hoffe, mein Problem wurde damit klar. Wie schon gesagt, habe ich das Problem dann mit Ausschneiden und Einfügen gelöst.

Gruß Jens

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige