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

Forumthread: Controls in Userform im Editor löschen

Controls in Userform im Editor löschen
Reinhard
Hallo Wissende,
in einer Fremdmappe ist eine Userform. Darauf sind so ca. 40 Elemente. Die sollen auch so sein.
Zählt man aber mit
Msgbox Me.Controils.count die Anzahl erschein 950.
Ich habe mir dann alle Top, Left usw Werte dieser Elemente auflisten lassen.
Dabei kam heraus das
TextBox9
TextBox29
TextBox49
usw. die gleiche Position und Größe haben und das 20 mal. Da da ca. 20 Textboxen sind ergibt das schon mal 400 Elemente. Dann gibts aber auch gleichviele label, das wären dann schon mal 800 Elemente zusammen, so gesehen ist die 950 erklärlich.
Der Ersteller beteuert er habe beim Erstellen der Userform schon Elemente eingefügt, dann aber wieder gelöscht und neu eingefügt.
Meine erste Frage an euch, kann man erraten welchen "Fehler" er da begangen haben könnte?
denn wenn ich z.B. eine TB einfüge so ist das TextBox1. Lösch ich die und füge erneut eine TB ein so heißt die TextBox2 *glaub*. Aber wenn ich dann mit Me.Controls.Count zähle kommt eine 1 raus.
Meine zweite Frage (für mich viel wichtiger) gibt es eine Möglichkeit durch Vba da die unnötigen Elemente zu entfernen?
Zur Laufzeit kann ich das inzwischen aber das meine ich nicht.
Angedacht habe ich dazu, man exportiert die UF und ändert dann die .frm ab. Geht das? Wie?
Ein aktuelles Problem ist das nicht, ich habe ihm schon gesagt er soll die UF halt neu aufbauen und bestücken.
Ansonsten Carpe diem
Schönes WE
Gruß
Reinhard
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Controls in Userform im Editor löschen
01.10.2011 15:51:07
Hajo_Zi
Hallo Reinhard,
ich vermute mal da gibt es kein Tool. Woher soll das Tool wissen welche der 20 übereinanderliegenden Textbox Du behalten möchtest? Es könnte ja auch Steuerelemente geben die mit keinem Code belegt sind.

Anzeige
AW: Controls in Userform im Editor löschen
01.10.2011 15:53:05
Tino
Hallo,
wenn ich eine Textbox kopiere und mit Strg+v mehrmals drücke habe ich in Windeseile 100 Textboxen übereinander auf derselben Stelle.
Kannst mal diesen Code testen, den Namen der Userform im Code noch anpassen.
Dem Zugriff auf VBA Projekte muss vertraut werden!
kommt als Code in Modul

Option Explicit 
Sub ControlsUmbenennen() 
Dim i As Integer 
Dim oDic As Object 
Set oDic = CreateObject("Scripting.Dictionary") 
 
With ThisWorkbook.VBProject.VBComponents("Userform1").Designer.Controls 
    For i = .Count - 1 To 0 Step -1 
     If LCase(TypeName(.Item(i))) = "textbox" Then 
        If Not oDic.exists(.Item(i).Top & "-" & .Item(i).Left) Then 
            oDic(.Item(i).Top & "-" & .Item(i).Left) = 0 
        Else 
            .Remove .Item(i).Name 
        End If 
     End If 
    Next i 
End With 
End Sub 
Gruß Tino
Anzeige
Hajo hat mich noch auf die Idee gebracht
01.10.2011 16:07:00
Tino
Hallo,
alle Textboxen die keinen Code haben zu löschen.
Normalerweise beginnt jeder Code von einem Control so z.Bsp.
Private Sub TextBox1_ diesen Text suche ich, ist dieser nicht im Code wird diese Textbox gelöscht.

Sub ControlsLoeschen()
Dim i As Integer
Dim oDic As Object
Set oDic = CreateObject("Scripting.Dictionary")
Dim strCode$
With ThisWorkbook.VBProject.VBComponents("Userform1")
    strCode = .CodeModule.Lines(1, .CodeModule.CountOfLines)
    With .Designer.Controls
        For i = .Count - 1 To 0 Step -1
         If LCase(TypeName(.Item(i))) = "textbox" Then
            If InStr(strCode, "Private Sub " & .Item(i).Name & "_") = 0 Then
                .Remove .Item(i).Name
            End If
         End If
        Next i
    End With
