Mehrere Textfelder gleichzeitig ansprechen

Hallo,
ich habe 20 Textfelder in meinem Excel Sheet und muss nun bei jedem abfragen ob eine Null (oder Nichts) eingegeben wurde oder nicht.
Da ich so eine sehr lange If Abfrage bekomme, habe ich mir gedacht, dass Ganze mit einer for Schleife zu durchlaufen, und über den Index i das jeweilige Textfeld anzusprechen.
Hab versucht den String „Texfeld“ mit dem Index i zu verbinden und über die Methode Value den Wert abzufragen, aber das funktioniert nicht.

Weiss jemand wie ich das anders machen könnte?

Danke.

Grüssle
Johanna

Hi Johanna,
um Mißverständnissen vorzubeugen: meinst du richtige Textfelder oder die Zellen von Excel?
Wenn du Textfelder meinst: vergib Indizes. Nenne sie alle z.B. „Text1“ und ändere die Index-Eigenschaft auf 1, 2, 3…20. Dann kannst du eine Schleife machen.
Ich hoffe, das geht in Excel so…

MfG
Julia

Hallo Johanna.

Dafür hättest Du mehrere Möglichkeiten:

Möglichkeit 1:
Du könntest ein eindimensionales Datenfeld erstellen mit der gleichen Anzahl Felder wie TextBoxen auf Deinem Tabellenblatt vorhanden sind. Folgende Schritte wären dafür notwendig:

  • gehe über das Menü „Einfügen“ auf „Modul“

  • schreibe in den Deklarationsabschnitt des Modul-Code-Fensters folgenden Code:

    Public MeinDatenfeld(1 To 20) As Variant

Dann müsstest Du für TextBox1 folgenden Code programmieren:

Private Sub TextBox1\_Change()
 MeinDatenfeld(1) = TextBox1.Text
End Sub

Diesen Code müsstest Du dann entsprechend für alle 20 TextBoxen schreiben.
Danach kannst Du, um die eingetragenen Werte zu überprüfen, das Datenfeld in einer Schleife durchlaufen:

For a = 1 to 20
 If MeinDatenfeld(a) = "" Then
 'Code
 End If
 If MeinDatenfeld(a) = 0 Then
 'Code
 End If
Next

Möglichkeit 2:
Du verwendest das folgende Code-Prinzip:

Private Sub CommandButton1\_Click()
'Alle Textboxen auf einem Tabellenblatt
'der Button zum Auslösen dieser Prozedur befindet sich in diesem Beispiel auch auf der Tabelle
 Dim shp As Shape
 For Each shp In Me.Shapes
 If shp.Type = msoOLEControlObject Then '12 = msoOLEControlObject 'Kontrolle ob: OLE
 If shp.OLEFormat.progID Like "\*TextBox\*" Then ''Kontrolle ob: TextBox
 If shp.OLEFormat.Object.Object.Text = 0 Then
 MsgBox "In " & shp.OLEFormat.Object.Name & " steht eine 0"
 End If
 If shp.OLEFormat.Object.Object.Text = "" Then
 MsgBox "In " & shp.OLEFormat.Object.Name & " steht nix"
 End If
 End If
 End If
 Next
End Sub

Viele Grüße
Carsten

Hey Carsten,
des funktioniert ja Supi!

Allerdings weiss ich gar net genau was ein msoOLEControlObject genau ist, sind das sämtliche Steuerelemente auf dem Tabellenblatt, die dann abgearbeitet werden?

Was spricht man denn genau mit OLEFormat.Object.Object an, das Objekt selber ?

Also dankeschön!

Grüsse
Johanna

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Johanna.
Bitte überschätze meine Fähigkeiten nicht. So genau kann ich Dir das auch alles nicht erklären. Der Code für ‚Möglichkeit 2‘ ist nicht zu 100 % von mir, da hatte ich selber mal Hilfe. Ist sogar noch nicht mal so lange her.

Wirklich professionelle Hilfe kannst Du hier erhalten:

http://www.activevb.de/startseite/index.html

Da sitzen die Profis.

Viele Grüße
Carsten