Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
968to972
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
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Gibt es Arrays von Steuerelementen?

Gibt es Arrays von Steuerelementen?
19.04.2008 11:25:00
Steuerelementen?
Hallo, es folgt eine technische, aber vielleicht doch beantwortbare Frage.
In einem Buch habe ich vor einiger Zeit gelesen, es gebe in VB ausser Array-Variabeln auch Array-Controls (d.h. als Array ansprechbare und befuellbare Controls). Doch wie letztere gehandhabt werden, weiß ich leider nicht.
Wenn ich z.B. aus untereinanderliegenden Zellen einer Excel-Tabelle Daten in ein Textfeld einer Userform
schreiben will, kreiere ich in der Userform immer zuerst einen Rahmen (z.B. mit Namen "Rahmen01", in
den ich dann die Textfelder platziere. Die Textfelder werden von Excel dann selbsttätig mit einer Itemnummer versehen. Die Nummer des ersten Items innerhalb eines Rahmens beginnt offenbar immer
mit "0".
Im Programmcode rufe ich die Textfelder dann mit
Rahmen01.Controls.Item(0)
usw. auf. Wenn ich mehrere Textfelder befuellen will, baue ich um obige Anweisung eine Schleife, etwa so:

Sub Befuellung()
Dim i As Integer
For i = 1 To 10
Userform01.Rahmen01.Controls.Item(i)
Next i
End Sub


Nun habe ich kürzlich gelesen, dass es z.B. für Comboboxen eine Art Control-Array (= Steuerelement-Array) der Art
Me.Controls("Combobox" & i).Value = "-"
geben soll.
Ist ein solches oder ähnliches Array auch bei Textfeldern moeglich?
2. Unklar ist mir auch, wie die Item-Eigenschaft zu der Eigenschaft "Tabindex" der Controls eines
solchen Array in Beziehung steht. Ist die Item-Eigenschaft mit der Eigenschaft "Tabindex" identisch?
Dank im voraus. Werner

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

Betreff
Datum
Anwender
Anzeige
AW: Gibt es Arrays von Steuerelementen?
19.04.2008 12:17:43
Steuerelementen?
Hi,
VB ist nicht identisch mit VBA.
In VBA gibt es keine Control-Arrays, du kannst das, wie du selbst herausgefunden hast, über
das Controlobjekt als Stringverkettung nachbauen, wenn dein z.B. Textboxen fortlaufend
nummeriert sind, also TB1, TB2....TBn
For c = 1 to 10
controls("TB" & CStr(c)) = "Testtext " & CStr(c)
Next
Mit dem Tabindex hat das nichts zu tun, das ist eine separate Eigenschaft.
mfg Kurt

Nachtrag zu SteuerelementArrays
19.04.2008 12:24:00
Renee
Hi Werner,
Noch ein kleiner Zusatz: Vielleicht bezieht sich deine Lektüre auf VB 6.0, dort gab es sog. Steuerelementarrays, die sind aber inzwischen nicht mehr 'nötig'.
Siehe: Steuerelementarrays
GreetZ Renée

Anzeige
AW: Nachtrag zu SteuerelementArrays
19.04.2008 12:30:49
Original
Hi,
VB.Net ist eine ganz andere Spielwiese.
mfg Kurt

AW: Nachtrag zu SteuerelementArrays
19.04.2008 12:35:00
Renee
Hi,
Klar, wenn man sich immer im Hinterwald versteckt ;-)
GreetZ Renée

AW: Nachtrag zu SteuerelementArrays
19.04.2008 12:46:00
Original
Hi,
kann ich nicht deuten, was will uns der Poet damit sagen?
mfg Kurt

AW: Gibt es Arrays von Steuerelementen?
19.04.2008 12:19:00
Steuerelementen?
Hi Werner,
In deiner Anfrage sind IMHO ein paar Begriffe durcheinandergewürfelt.
Das was du als Control-Array ansprichst, ist IMHO eine Controls-Collection. Eine Collection enthält, im Unterschied zu einem 'gewöhnlichen' Array, eine Sammlung von Objekten. Am besten machst du dir diese Begriffe klar, wenn du auf dem Microsoft Developer Network die Suchbegriffe eingibst.
Mit der Referenzierung Me.Controls("Combobox" & i) sprichst du einzelne Kontrollelemente (CommandButtons, TextBoxen, ComboBoxen etc.) innerhalb der Controls-Collection mit ihrem Namen an. Hier hat die Variable i nicht die Funktion eines Index, sondern wird zum Bestandteil des Namens, der durch VBE automatisch mit einer 'fortlaufenden' Nummer versehen wird.
Der Index einer Control innerhalb der Collection wird fortlaufend bei der Erstellung der Control vergeben, also ist Me.Controls(i) nicht das gleiche wie dein Befehl. Die Art der Referenzierung ob mit Namen oder mit Index ist für alle Typen der Controls innerhalb der Collection möglich, ist also nicht abhängig vom Typ des Controls.
Was du mit der .Item Eigenschaft meinst versteh ich nicht ganz. Diese Eigenschaft haben z.B. Dictionary-Objekte, aber bei Controls hab ich sie noch nicht gesehen. Hingegen ist die .TabIndex Eigenschaft klar definiert. Sie gibt die Reihenfolge der Controls an, wenn mit der Tab-Taste z.B. in einer Userform gesprungen wird. Hast du also z.B. 3 TextBoxen so bestimmt der TabIndex welche Textbox den Fokus zuerst bekommt und welche als nächstes.
GreetZ Renée