End With
End Sub
Gruß Tino
Anzeige
Dankeschön
02.10.2011 11:19:46
Reinhard
Hallo Tino,
danke dir, ja es funktioniert :-)
Dank auch an Hajo & Luc
Gruß
Reinhard
Naja, Hajo hat recht, das geht schnell, und ...
01.10.2011 20:45:52
Luc:-?
…besonders hartnäckig sind dabei in Frames „verloren” gegangene (verrutschte) Controls. Allerdings wdn doch alle im VBE als potenzielle Code-Container angezeigt. Das hätte dem Autor eigentl auffallen müssen!
Gruß Luc :-?
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Userform-Controls in Excel VBA effizient verwalten


Schritt-für-Schritt-Anleitung

Um unnötige Controls in einer Userform zu löschen, kannst Du den folgenden VBA-Code verwenden. Dieser Code zählt die Controls, die in der Userform vorhanden sind, und entfernt Duplikate basierend auf ihrer Position.

  1. Öffne den VBA-Editor (ALT + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" → Einfügen → Modul).
  3. Kopiere und füge den folgenden Code in das Modul ein:
Option Explicit 

Sub ControlsUmbenennen() 
    Dim i As Integer 
    Dim oDic As Object 
    Set oDic = CreateObject("Scripting.Dictionary") 

    With ThisWorkbook.VBProject.VBComponents("Userform1").Designer.Controls 
        For i = .Count - 1 To 0 Step -1 
            If LCase(TypeName(.Item(i))) = "textbox" Then 
                If Not oDic.exists(.Item(i).Top & "-" & .Item(i).Left) Then 
                    oDic(.Item(i).Top & "-" & .Item(i).Left) = 0 
                Else 
                    .Remove .Item(i).Name 
                End If 
            End If 
        Next i 
    End With 
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus.

Häufige Fehler und Lösungen

  • Fehler: Die Anzahl der Controls ist höher als erwartet.

    • Lösung: Überprüfe, ob Duplikate vorhanden sind. Der Code oben entfernt diese basierend auf Position und Größe.
  • Fehler: Controls werden nicht gelöscht.

    • Lösung: Stelle sicher, dass Du Zugriff auf das VBA-Projekt hast. Aktiviere in den Excel-Optionen unter "Trust Center" die Option "Zugriff auf das VBA-Projekt vertrauen".

Alternative Methoden

Wenn der oben genannte Code nicht ausreicht oder Du eine andere Methode ausprobieren möchtest, kannst Du die Userform auch manuell bearbeiten:

  1. Exportiere die Userform als .frm-Datei.
  2. Öffne die .frm-Datei in einem Texteditor.
  3. Suche nach den Duplikaten und lösche die entsprechenden Zeilen.
  4. Importiere die bearbeitete .frm-Datei zurück in den VBA-Editor.

Praktische Beispiele

Hier ist ein weiteres Beispiel, um Controls zu löschen, die keinen zugehörigen Code haben. Dies ist besonders nützlich, um "verlorene" Controls zu entfernen, die keine Funktionalität besitzen.

Sub ControlsLoeschen()
    Dim i As Integer
    Dim strCode$
    With ThisWorkbook.VBProject.VBComponents("Userform1")
        strCode = .CodeModule.Lines(1, .CodeModule.CountOfLines)
        With .Designer.Controls
            For i = .Count - 1 To 0 Step -1
                If LCase(TypeName(.Item(i))) = "textbox" Then
                    If InStr(strCode, "Private Sub " & .Item(i).Name & "_") = 0 Then
                        .Remove .Item(i).Name
                    End If
                End If
            Next i
        End With
    End With
End Sub

Tipps für Profis

  • Verwendung von Me.Controls: Nutze Me.Controls in Deinen Userform-Codes, um auf Controls zuzugreifen und deren Eigenschaften dynamisch zu ändern.
  • Verwalte Deine Userform regelmäßig: Überprüfe regelmäßig auf unnötige Controls, um die Performance zu verbessern.
  • Dokumentation: Halte eine Dokumentation über alle Controls und deren Funktionen, um die Übersichtlichkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie viele Controls kann ich in einer Userform haben?
Es gibt keine feste Obergrenze, aber eine hohe Anzahl kann die Performance beeinträchtigen. Halte Deine Userform so schlank wie möglich.

2. Was kann ich tun, wenn ich versehentlich ein wichtiges Control lösche?
Wenn Du eine Sicherung der Userform hast, kannst Du sie zurück importieren. Andernfalls kannst Du die Userform möglicherweise manuell rekonstruieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige