Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Index-Nr. für Objekte in Userform

Forumthread: Index-Nr. für Objekte in Userform

Index-Nr. für Objekte in Userform
David
Hallo, ich schon wieder... ;-)
laut Hilfe hat wohl jedes Objekt einer UF eine Index-Nummer, so dass ich die mit einer Schleife abarbeiten könnte. Wo aber finde ich die Index-Nummer für jedes Objekt? In den Eigenschaften jedenfalls nicht.
Danke und Gruß
David
Anzeige
AW: Index-Nr. für Objekte in Userform
28.10.2009 13:00:19
JogyB
Hi.
Meinst Du TabIndex?
Was willst Du mit der denn machen?
Gruss, Jogy
AW: Index-Nr. für Objekte in Userform
28.10.2009 13:32:29
David
Hallo Jogy,
ich habe mehrere Eingabefelder (Textboxen), die möchte ich auf eine bestimmte Bedingung des eingegebenen Textes prüfen. Damit ich nicht für jede Textbox einzeln ein If... konstruieren muss, wollte ich die per For-Next-Schleife durchlaufen lassen.
Gruß
David
PS: Dummerweise finde ich den Hilfe-Eintrag nicht mehr, wo ich das gelesen hatte... :-(
Anzeige
AW: Index-Nr. für Objekte in Userform
28.10.2009 14:22:25
JogyB
Hi.
Wenn die z.B. TextBox1 bis TextBox9 heissen:
For i = 1 To 9
Me.Controls("TextBox" & i).Value = i
Next
Den Index den Du meinst gibt es meines Wissens nur in VB, aber nicht in VBA.
Gruss, Jogy
AW: Index-Nr. für Objekte in Userform
28.10.2009 15:34:49
David
Das hilft leider nicht, da die Textboxen selbst verschiedene Namen haben und keine Nummer tragen.
Gruß
David
Anzeige
AW: Index-Nr. für Objekte in Userform
28.10.2009 17:41:57
JogyB
Hi.
Dann benenn die Textboxen um, deren Name ist ja frei wählbar. Der erste wichtige Schritt beim Aufbau einer UF ist immer eine Struktur, die eine gewisse Automatisierung zulässt. Ohne das wirst Du wahnsinnig.
Selbst mit dem Index von VB kämst Du anders nicht weiter, da dort dann alle TextBoxen denselben Namen hätten und sich nur den Index unterscheiden.
Ein Alternative wäre noch, alle Controls durchzugehen und nur mit den Textboxen irgendwelche Operationen durchzuführen:
Dim myCtl As Control
For Each myCtl In UserForm1.Controls
If TypeOf myCtl Is MSForms.TextBox Then
myCtl.Value = Now
End If
Next

Das kannst Du natürlich um weitere Prüfungen ergänzen, damit Du nur die Textboxen erwischst, die Du haben willst.
Oder Du packst am Anfang alle relevanten Textboxen in eine Collection, dann kannst Du die danach wieder abrufen. Dann hast Du den Aufwand wenigstens nur ein Mal.
Dim myCol As New Collection
Private Sub CommandButton1_Click()
Dim myCtl As Control
For Each myCtl In myCol
myCtl.Value = Now
Next
End Sub
Private Sub UserForm_Initialize()
With Me
myCol.Add .TextBox1
myCol.Add .TextBox5
myCol.Add .TextBox7
End With
End Sub
Gruss, Jogy
Anzeige
AW: Index-Nr. für Objekte in Userform
29.10.2009 07:52:12
David
Hallo Jogy,
ich hatte die Textbox-Namen nach Inhalt vergeben, um nicht immer nachschauen zu müssen, um welche es sich denn handelt. Deine Hinweise sind natürlich richtig.
Da es sich in dem Fall um meine erste vollständige UF handelt, buch ich das unter "Anfänger-Fehler".
Mir ging es in diesem Fall zum Beispiel darum, die 10 Textboxen, die ich habe darauf zu prüfen, ob tatsächlich eine Zahl eingetragen wurde und nicht etwa Text, was im Code dann natürlich zu Fehlern führt.
Vorerst habe ich diese Prüfung außen vor gelassen und "vertraue" auf die User, dass die richtigen Daten eingegeben werden. Einige andere Plausibilitätsprüfungen habe ich jedenfalls eingebaut.
Danke und Gruß
David
Anzeige
AW: Index-Nr. für Objekte in Userform
28.10.2009 14:26:35
Peter
Hallo David,
das ginge z. B. so:
Option Explicit
Private Sub CommandButton1_Click()
Dim iIndx  As Integer
For iIndx = 1 To 7
If Trim(Controls("TextBox" & iIndx)) = "" Then
MsgBox "Bitte auch die TextBox" & iIndx & " ausfüllen - danke", _
16, "   Hinweis für " & Application.UserName
Exit For
End If
Next iIndx
End Sub
Gruß Peter
Anzeige
AW: Index-Nr. für Objekte in Userform
28.10.2009 15:36:10
David
Hallo Peter,
wie schon im anderen Post, geht leider so nicht, da die Textboxen keine Nummern tragen.
Trotzdem danke, die Sache mit dem Controls(textbox-name) kann ich an anderer Stelle gut gebrauchen.
Gruß
David
Anzeige
Anzeige

Infobox / Tutorial

Index-Nr. für Objekte in Userform in Excel VBA


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Öffne Excel und erstelle eine neue UserForm. Füge mehrere TextBoxen hinzu, die du später überprüfen möchtest.

  2. TextBoxen benennen: Vergib sinnvolle Namen für die TextBoxen (z.B. TextBox1, TextBox2, ...), um die spätere Identifikation zu erleichtern.

  3. For-Next-Schleife einrichten: Verwende eine For-Next-Schleife, um die TextBoxen durchzugehen. Hier ein einfaches Beispiel:

    Private Sub CommandButton1_Click()
       Dim i As Integer
       For i = 1 To 10 ' Anzahl der TextBoxen
           If Me.Controls("TextBox" & i).Value = "" Then
               MsgBox "TextBox" & i & " ist leer."
           End If
       Next i
    End Sub
  4. Prüfung implementieren: Füge innerhalb der Schleife die Logik hinzu, um zu prüfen, ob die Eingaben korrekt sind, z.B. ob eine Zahl eingegeben wurde.


Häufige Fehler und Lösungen

  • Fehler: TextBoxen haben keine Nummern: Stelle sicher, dass du die TextBoxen benennst, um sie in der Schleife korrekt anzusprechen. Wenn du sie nach Inhalt benennst, kann das die Identifikation erschweren.

  • Probleme mit der Schleifenstruktur: Achte darauf, dass die Schleifenvariable korrekt definiert ist und dass du die richtige Anzahl der TextBoxen angibst.

  • Index-Fehler: Der Index, den du suchst, existiert in VBA nicht wie in VB. Stattdessen musst du die TextBoxen über ihre Namen ansprechen.


Alternative Methoden

Eine alternative Methode ist, alle relevanten TextBoxen in einer Collection zu speichern. So kannst du sie gezielt ansprechen:

Dim myCol As New Collection

Private Sub CommandButton1_Click()
    Dim myCtl As Control
    For Each myCtl In myCol
        If myCtl.Value = "" Then
            MsgBox myCtl.Name & " ist leer."
        End If
    Next
End Sub

Private Sub UserForm_Initialize()
    With Me
        myCol.Add .TextBox1
        myCol.Add .TextBox2
        myCol.Add .TextBox3
    End With
End Sub

Praktische Beispiele

  • Beispiel 1: Überprüfung der Eingaben in mehreren TextBoxen.
Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim isValid As Boolean
    isValid = True
    For i = 1 To 10
        If Not IsNumeric(Me.Controls("TextBox" & i).Value) Then
            MsgBox "Bitte gebe eine Zahl in TextBox" & i & " ein."
            isValid = False
            Exit For
        End If
    Next i
    If isValid Then MsgBox "Alle Eingaben sind korrekt!"
End Sub
  • Beispiel 2: Automatisches Befüllen der TextBoxen.
Private Sub CommandButton1_Click()
    Dim i As Integer
    For i = 1 To 10
        Me.Controls("TextBox" & i).Value = i * 10 ' Beispiel: Multiplikation
    Next i
End Sub

Tipps für Profis

  • Verwende Collections: Das Speichern von Controls in einer Collection macht deinen Code flexibler und übersichtlicher.

  • Dokumentation lesen: Schau dir die offizielle Excel VBA-Dokumentation an, um mehr über die Verwendung von Controls und deren Eigenschaften zu erfahren.

  • Debugging: Nutze die Debugging-Tools von VBA, um Probleme schnell zu identifizieren.


FAQ: Häufige Fragen

1. Wo finde ich die Index-Nummer für Objekte in einer UserForm?
In VBA gibt es keine Indexnummer wie in VB. Du musst die Controls über ihre Namen ansprechen.

2. Was tun, wenn die TextBoxen keine Nummern haben?
Benenne die TextBoxen sinnvoll, um sie leichter im Code anzusprechen. Alternativ kannst du auch Collections verwenden.

3. Wie kann ich sicherstellen, dass nur Zahlen eingegeben werden?
Du kannst die Eingaben in einer Schleife überprüfen und sicherstellen, dass die Werte numerisch sind, bevor du sie weiterverarbeitest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige