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

Forumthread: Labels in einer UF löschen

Labels in einer UF löschen
26.07.2018 17:37:51
Herbert
Hallo,
mit dem nachfolgenden Code erstelle ich zur Laufzeit in einer MultiPage einer UF eine Liste mit Labels. Da ich in der UF, auf einer anderen Seite, u. a. auch vorh. Artikel löschen kann, möchte ich die aufgelisteten Labels auf dieser Seite, während der Laufzeit, wieder löschen können, um sie anschließend wieder neu aufzubauen, da dann ja ein oder mehrere Artikel weniger aufgelistet werden müssen. Wenn ich jetzt einen Artikel lösche, bleibt mir auf dieser Seite der letzte Artikel immer doppelt aufgelistet, weil ich die vorige Auflistung nicht entfernt habe. Wie kann ich die vorherige Auflistung löschen?
Vielen Dank im Voraus
Servus
With Tab2_ArtikelListe
For iCount = 1 To 25
Set sTb = MultiPage1.Pages(3).Controls.Add("Forms.Label.1", "lbl_Artikel" & iCount)
Controls("lbl_Artikel" & iCount).Caption = .Range("A" & iCount + 1).Value
Controls("lbl_Artikel" & iCount).ZOrder (0)
Next iCount
End With
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Labels in einer UF löschen
26.07.2018 17:58:29
Mullit
Hallo,
im Prinzip so:
Option Explicit

Public Sub test()
   Dim lngIndex As Long
   For lngIndex = 0 To MultiPage1.Pages(3).Controls.Count - 1
       If TypeOf Controls(lngIndex) Is MSForms.Label Then _
          Call Controls.Remove(lngIndex)
   Next
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Labels in einer UF löschen
26.07.2018 18:03:55
Mullit
Hallo,
ach ja übrigens, hast nur die Labels auf der Page, dann einfach so... ;-)
Option Explicit

Public Sub test()
   Call Controls.Clear
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Labels in einer UF löschen
26.07.2018 18:05:51
Mullit
Hallo nochmal,
uups so einfach doch nich, muß die Hitze sein...;-)
Option Explicit

Public Sub test()
   Call MultiPage1.Pages(3).Controls.Clear
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Labels in einer UF löschen
26.07.2018 18:10:48
Herbert
Hallo,
vielen Dank für Deine Hilfe. Doch wenn ich mich nicht irre, ruft man mit "Call..." eine andere Routine auf. Doch hast Du mir keine weitere Routine mitgegeben. Jedenfalls steigt er bei mir bei beiden Varianten aus. Oder habe ich da was übersehen?
Servus
AW: Labels in einer UF löschen
26.07.2018 18:15:49
Mullit
Hallo,
nein mit der Call-Anw. ruft man generell Methoden auf, auch Application-eigene...
Da sind ja nur Bsp.-Schnipsel, pack die Inhalte der Test-Subs z.B. in einen CommandButton auf Deiner zweiten Page...
Gruß, Mullit
Anzeige
AW: Labels in einer UF löschen
26.07.2018 18:23:44
Herbert
Hallo,
ich will das er alle vorh. Labels beim erneuten Aufruf der Page3 löscht und anschließend die aktuellen wieder einfügt. Das Einfügen ist klar. nur das löschen nicht.
Fehlermeldung: Laufzeitfehler 444: Steuerelemente können nicht gelöscht werden. Diese Methode kann in diesem Zusammenhang nicht verwendet werden.
Servus
Anzeige
AW: Labels in einer UF löschen
26.07.2018 18:37:24
Mullit
Hallo,
Fehlermeldung: Laufzeitfehler 444: Steuerelemente können nicht gelöscht werden.
Diese Methode kann in diesem Zusammenhang nicht verwendet werden.

ah ja dann hast Du da auch Labels drin, die nicht zu Laufzeit erstellt wurden, dann muß Du anders proggen:
Option Explicit

Public Sub test()
   Const LAB_NAME As String = "lbl_Artikel"
   Dim lngIndex As Long
   With MultiPage1.Pages(3)
        For lngIndex = 0 To .Controls.Count - 1
            If TypeOf .Controls(lngIndex) Is MSForms.Label Then _
               If Left$(String:=.Controls(lngIndex).Name, Length:=Len(LAB_NAME)) = LAB_NAME Then _
                        Call .Controls.Remove(lngIndex)
        Next
   End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

....Das ganze dann ins Aktivierungs-Event der Page....
Gruß, Mullit
Anzeige
AW: Labels in einer UF löschen
26.07.2018 18:19:22
Mullit
Hallo,
Jedenfalls steigt er bei mir bei beiden Varianten aus.

...wenn's immmer noch nicht klappt, was genau heißt das ? ... Fehlermeldung, Fehlernr., Fehlerbeschr. wären da hilfreich...
Gruß, Mullit
AW: Labels in einer UF löschen
26.07.2018 18:25:03
Mullit
Hallo,
im ersten Bsp. hat ich einen Fehler drin, war falsch referenziert, argh...
Option Explicit

Public Sub test()
   Dim lngIndex As Long
   With MultiPage1.Pages(3)
        For lngIndex = 0 To .Controls.Count - 1
            If TypeOf .Controls(lngIndex) Is MSForms.Label Then _
               Call .Controls.Remove(lngIndex)
        Next
   End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Labels in einer UF löschen
26.07.2018 18:27:25
Herbert
Sorry, aber auch hier kommt wieder die gleiche Fehlermeldung.
AW: Labels in einer UF löschen
26.07.2018 18:38:42
Mullit
Hallo,
yup, siehe oben in den Threads...
Gruß, Mullit
AW: Labels in einer UF löschen
26.07.2018 18:43:22
Nepumuk
Hallo Herbert,
ein Beispiel:
Option Explicit

Private Sub UserForm_Click()
    Dim iCount As Long
    For iCount = 1 To 25
        Call MultiPage1.Pages(3).Controls.Remove("lbl_Artikel" & iCount)
    Next
End Sub

Private Sub UserForm_Initialize()
    Dim iCount As Long
    Dim sTb As MSForms.Label
    For iCount = 1 To 25
        Set sTb = MultiPage1.Pages(3).Controls.Add("Forms.Label.1", "lbl_Artikel" & iCount)
        With sTb
            .Caption = Tab2_ArtikelListe.Range("A" & iCount + 1).Value
            Call .ZOrder(0)
        End With
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Labels in einer UF löschen
26.07.2018 18:51:11
Mullit
Hallo Nepumuk,
top!, argh ja klar man kann ja auch mit dem Namen 'removen', ich glaub bei der Hitze mach ich heut nix mehr....:-(
Gruß, Mullit
AW: Labels in einer UF löschen
26.07.2018 18:54:14
Herbert
Hallo Nepumuk,
vielen Dank für Deine LÖSUNG!!! Ich habe die "...click"-Variante probiert und sie hat auf Anhieb geklappt! Die Zweite habe ich dann gar nicht mehr getestet. Aber ich denke, sie hätte auch gefunzt! Nochmals vielen Dank!
@Mullit: Trotzdem vielen Dank und nun haben wir beide etwas gelernt! Ist doch prima!
Servus
Anzeige
AW: Labels in einer UF löschen
26.07.2018 19:09:07
Mullit
Hallo Herbert,
@Mullit: Trotzdem vielen Dank und nun haben wir beide etwas gelernt! Ist doch prima!

stimmt, da hast Du sicher recht, aber die Tragik ist, eigentlich wußt ich das schon vorher, aber das glaubt einem hinterher eh niemand.., wie das immer so ist mit eigentlich...;-)
Aber Nepumuks Lösungen sind sowieso immer auf den Punkt...top..!
Gruß, Mullit
Anzeige
;
Anzeige

Infobox / Tutorial

Labels in einer UserForm löschen


Schritt-für-Schritt-Anleitung

Hier ist eine einfache Schritt-für-Schritt-Anleitung, wie Du Labels in einer UserForm (UF) löschen kannst:

  1. UserForm und MultiPage erstellen: Stelle sicher, dass Du eine UserForm mit einer MultiPage hast, in der Du die Labels anlegen möchtest.

  2. Label erstellen: Verwende den folgenden Code, um Labels zur Laufzeit hinzuzufügen:

    With MultiPage1.Pages(3)
       For iCount = 1 To 25
           Set sTb = .Controls.Add("Forms.Label.1", "lbl_Artikel" & iCount)
           sTb.Caption = Tab2_ArtikelListe.Range("A" & iCount + 1).Value
           sTb.ZOrder (0)
       Next iCount
    End With
  3. Labels löschen: Um die vorherigen Labels zu löschen, kannst Du den folgenden Code verwenden:

    Dim lngIndex As Long
    With MultiPage1.Pages(3)
       For lngIndex = .Controls.Count - 1 To 0 Step -1
           If TypeOf .Controls(lngIndex) Is MSForms.Label Then
               .Controls.Remove .Controls(lngIndex).Name
           End If
       Next lngIndex
    End With
  4. Labels erneut hinzufügen: Führe die oben genannte Logik zum Hinzufügen von Labels erneut aus, nachdem Du die alte Liste gelöscht hast.


Häufige Fehler und Lösungen

  • Laufzeitfehler 444: Dieser Fehler tritt auf, wenn Du versuchst, Steuerelemente zu löschen, die nicht zur Laufzeit erstellt wurden. Stelle sicher, dass Du nur die Labels löschst, die Du zur Laufzeit erstellt hast.

  • Steuerelemente können nicht gelöscht werden: Wenn Du diesen Fehler siehst, überprüfe, ob Du eventuell Labels hast, die nicht dynamisch hinzugefügt wurden. In diesem Fall musst Du die Löschlogik anpassen, um nur die richtigen Labels zu entfernen.


Alternative Methoden

Eine alternative Methode besteht darin, alle Labels auf der Seite mit einem einzigen Befehl zu löschen, falls Du sicher bist, dass alle Steuerelemente Labels sind:

MultiPage1.Pages(3).Controls.Clear

Diese Methode funktioniert gut, wenn Du nur Labels auf dieser Seite hast.


Praktische Beispiele

Hier sind zwei praktische Beispiele, die Du verwenden kannst:

  1. Labels bei Button-Klick löschen:

    Private Sub CommandButton1_Click()
       Call ClearLabels
       Call AddLabels
    End Sub
    
    Private Sub ClearLabels()
       Dim lngIndex As Long
       With MultiPage1.Pages(3)
           For lngIndex = .Controls.Count - 1 To 0 Step -1
               If TypeOf .Controls(lngIndex) Is MSForms.Label Then
                   .Controls.Remove .Controls(lngIndex).Name
               End If
           Next lngIndex
       End With
    End Sub
    
    Private Sub AddLabels()
       ' Hier den Code zum Hinzufügen von Labels einfügen
    End Sub
  2. Labels beim Aktivieren der Seite löschen:

    Private Sub MultiPage1_Change()
       If MultiPage1.Value = 3 Then
           Call ClearLabels
           Call AddLabels
       End If
    End Sub

Tipps für Profis

  • Verwende Step -1 beim Löschen: Wenn Du Labels löschst, gehe von hinten nach vorne durch die Liste, um Indexprobleme zu vermeiden.

  • Benenne deine Steuerelemente konsistent: Wenn Du Labels mit einem festen Namensschema (z.B. "lbl_Artikel1", "lbl_Artikel2") erstellst, wird das Löschen einfacher.

  • Teste den Code in einer Sandbox: Stelle sicher, dass Du den Code in einer Testumgebung ausprobierst, bevor Du ihn in deine Hauptanwendung integrierst.


FAQ: Häufige Fragen

1. Wie kann ich alle Labels auf einmal löschen?
Du kannst die Methode Controls.Clear verwenden, um alle Steuerelemente auf der Seite zu löschen. Stelle sicher, dass es nur Labels gibt.

2. Was mache ich, wenn ich Laufzeitfehler beim Löschen erhalte?
Überprüfe, ob die Labels tatsächlich zur Laufzeit erstellt wurden. Falls nicht, musst Du die Löschlogik anpassen, um nur die gewünschten Labels zu entfernen.

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