Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Check ob Controls(Name) in Userform

Forumthread: Check ob Controls(Name) in Userform

Check ob Controls(Name) in Userform
04.05.2009 19:32:15
Michel
Hallo und Danke für die vielen Anregungen, die ich bisher bekommen habe.
Mein Problem ist, dass ich Den Wert von Controls(Name) aus einer Userform auslesen möchte.
Die Namen meiner Controls habe ich zusammengesetzt.
chkKanal1 chkKanal2 chkKanal3
chkKenn101 chkKenn201 chkKenn301
chkKenn102 chkKenn202 chkKenn302
chkKenn103 chkKenn203
usw.
Über Controls(chkKennxyy).Value kann ich auf den Wert zugreifen. Leider sind die Felder nicht gleich groß wie z.B. bei chkKenn301.
Bis dato habe ich aus Unwissenheit die Größe der Felder im ersten Element unter chkKennx01.Tag "versteckt". Das klappt auch ganz gut. Ist aber unelegant.
Gibt es eine Möglichkeit festzustellen ob Controls(Name) in der Userform vorkommt?
Der Aufruf von
If (Not Controls(Name) is Nothing) then
bringt schon einen Fehler, wenn Name nicht existiert!
Ich will auch nicht alle Controls der Userform durchlaufen, um die Existenz von Controls(Name) festzustellen.
' ............................................
' einige Variablen sind Global gesetzt
Dim chkstr As String
Dim j As Integer
Dim k As Integer
Dim iKtrl As Integer
For i = 1 To 17 ' merker reset
mKenn(i) = False
Next i
For Each cnt In Controls 'durchlaufe alle controls auf der userform
If (Left(cnt.Name, 3) = "chk") Then ' ist im Namen chk
If (Left(cnt.Name, 8) = "chkKanal") And (cnt.Value 0) Then ' ist die CheckBox gesetzt
kastr = Mid(cnt.Name, 10, 2) ' Index rausfiltern
ka = Val(kastr)
For j = 1 To 5 'jetzt schauen ob ob mind. eine der dazugehörenden Checkboxen gesetzt wurde
If j > Controls("chkKenn" & kastr & "1").Tag Then Exit For 'meine Hilfslösung
jstr = Format(j, "0")
chkstr = "chkKenn" & kastr & jstr ' Name zusammensetzen
' If (Not Controls(chkstr) Is Nothing) Then ' das geht nicht
kstr = Controls(chkstr).Name 'Test Zuweisung
kennv = Controls(chkstr).Value ' Test Zuweisung
If kennv = True Then mKenn(ka) = True 'wenn wenigstens eine Checkbox gesetzt wurde dann Merker setzen
' Debug.Print " Next j
If mKenn(ka) = False Then 'wenn keine Checkbox gesetzt wurde Meldung
MsgBox "Keine Werte in Zeile:" & kastr & " ausgewählt!"
Exit Sub
End If
End If
End If
Next cnt
Danke für eine Denkanstoss!
Michel
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Check ob Controls(Name) in Userform
04.05.2009 22:23:25
ransi
HAllo
Du brauchst nicht alle Elemente ablaufen.
Wenn es das Control nicht gibt, läuft diese Function in einen Fehler.
Den kannst du auswerten:
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Sub UserForm_Click()
MsgBox ControlExists("CommandButton1")
End Sub

Public Function ControlExists(contrName As String) As Boolean
Dim obj As Control
On Error Resume Next
Set obj = Me.Controls(contrName)
If obj Is Nothing Then
    ControlExists = False
    Err.Clear
    Exit Function
    Else:
    ControlExists = True
End If
End Function

ransi
Anzeige
Check ob Controls(Name) in Userform
05.05.2009 11:30:57
mICHel
@ransi: DANKE!
;
Anzeige
Anzeige

Infobox / Tutorial

Überprüfung von Controls in einer Excel Userform mit VBA


Schritt-für-Schritt-Anleitung

Um herauszufinden, ob ein Control in einer Excel Userform vorhanden ist, kannst du eine Funktion erstellen, die den Namen des Controls als Argument entgegennimmt. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Füge in deinem Userform-Modul die folgende Funktion ein:

    Public Function ControlExists(contrName As String) As Boolean
       Dim obj As Control
       On Error Resume Next
       Set obj = Me.Controls(contrName)
       If obj Is Nothing Then
           ControlExists = False
           Err.Clear
           Exit Function
       Else
           ControlExists = True
       End If
    End Function
  3. Um die Funktion zu verwenden, rufe sie im Code deiner Userform auf, zum Beispiel:

    MsgBox ControlExists("CommandButton1")

Die Funktion gibt True zurück, wenn das Control existiert, andernfalls False.


Häufige Fehler und Lösungen

  • Fehler: "Objektvariable oder With-Blockvariable nicht gesetzt"

    • Dieser Fehler tritt auf, wenn du versuchst, auf ein Control zuzugreifen, das nicht existiert. Verwende die ControlExists-Funktion, um diese Situation zu vermeiden.
  • Fehler: "Typen unverträglich"

    • Dies kann passieren, wenn du versuchst, eine Variable vom falschen Typ zu verwenden. Stelle sicher, dass du die richtigen Datentypen für deine Variablen und Controls verwendest.

Alternative Methoden

Eine weitere Möglichkeit, um die Existenz eines Controls zu überprüfen, besteht darin, alle Controls der Userform zu durchlaufen. Dies ist jedoch weniger effizient und wird nicht empfohlen, wenn du nur die Existenz eines bestimmten Controls prüfen möchtest. Hier ist ein Beispiel:

Dim ctrl As Control
Dim exists As Boolean
exists = False

For Each ctrl In Me.Controls
    If ctrl.Name = "CommandButton1" Then
        exists = True
        Exit For
    End If
Next ctrl

MsgBox exists

Praktische Beispiele

Hier ist ein Beispiel, wie du die ControlExists-Funktion in deiner Userform verwenden kannst:

Private Sub UserForm_Click()
    If ControlExists("chkKanal1") Then
        MsgBox "Das Control chkKanal1 existiert!"
    Else
        MsgBox "Das Control chkKanal1 existiert nicht."
    End If
End Sub

In diesem Beispiel wird überprüft, ob die Checkbox chkKanal1 existiert, und eine entsprechende Nachricht angezeigt.


Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Tippfehler zu vermeiden und sorgt dafür, dass alle Variablen deklariert werden.
  • Fehlerbehandlung optimieren: Anstatt nur On Error Resume Next zu verwenden, kannst du spezifische Fehlerbehandlungen einbauen, um effektiver mit Problemen umzugehen.
  • Struktur der Controls: Halte die Struktur deiner Controls klar und konsistent, um die Verwaltung und den Zugriff zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich alle Controls meiner Userform auflisten?
Du kannst eine Schleife verwenden, um alle Controls durchzugehen und deren Namen anzuzeigen:

Dim ctrl As Control
For Each ctrl In Me.Controls
    Debug.Print ctrl.Name
Next ctrl

2. Was ist der Unterschied zwischen Me.Controls und UserForm.Controls?
Me.Controls verweist auf die Controls der aktuellen Userform, während UserForm.Controls explizit auf die Controls einer bestimmten Userform verweist. Beide sind jedoch in den meisten Fällen austauschbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige