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

Forumthread: Alle nicht gesperrten Zellen löschen: Problem

Alle nicht gesperrten Zellen löschen: Problem
08.01.2015 21:46:39
Bernhard
Happy new year liebe VBA Experten
für mich gilt leider: "still: VBA very poor"
In Tabelle1 sollen beim Öffnen der Datei alle Checkboxen zurückgesetzt und alle nicht gesperrten Zellen geleert werden. In einer Testdatei funktionierte das mit dem unten dargestellten Makro (mit Hilfe dieses Forums erstellt). Als ich die Sache in der gewünschten Anwendung unterbrachte, gab es ein Problem: Die Tabelle erfasst den Bereich A1 bis W53. Sie enthält auch viele verbundene Zellen (z.B. besteht A53 aus den verbundenen Zellen A53 bis W53). Da macht das Makro nicht mit. Es kommt die Meldung: "Laufzeitfehler 1004. Kann Teil einer verbundenen Zelle nicht ändern".
Kann mir jemand erklären, wie ich die verbundenen Zellen mit erwische ?
By the way noch ein grundsätzliches Verständnisproblem (s.o. "... very poor", sorry):
1. Wenn ich ein Makro erstelle und ich mir einen mehr oder weniger sinnvollen Namen dafür ausdenke, dann ist alles hinfällig sobald ich "workbook_open" oder Vergleichbares verwende. Ist das o.k. ? Wozu gebe ich dann einen Namen ein ?
2. Kann man ein Makro auch nur einem von zahlreichen Blättern zuordnen bzw. ist das sinnvoll ?
Lg Bernhard
Sub workbook_open()
Dim Box As OLEObject
Dim Zelle As Range
If Worksheets("Tabelle1").Cells(3, 45) = 1 Then
For Each Box In Worksheets("Tabelle1").OLEObjects
If TypeName(Box.Object) = "CheckBox" Then
Box.Object.Value = False
End If
Next
For Each Zelle In Worksheets("Tabelle1").Range("A1:W53")
If Zelle.Locked = False Then Zelle.ClearContents
Next Zelle
End If
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Alle nicht gesperrten Zellen löschen: Problem
09.01.2015 09:43:00
Arthur
Hallo Bernhard.
Für die verbundenen Zellen gibt es folgende Lösung:
For Each Zelle In Worksheets("Tabelle1").Range("A1:E14")
If Zelle.Locked = False Then
If Zelle.MergeCells Then
If Zelle.Address = Zelle.MergeArea(1).Address Then
Zelle.MergeArea.ClearContents
End If
Else
Zelle.ClearContents
End If
End If
Next Zelle
Gruß, Arthur

Anzeige
AW: Alle nicht gesperrten Zellen löschen: Problem
09.01.2015 16:41:52
Bernhard
Ich hab es gerade ausprobiert. Es funktioniert. Super !
Vielen Dank Arthur.
LG Bernhard
;

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

Alle nicht gesperrten Zellen in Excel löschen


Schritt-für-Schritt-Anleitung

Um alle nicht gesperrten Zellen in Excel zu löschen, während du verbundene Zellen berücksichtigst, kannst du das folgende VBA-Makro nutzen. Dieses Makro setzt auch alle Checkboxen zurück, wenn die Datei geöffnet wird.

  1. Öffne den VBA-Editor: Drücke ALT + F11.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deinWorkbookName)", wähle "Einfügen" und dann "Modul".

  3. Kopiere den folgenden Code und füge ihn in das Modul ein:

    Sub workbook_open()
        Dim Box As OLEObject
        Dim Zelle As Range
        If Worksheets("Tabelle1").Cells(3, 45) = 1 Then
            For Each Box In Worksheets("Tabelle1").OLEObjects
                If TypeName(Box.Object) = "CheckBox" Then
                    Box.Object.Value = False
                End If
            Next
            For Each Zelle In Worksheets("Tabelle1").Range("A1:W53")
                If Zelle.Locked = False Then
                    If Zelle.MergeCells Then
                        If Zelle.Address = Zelle.MergeArea(1).Address Then
                            Zelle.MergeArea.ClearContents
                        End If
                    Else
                        Zelle.ClearContents
                    End If
                End If
            Next Zelle
        End If
    End Sub
  4. Schließe den VBA-Editor und speichere die Datei als „Excel-Arbeitsmappe mit Makros“ (*.xlsm).

  5. Öffne die Datei erneut, um zu testen, ob das Makro funktioniert.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt auf, wenn das Makro versucht, eine verbundene Zelle zu ändern. Stelle sicher, dass das Makro so angepasst ist, dass es die verbundene Zelle korrekt behandelt, wie im obigen Code beschrieben.

  • Makro funktioniert nicht beim Öffnen: Überprüfe, ob das Makro im richtigen Modul (z.B. „DieseArbeitsmappe“) gespeichert ist und dass es beim Öffnen der Datei korrekt ausgeführt wird.


Alternative Methoden

Falls du lieber ohne VBA arbeiten möchtest, kannst du auch die folgenden Schritte in Excel nutzen:

  1. Markiere den gewünschten Zellbereich.
  2. Gehe zu "Daten" > "Filtern" und aktiviere den Filter.
  3. Filtere die gesperrten Zellen aus und lösche die Inhalte der angezeigten nicht gesperrten Zellen.

Diese Methode ist jedoch weniger flexibel und kann bei großen Datenmengen mühsam sein.


Praktische Beispiele

Angenommen, du hast eine Tabelle mit den Zellen A1 bis W53, von denen einige Zellen gesperrt und andere verbunden sind. Mit dem obigen VBA-Skript kannst du alle nicht gesperrten und verbundenen Zellen leeren, ohne manuell eingreifen zu müssen.


Tipps für Profis

  • Verwende aussagekräftige Namen für deine Makros, um die Wartbarkeit zu erhöhen. Auch wenn du workbook_open verwendest, kannst du die Logik in separate Funktionen aufteilen.

  • Teste dein Makro immer in einer Kopie deiner Datei, um Datenverluste zu vermeiden.

  • Nutze die Option „Fehlerbehandlung“ in VBA, um das Makro robuster zu machen.


FAQ: Häufige Fragen

1. Kann ich das Makro auf ein bestimmtes Blatt beschränken?
Ja, du kannst das Makro so anpassen, dass es nur auf ein spezifisches Blatt angewendet wird, indem du den Namen des Blattes in den Code einfügst.

2. Was ist der Unterschied zwischen gesperrten und nicht gesperrten Zellen?
Gesperrte Zellen können nicht bearbeitet werden, während nicht gesperrte Zellen bearbeitbar sind. Diese Eigenschaften sind besonders wichtig, wenn du mit Formularen oder Datenvalidierungen arbeitest.

3. Wie kann ich sicherstellen, dass das Makro beim Öffnen der Datei ausgeführt wird?
Das Makro muss im „DieseArbeitsmappe“-Modul als Sub Workbook_Open() definiert sein, damit es automatisch ausgeführt wird, wenn die Datei geöffnet wird.

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