Anzeige
AW: Gibt es Arrays von Steuerelementen?
19.04.2008 12:27:41
Steuerelementen?
Hi,
in VB gibt es die Control-Arrays, wobei Textbox1(0) aber auch Textbox1.Item(0) verwendet
werden kann. Da Item default ist, kann es auch wegfallen.
mfg Kurt

AW: Gibt es Arrays von Steuerelementen?
19.04.2008 13:17:00
Steuerelementen?
Hi, vielen Dank für eure Antworten.
Nun zu deiner interessanten Antwort, Renee.
1. Du schreibst, du wüsstest nicht genau, was ich mit der Item-Eigenschaft meine. Vielleicht ist der Begriff
"Eigenschaft" hier irreführend, doch Controls eines Rahmens lassen sich in Excel mit "Frame.Controls.Item(0)" usw durchaus ansprechen. Ich vermute aber, dass dies nur eine andere Schreibweise für "Frame.Controls(0)" usw.
ist. Jedenfalls kann man so z.B. Textfelder innerhalb eines Rahmens befüllen.
2. Du schreibst, dass sich Tabindex auf die Reihenfolge beim Anspringen der Controls bezieht. Wenn ich
also die Reihenfolge beim Anspringen der Controls verändere, ändert sich auch der Tabindex dieser Controls. Spielt es dabei eine Rolle, ob sich diese innerhalb eines Rahmens befinden, d.h. werden die Controls innerhalb des Rahmens zusammen mit denen ausserhalb des Rahmens und mit denen in anderen Rahmen oder nach Rahmen getrennt durchnumeriert?
Noch mal vielen Dank für deine und eure bei dieser Frage sehr hilfreichen Antworten!
Mein eigentliches Problem war, Textfelder in einer Userform aus einer Excel-Tabelle mit Hilfe einer
Schleife mit Inhalt zu befüllen. Doch dazu musste ich die Laufvariable der Schleife irgendwie in
den Makro einbauen. So entstand die Frage nach dem "Control-Array". Doch eine Stringverkettung
tut es ja genauso, und eigentlich braucht man die zu befüllenden Textfelder ja gar nicht in einen
Rahmen zu packen, um sie über eine Schleife anzusprechen, über die Stringverkettung geht es
offenbar genauso gut.
Grüße, Werner

Anzeige
AW: Gibt es Arrays von Steuerelementen?
19.04.2008 16:38:03
Steuerelementen?
Hi Werner,
Ich hab halt manchmal etwas Mühe mit den deutschen Begriffen ;-) und bei Rahmen ist mir Frame schlicht nicht in den Sinn gekommen. Ja auf das Frame-Controls gibt es die .Item Methode und die macht nichts anderes als: Returns a member of a collection, either by position or by name.
Sie gibt also das Steuerelement, welches als Name oder als Index (position) angegebene wird zurück.
Diese Methode lässt sich auch auf Pages- & Tab-Steuerelemente anwenden.
Zu deiner Frage bezg. .TabIndex: Die Controls innerhalb eines Frames haben eine von aussenliegenden Steuerelementen unabhängige Nummerierung. Der .TabIndex des Frames wiederum ist Bestandteil der aussenliegenden Controls.
GreetZ Renée

Anzeige
AW: Gibt es Arrays von Steuerelementen?
19.04.2008 16:57:00
Steuerelementen?
Hallo zusammen,
und dann noch dies.

Sub Befuellung()
Dim i As Integer
For i = 1 To 10
Debug.Print Userform01.Rahmen01.Controls.Item(i).Name
Next i
End Sub



Sub Befuellung_erste_Controlsebene()
Dim i As Integer
For i = 1 To Userform01.Controls.Count
Debug.Print Userform01.Controls(i).Name
Next i
End Sub


Grüße Gerd

AW: Gibt es Arrays von Steuerelementen?
20.04.2008 13:58:28
Steuerelementen?
Vielen Dank an euch alle!
ich verstehe die Steuerelemente und deren Numerierung nun etwas besser.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige