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

Forumthread: CheckBoxen mit VBA umbenennen

CheckBoxen mit VBA umbenennen
Mister
Hallo und guten Morgen,
ich habe eine große UF mit 6 Pages. Die UF beinhaltet sehr viele Checkboxen die den Namen Checkbox1 bis etwa Checkbox80 haben. Die CheckBoxen werden mit einer Schleife aktiviert sofern Bedingunen erfüllt sein sollen. Es kommt aber vor, dass ich einen neuen CheckBox "dazwischen" schieben muss und ich muss dann auch alle CheckBoxen danach umbenennen damit es mit der Schleife noch funktioniert. Meine Frage: kann man mit einer anderen Schleife den Namen der nachfolgenden Checkboxen ändern? Ich habe folgendes versucht aber es klappt nicht:
Dim i As Long
For i = 30 To 80
Me.Controls("CheckBox" & i).Namen = Format("CheckBox") & i + 1
Next
Hat jemand eine Idee?
Gruß
Martin
Anzeige
AW: CheckBoxen mit VBA umbenennen
04.07.2009 12:24:25
Original
Hi,
die Eigenschaft Name ist zur Laufzeit geschützt, d.h. er kann per Code nicht geändert
werden.
Wenn die Boxen zur Laufzeit erstellt werden, dann kann ein Name vergeben werden.
mfg Kurt
AW: CheckBoxen mit VBA umbenennen
04.07.2009 12:26:40
Gerd
Hallo Martin!
Es kommt aber vor, dass ich einen neuen CheckBox "dazwischen" schieben muss
Erstelle alle (auch die zusätzliche) im Editor u. deaktiviere die temporär nicht benötigte
mit .Visible=False und .Enabled=False
Frage einer dieser Eigenschaften in deiner Bearbeitungs-Schleife ab.
Änderen kannst deren Namen nur dann, wenn die Checkboxen zur Laufzeit (per Code) erstellt worden
sind.
Gruß Gerd
Anzeige
zur Laufzeit oder im Entwicklungsmodus ?
04.07.2009 12:43:42
ransi
HAllo
Oder willst du die CheckBoxen im Entwicklungsmodus umbenennen ?
ransi
AW: zur Laufzeit oder im Entwicklungsmodus ?
04.07.2009 13:28:43
Mister
Hallo,
es sieht so aus, dass mein Vorhaben nicht realisierbar ist. Schade :-(
@ Ransi
Ich hatte es mir so vorgestellt, dass ich z.B. zwischen CheckBoxen 29 und 30 einen neuen Box einfüge der CheckBox30 heissen soll, der alte Box30 soll dann CheckBox31 heissen, Box31 wird 32 usw.
Gruß
Martin
Anzeige
AW: zur Laufzeit oder im Entwicklungsmodus ?
04.07.2009 14:49:17
ransi
HAllo MArtin
Soll das zur Laufzeit, also wenn die Userform angezeigt wird passieren, oder wenn du grade an der Userform schraubst ?
ransi
AW: zur Laufzeit oder im Entwicklungsmodus ?
04.07.2009 14:56:35
Mister
Hallo,
wenn ich daran schraube!
Gruß
Martin
Für Entwicklungsmodus...
05.07.2009 12:42:47
Tino
Hallo,
habe hier mal etwas zusammengebaut.
Zu beachten ist die Reihenfolge,
es wird oben nach unten durchnummeriert wobei von links nach rechts gegangen wird.
Ich benutze auch eine Hilfstabelle die danach wieder gelöscht wird.
kommt als Code in Modul1
Option Explicit 
 
Sub test() 
Dim objCh 
Dim i As Integer, ii As Integer 
Dim myAr(), myArCh 
Dim temSH As Worksheet 
 
With Application 
 .ScreenUpdating = False 
 .EnableEvents = False 
 .DisplayAlerts = False 
 
    With ThisWorkbook.VBProject 
        For i = 1 To .VBComponents.Count 
          If .VBComponents(i).Name = "UserForm1" Then 
           Set objCh = .VBComponents(i) 
           Exit For 
          End If 
        Next i 
    End With 
     
    Redim myAr(objCh.Designer.Controls.Count - 1, 1 To 3) 
     
    For i = 0 To objCh.Designer.Controls.Count - 1 
     If TypeName(objCh.Designer.Controls.Item(i)) = "CheckBox" Then 
        objCh.Designer.Controls.Item(i).Name = "TempNameCH" & i + 1 
        myAr(ii, 1) = i 
        myAr(ii, 2) = objCh.Designer.Controls.Item(i).Left 
        myAr(ii, 3) = objCh.Designer.Controls.Item(i).Top 
        ii = ii + 1 
     End If 
    Next i 
     
    Set temSH = Worksheets.Add 
     
    With temSH 
     .Range("A1").Resize(Ubound(myAr, 1) + 1, Ubound(myAr, 2)) = myAr 
     .UsedRange.Sort .Range("B1"), xlAscending, .Range("C1"), , xlAscending, , , xlNo 
      myArCh = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp)) 
     .Delete 
    End With 
     
    ii = 1 
     
    For i = 1 To Ubound(myArCh) 
     objCh.Designer.Controls.Item(myArCh(i, 1)).Name = "CheckBox" & ii 
     ii = ii + 1 
    Next i 
  
 .ScreenUpdating = True 
 .EnableEvents = True 
 .DisplayAlerts = True 
End With 
End Sub 


Gruß Tino

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

CheckBoxen in Excel mit VBA umbenennen


Schritt-für-Schritt-Anleitung

Um die Namen von CheckBoxen in einer UserForm mit VBA umzubenennen, kannst Du den folgenden Ansatz verwenden. Dieser Code ist für Excel 2010 und späteren Versionen geeignet.

  1. Öffne den Visual Basic for Applications (VBA) Editor.
  2. Füge ein neues Modul hinzu (Rechtsklick auf einen der Einträge im Projektfenster > Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Option Explicit

Sub CheckBoxenUmbenennen()
    Dim objCh As Object
    Dim i As Integer, ii As Integer
    Dim myAr(), myArCh
    Dim temSH As Worksheet

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayAlerts = False

        With ThisWorkbook.VBProject
            For i = 1 To .VBComponents.Count
                If .VBComponents(i).Name = "UserForm1" Then
                    Set objCh = .VBComponents(i)
                    Exit For
                End If
            Next i
        End With

        ReDim myAr(objCh.Designer.Controls.Count - 1, 2)

        For i = 0 To objCh.Designer.Controls.Count - 1
            If TypeName(objCh.Designer.Controls.Item(i)) = "CheckBox" Then
                objCh.Designer.Controls.Item(i).Name = "TempNameCH" & i + 1
                myAr(ii, 1) = i
                ii = ii + 1
            End If
        Next i

        ' Hier kannst Du deine Logik zum Umbenennen hinzufügen
        ' (z.B. CheckBox-Umbenennung basierend auf myAr)

        .ScreenUpdating = True
        .EnableEvents = True
        .DisplayAlerts = True
    End With
End Sub
  1. Führe das Makro aus, um die CheckBoxen umzubenennen.

Häufige Fehler und Lösungen

  • Fehler: „Name ist zur Laufzeit geschützt“
    Lösung: Du kannst die Namen von CheckBoxen nur ändern, wenn sie zur Laufzeit erstellt wurden. Wenn Du CheckBoxen im Entwicklungsmodus erstellst, musst Du diese manuell umbenennen.

  • Fehler: „Objekt nicht gefunden“
    Lösung: Stelle sicher, dass der Name der UserForm korrekt ist. In diesem Beispiel ist „UserForm1“ der Name. Ändere ihn gegebenenfalls.


Alternative Methoden

Falls Du die CheckBoxen manuell umbenennen möchtest, kannst Du dies direkt im VBA-Editor tun:

  1. Wähle die UserForm aus.
  2. Klicke auf die CheckBox, die Du umbenennen möchtest.
  3. Ändere den Namen im Eigenschaftenfenster.

Diese Methode ist weniger automatisiert, aber einfach, wenn Du nur wenige Änderungen vornehmen musst.


Praktische Beispiele

Ein praktisches Beispiel wäre, wenn Du eine CheckBox zwischen CheckBox 29 und 30 einfügen möchtest. Du würdest den Code anpassen, um die Inhalte in der Hilfstabelle entsprechend zu verschieben und umzubenennen.

' Beispiel für das Umbenennen mit einer Schleife
For i = 30 To 80
    objCh.Designer.Controls.Item(i).Name = "CheckBox" & i + 1
Next i

Tipps für Profis

  • Nutze Hilfstabellen: Erstelle eine Hilfstabelle, um die Positionen und Namen der CheckBoxen zu speichern. Das erleichtert die Umbenennung und Anordnung.
  • ScreenUpdating: Deaktiviere .ScreenUpdating für bessere Performance während der Umbenennung.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um Probleme während der Ausführung des Codes abzufangen.

FAQ: Häufige Fragen

1. Kann ich die CheckBoxen zur Laufzeit umbenennen?
Ja, wenn die CheckBoxen per Code erstellt wurden, kannst Du sie zur Laufzeit umbenennen.

2. Was mache ich, wenn die Namen der CheckBoxen nicht aktualisiert werden?
Stelle sicher, dass Du das Makro korrekt ausführst und dass die CheckBoxen im richtigen Zustand sind (z.B. sichtbar und aktiviert).

3. Wie gehe ich mit einem großen Benutzerformular um?
Wenn Du viele CheckBoxen hast, verwende eine Schleife, um die Namen systematisch zu ändern, anstatt jede einzeln zu bearbeiten.

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