Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Löschen von Zellen die über Case eingefärbt wurden





Frage

Hallo Ihr guten Geister dieses Forums. Ich hab mal wieder ein kleines Problem mit meiner Tabelle, wo ich per Makro mit einer ActiveSheet. Unprotect ("test") Select Case Target.Value Case "F" Target.Interior.ColorIndex = 15 End Select ActiveSheet.Protect ("test") Anweisung die Zellen nach Eingabe, hier im Beispiel "F" wird die Farbe grau gesetzt. Dies funktioniert auch sehr gut. Nun zu meinem Problem wenn ich diese Zellen ( z.B.: C11:AG13) nun über Makro löschen will muß ich doch erst den Schreibschutz entfernen dann markieren und Inhalt löschen, die farbigen Zellen wieder auf Standart weiß setzen, danach den Schreibschutz wieder aktivieren. Wenn ich dies mache dann bekomme ich immer eine Laufzeitfehlermeldung. Kann mir jemand helfen dieses Problem zu lösen? Vielen Dank für Eure Bemühungen im voraus. Gruß Karsten

Antwort 1 von meinTipp

Hallo Unbekannte(r),
ohne deinen Code kann dir keiner helfen. Außerdem solltest du noch die Fehlermeldung angeben und an welcher Stelle er auftritt.

Gruss Rolf

Antwort 2 von kvtv

Hallo Rolf,
vielen Dank erst mal für Deine Antwort. Ich weiß zwar nicht wieso ich ein unbekannter sein soll. Mehr wie anmelden und meinen Namen unten drunter schreiben kann ich doch nicht!?!? Nun aber mal zu meinem kleinen Problemchen.
Das Makro welches die Zellen löschen soll ist folgendes:

Sheets("Jan").Select
ActiveSheet.Unprotect ("test")
Range("C11:AG13").Select
Selection.ClearContents
Range("C11").Select
Range("C11").Activate
ActiveSheet.Protect ("test")
Sheets("Daten").Select
End Sub


Fehlermeldung ist :

Laufzeitfehler '13'
Typen unverträglich


nach Debuggen steht es so hier:

ActiveSheet. Unprotect ("test")
Select Case Target.Value
Case "F"
Target.Interior.ColorIndex = 15
End Select
ActiveSheet.Protect ("test")

und bei Case "F" ist es gelb makiert.

In dem Blatt "Jan" sind die Zellen "C11:AG13" noch makiert aber die Inhalte schon gelöscht.

Ach übrigens das Makro welches die Zellen überwacht und dann mittels Case -Anweisung die Zellen einfärbt macht auch immer vorher den Blattschutz raus und anschließend nach der Zellfärbung wieder rein. Vielleicht hilft die Angabe.

Ich hoffe das reicht für Deine Nachfrage.
Vielen Dank im voraus
Gruß Karsten

Antwort 3 von meinTipp

Hallo Karsten,
erst einmal muss ich mich wohl für das Unbekannt entschuldigen.
Den Gruß mit Namen habe ich wohl übersehen(wenn er da schon stand).
Mit deinen Fehlerbeschreibung kann ich aber leider nichts anfangen.
In der Anfrage schreibst du
Zitat:
Anweisung die Zellen nach Eingabe, hier im Beispiel "F" wird die Farbe grau gesetzt. Dies funktioniert auch sehr gut.

und
Zitat:
wenn ich diese Zellen ( z.B.: C11:AG13) nun über Makro löschen will .... Wenn ich dies mache dann bekomme ich immer eine Laufzeitfehlermeldung.

Nun ist dein Problem aber anders
Zitat:
und bei Case "F" ist es gelb makiert.

In dem Blatt "Jan" sind die Zellen "C11:AG13" noch makiert aber die Inhalte schon gelöscht.

Was denn nun?

Gruss Rolf

Antwort 4 von kvtv

Hallo Rolf,
sorry für den verwechsler grau gelb, es ist natürlich grau. Die Farbe ist jedoch egal, da ich bei anderen Buchstaben noch mehr Einfärbungen habe (grün, gelb, grau, blau und orange).
Das Makro macht wirklich so einen Mist. Bevor ich das Makro starte sind in jeder dieser Zellen (C11:AG13) Zeitwerte mit folgendem Format (00:00) enthalten. Einige Zellen sind über Buchstaben (F,FÜ,K,U,Z) in den jeweiligen Farben eingefärbt. Wenn ich diese nun auf einmal löschen wollte, so zum Jahreswechsel, sollte dies mittels makro geschehen da es 12 Tabellenblätter und mit je 20 Zeilen sind. Wenn ich diese einmal manuell per Hand lösche (Zellen Makieren und Entfernen drücken) kommt auch tasächlich die Fehlermeldung:

Fehlermeldung ist :

Laufzeitfehler '13'
Typen unverträglich

Die markierten Zellen sind nach der Fehlermeldung immer noch makiert, die Inhalte sind jedoch gelöscht. Die eingefärbten Zellen sind noch erhalten.

Um die eingefärbten Zellen wieder normal zu bekommen (weiß) muß vorher der warscheinlich eine abfrage gemacht werden nach den Inhalten (F,FÜ,K,U,Z) und diese Zellen dann einfach mit (00:00) ausfüllen und in ein anderes Feld wechseln. Dann Markieren und Löschen??????

Dann habe ich an den Blattschutz gedacht und diesen abgeschaltet. Keine Veränderung der Reaktion. Das Problem wird warscheinlich das Markro sein, welches die Zelleingabe überwacht , deaktivier vorher den Blattschutz, sucht nach jeder Eingabe ob eine Übereinstimmung mit den Vorgaben in der Case-Anweisung dort ist, färbt bei übereinstimmung die Zelle passend ein und stellt den Blattschutz wieder ein.

Ach übrigens es geht mir nur um das Löschen über ein Makro.

Vielleicht ist es möglich das Zellenüberwachungsmakro durch das Löschmakro zu deaktivieren und nach dem Löschvorgang wieder zu aktivieren. Alles nur Vermutungen darum bitte ich ja um Hilfe.
Vielen Dank im voraus.

Gruß Karsten

Antwort 5 von meinTipp

Hallo again,
wenn man nicht weiß was dein "Zellenüberwachungsmakro" ist und auch nicht weiß wo es steht (ich nehme an in einer Ereignisroutine), kann man dir nicht helfen.
Teile also mit, wo deine Subroutinen stehen (Tabellenblatt, DieseArbeitsmappe oder sonstwo) und zeige den vollständigen Code.
Zumindest den Anfang ( z.B. Worksheet_SelectionChange(ByVal Target As Range)) bis zum eintreten des Fehlers.
Tipp: wenn du If Target.Value ... benutzt, so darf nur eine Zelle in Target enthalten sein! Wenn mehrer Zellen in Target (z.B. im Change Ereignis) enthalten sind, so kommt dieser Fehler.

Gruss Rolf

Antwort 6 von meinTipp

PS
mit Target.Count >1 Then Exit Sub kann man das verhindern.

Gruss Rolf

Antwort 7 von kvtv

Hallo Rolf,
das Makro steht in jeder der 12Tabellenblätter unter diese Arbeitsmappe

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
ActiveSheet.Unprotect ("test")
Select Case Target.Value
Case "F"
Target.Interior.ColorIndex = 15
Case "S"
Target.Interior.ColorIndex = 15
Case "s"
Target.Interior.ColorIndex = 15
Case "Z"
Target.Interior.ColorIndex = 45
Case "U"
Target.Interior.ColorIndex = 4
Case "FÜ"
Target.Interior.ColorIndex = 15
Case "N"
Target.Interior.ColorIndex = 15
Case "K"
Target.Interior.ColorIndex = 27
Case "B"
Target.Interior.ColorIndex = 15
Case "f"
Target.Interior.ColorIndex = 15
Case "z"
Target.Interior.ColorIndex = 45
Case "u"
Target.Interior.ColorIndex = 4
Case "fü"
Target.Interior.ColorIndex = 15
Case "n"
Target.Interior.ColorIndex = 15
Case "k"
Target.Interior.ColorIndex = 27
Case "b"
Target.Interior.ColorIndex = 15
Case Else
Target.Interior.ColorIndex = x1ColorIndexNone
End Select
ActiveSheet.Protect ("test")
End Sub



Das mit dem gelb und grau war doch keine Verwechselung. Nach dem Debuggen wird doch der Fehler in gelb markiert und diese gelbe Markierung stand bei dem obigen Makro bei

Case "F"

Vielen Dank schon mal für die schnelle antwort.
Gruß Karsten

Antwort 8 von meinTipp

Hallo Karsten,
Zitat:
das Makro steht in jeder der 12Tabellenblätter unter diese Arbeitsmappe

Das ist ein Widerspruch. Entweder steht der Code unter der Tabelle oder unter DieseArbeitsmappe. Ich nehme aber an (wegen des Namens Worksheet_Change) er steht unter dem Tabellenblatt.
Warum versuchst du nicht mal die Version aus Antwort 6? Also so:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Target.Count >1 Then Exit Sub
...
...

Gruss Rolf

Antwort 9 von kvtv

Hallo Rolf,
ich glaube wir Reden an einander vorbei.
Wenn ich mir VisuelBasic in Excel öffne und gehe in das Microsoft Excel Objekte und klicke da drauf dann öffnet sich doch einmal "Diese Arbeitsmappe" und dann noch meine Tabelle 1 .... Tabelle 12 und dort steht das Makro in jeder dieser Tabelle 1 .... 12!
Und dort muß ich dann die Lösung so eintragen wie hier jetzt beschrieben:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Target.Count >1 Then Exit Sub
ActiveSheet.Unprotect ("test")
Select Case Target.Value
Case "F"
Target.Interior.ColorIndex = 15
Case "S"
Target.Interior.ColorIndex = 15
Case "s"
Target.Interior.ColorIndex = 15
Case "Z"
Target.Interior.ColorIndex = 45
Case "U"
Target.Interior.ColorIndex = 4
Case "FÜ"
Target.Interior.ColorIndex = 15
Case "N"
Target.Interior.ColorIndex = 15
Case "K"
Target.Interior.ColorIndex = 27
Case "B"
Target.Interior.ColorIndex = 15
Case "f"
Target.Interior.ColorIndex = 15
Case "z"
Target.Interior.ColorIndex = 45
Case "u"
Target.Interior.ColorIndex = 4
Case "fü"
Target.Interior.ColorIndex = 15
Case "n"
Target.Interior.ColorIndex = 15
Case "k"
Target.Interior.ColorIndex = 27
Case "b"
Target.Interior.ColorIndex = 15
Case Else
Target.Interior.ColorIndex = x1ColorIndexNone
End Select
ActiveSheet.Protect ("test")
End Sub

Also ich bin ein bißchen dusselig aber was bewirkt diese Zeile denn dort. Kannst Du mir das denn erklären. Diese Zeile hilft mir dann auch beim Löschen über das Makro und die Entferbung der Zellen? Wäre Dir sehr Dankbar.
Vielen Dank im voraus.
Gruß Karsten

Antwort 10 von kvtv

Hallo Rolf,
habe das mal eben im Makro eingegeben. Dann makiert der Kompiler sofort das ">" und meldet:

Fehler beim Kompilieren
Erwartet: Ausdruck

?????????????

Was will das Programm von mir? Was ist ein "Ausdruck" ???

Hiiiiiiilfe !!!!!

Gruß Karsten

Antwort 11 von rainberg

Hallo Karsten,

das Makro brauchst Du nicht in jeder Tabelle zu hinterlegen.
Es reicht, wenn es im Codebereich "DieseArbeitsmappe" hinterlegt ist.

Habe es mal etwas gekürzt.

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    Select Case Target.Value
        Case "F", "f", "S", "s", "FÜ", "fü", "N", "n", "B", "b"
            Target.Interior.ColorIndex = 15
        Case "Z", "z"
            Target.Interior.ColorIndex = 45
        Case "U", "u"
            Target.Interior.ColorIndex = 4
        Case "K", "k"
            Target.Interior.ColorIndex = 27
    Case Else
        Target.Interior.ColorIndex = xlColorIndexNone
    End Select
End Sub


Gruß
Rainer

Antwort 12 von kvtv

Hallo Reiner,
danke für Deine Antwort. Habe eben Deine Idee in eine Exceldatei eingegeben. Es funktioniert Prima. Die verkürzte Fasssung ist natürlich einfacher wie meine Langversion. Aber mein Problem besteht leider immer noch. Wenn Du ein paar Zellen über das Makro einfärben läßt und willst dann diese Zellen über ein Makro löschen, dann hat man das Problem das dann nach der Markierung des Zellbereichs, zwar die Zellen gelöscht sind aber die Einfärbung der Zellen ist dann noch vorhanden. Die Farben sollen aber auch gelöscht werden. Das bekomme ich aber nicht hin.
Vielen Dank schon mal im voraus für Deine nette Hilfe.
Gruß Karsten

Antwort 13 von meinTipp

Hallo again,
versuche es so:
Range("C11:AG13").Interior.ColorIndex = xlColorIndexNone

Gruss Rolf

Antwort 14 von rainberg

Hallo Karsten,

wenn ich Dich richtig verstehe willst Du in einem markierten Bereich die Zellhintergründe sowie die Inhalte der gefärbten Zellen löschen?

Wenn ja, kopiere das Makro in den Codebereich "DieseArbeitsmappe", damit wirkt das Makro in allen Tabellen der Arbeitsmappe.

Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim rngC As Range
    Application.EnableEvents = False
    For Each rngC In Selection
        With rngC
            If .Interior.ColorIndex <> xlNone Then
                .Value = ""
                .Interior.ColorIndex = xlNone
            End If
        End With
    Next
    Application.EnableEvents = True
End Sub


Gruß
Rainer

Antwort 15 von kvtv

Hallo Ihr beiden,
zu Rolfs Variante entweder ich bin zu dusselig oder die Lösung funktioniert nicht. Habe Makro über button gestartet mit folgendem Inhalt:

Sub loeschen()

Range("C18:E28").Select
Selection.ClearContents
Range("C11:AG13").Interior.ColorIndex = xlColorIndexNone
Range("C18").Select

End Sub
Ich denke der Ansatz von Dir Reiner sagt mir eher zu:
Und nun zu Deiner Lösung.
Funktioniert ganz gut. Habe nur noch ein Problem mit dem Blattschutz. Wie kann ich denn das Blatt welches geschützt sein muß (wegen der Formeln im Baltt) mit Deinem Skript vorher entsperren und hinterher wieder sperren. Habe folgendes versucht und Makro in "DieseArbeitsmappe" kopiert:

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Unprotect ("test")
If Target.Count > 1 Then Exit Sub
Select Case Target.Value
Case "F", "f", "S", "s", "FÜ", "fü", "N", "n", "B", "b"
Target.Interior.ColorIndex = 15
Case "Z", "z"
Target.Interior.ColorIndex = 45
Case "U", "u"
Target.Interior.ColorIndex = 4
Case "K", "k"
Target.Interior.ColorIndex = 27
Case Else
Target.Interior.ColorIndex = xlColorIndexNone
End Select
ActiveSheet.Protect ("test")
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Unprotect ("test")
Dim rngC As Range
Application.EnableEvents = False
For Each rngC In Selection
With rngC
If .Interior.ColorIndex <> xlNone Then
.Value = ""
.Interior.ColorIndex = xlNone
End If
End With
Next
Application.EnableEvents = True
ActiveSheet.Protect ("test")
End Sub
Ohne die Unprotect und Protect anweisung funktioniert es recht gut.
Mit Blattschutz funktioniert es aber nicht!!!!
Bitte nochmals um Hilfe.
Vielen Dank im voraus.
Gruß Karsten

Antwort 16 von rainberg

Hallo Karsten,

ich habe den gesamten Thread gelesen, aber nicht studiert.
Leider habe ich noch nicht begriffen, warum Du zwei Makros brauchst und bei welchem Ereignis diese eigentlich wirken sollen.

Deine Beschreibungen bringen diesbezüglich keine Klarheit für den Außenstehenden.

Das selbe Problem besteht auch in Deinem Thread vom 18.09.08, wo ich auch noch auf eine Antwort warte.

Um nun weitere Missverständnisse auszuschließen, lade bitte eine Beispieldatei hoch, an der man sieht, was Du machen willst und man auch das Makro testen kann.
Ansonsten kann ich Dir nicht weiter helfen. Das mit dem Blattschutz halte ich, zumindest beim zweiten Makro, für Unsinn.

Gruß
Rainer

Antwort 17 von kvtv

Hallo Reiner,
das was ich oben beschrieben ist doch eigentlich ganz einfach.Ich habe Tabellenblätter die mit einem Blattschutz vesehen sein müssen, da sonst die Formeln gelöscht werden können. Das heißt das Makro von Dir welches ich als letztes angeben habe funktioniert ja ohne Blattschutz. Dann habe ich den Blattschutz rein gemacht.... und siehe da es funktioniert nicht mehr. Meine Frage ist halt wie bekomme ich das mit dem Blattschutz geregelt. Wenn du schreibst das ich das nicht in zwei Makros brauche ist mir das recht. Wie fasse ich denn die beiden Makros zusammen? Das erste Makro ist übrigens nur dafür da um zellen bei bestimmtem Eingaben mit den entsprechenden Farben zu versehen. Das zweite Makro soll mir die Möglichkeit geben am Jahresende die gesammten Tabellenblätter in den Eingabefeldern auf einen Tastendruck zu löschen also per Makro auf alle 12 Tabeleneblätter zu greifen. Bisher bin ich halt immer wenn ich das per Hand versucht habe (Markieren-->löschen) immer auf diese Fehlermeldung gestoßen:

Fehlermeldung ist :

Laufzeitfehler '13'
Typen unverträglich

Konnte bislang halt nichts damit anfangen.
Mache ich aber den Blattschutz raus ist alles wieder in ordnung und es funktioniert mit Deinem Makro.
Ich hoffe das ich mich jetzt geschickter aus gedrückt habe.
vielen Dank im voraus.
Gruß Karsten

Antwort 18 von rainberg

Hallo Karsten,

über Menü > Format > Zellen > Schutz kannst Du festlegen, welche Zellen gesperrt und Formeln ausgeblendet werden sollen.

Diese Festlegung wird wirksam, wenn Du den Blattschutz aktivierst.

Das bedeutet Du kannst alle Formelzellen schützen und in alle nicht geschützten Zellen Eingaben machen , sowohl per Tastatur als auch per Makro.

Damit kannst Du im ersten Makro auf das Aufheben und Setzen des Blattschutzes verzichten und das Problem wäre gelöst.

Allerdings müsste der nötige Wirkungsbereich des Makros noch begrenzt werden, aber leider schweigst Du zur vorhandenen Tabellenstruktur.

Nach Deiner letzten Aussage ist natürlich das zweite Makro völliger Quatsch, da Du dies nur einmal im Jahr brauchst.

Allerdings kann ich es nicht ändern ohne zu wissen in welchen Bereichen der einzelnen Tabellen es wirken soll (immer gleiche Bereiche oder verschiedene Bereiche und was genau in diesen Bereichen gelöscht werden soll (Inhalte, nur Formeln, nur Werte, Formate etc.)

Antwort 19 von kvtv

Hallo Reiner, wie kann ich Dir denn die Datei zu kommen lassen. Gibt es denn hier im Forum so etwas wie eine persönliche Nachricht oder gibt es eine andere Möglichkeit?.
Gruß Karsten

Antwort 20 von rainberg

Hallo Karsten,

aus bestimmten Gründen nehme ich keine Dateien per E-Mail mehr an.

Du kannst aber über Google einen File-Hoster suchen und die Datei dort hochladen, anschließend setzt Du hier im Forum einen Download-Link zur Datei.

Gruß
Rainer

Antwort 21 von kvtv

Hallo Reiner,
hier ist der Link:

http://www.file-upload.net/download-1134859/Einsatz-bersicht-2008c1b1.xls.html

die Passwörter sind alle auf "test"

Probier mal auf der Personalseite den Button zum löschen altes Jahr aus. Habe das Makro so eingestellt das er nur auf der Januar-Seite versucht zu löschen. Die Fehlermeldung kapier ich nicht.
Vielen Dank schon mal im voraus.

Gruß Karsten

Antwort 22 von kvtv

Hallo Reiner,

hier ist der Link:

http://www.file-upload.net/download-1134859/Einsatz-bersicht-2008c1b1.xls.html

Die Passwörter sind alle auf "test" geändert

Vielen Dank im voraus.
Gruß Karsten

Antwort 23 von rainberg

Hallo Karsten,

leider funktionieren beide Links nicht.

Wahrscheinlich hast Du anstatt des Download-Links den Lösch-Link gepostet.

Gruß
Rainer

Antwort 24 von kvtv

Hallo Reiner,

hier ist der richtige Link:

http://www.file-upload.net/download-1134916/Einsatz-bersicht-2008c1b1a.xls.html

Die Passwörter sind alle auf "test" geändert

Vielen Dank im voraus.
Gruß Karsten

Antwort 25 von kvtv

Hallo Rainer,
Funktioniert er jetzt?
Gruß Karsten

Antwort 26 von rainberg

Hallo Karsten,

anbei Deine Datei zurück.

Das Makro zum Färben der Zellen befindet sich in "DieseArbeitsmappe",
das Makro zum Löschen in "Personaldaten".

Solange das Löschmakro läuft, erscheint in der gelben Zelle das Wort "Löschvorgang", dadurch wird das Färbemakro blockiert und der User weiß Bescheid, dass das Löschmakro läuft.

An den Makros im Modul 1 habe ich nichts geändert, ich verstehe deren Sinn nicht richtig und würde sie durch Formeln ersetzen.

Teste mal selbst.


http://www.npshare.de/files/38/4111/Karsten.xls

Gruß
Rainer

Antwort 27 von kvtv

hallo reiner,
vielen, vielen Dank erstmal für die tolle Lösung. Verätst Du mir auch noch wie das Makro die Daten in den einzelnen Blättern findet. Ich habe schon die ganze Zeit darüber nach gegrübelt, komme aber nicht dahinter. Vielen Dank schon mal im voraus.
Gruß Karsten

Antwort 28 von rainberg

Hallo Karsten,

For intI = 2 To Worksheets.Count
Diese Schleife klappert die Tabellen Jan bis Dez der Reihe nach ab.

For Each rngC In Worksheets(intI).Range("C11:AG48")
In dieser Schleife wird der Wirkbereich der Suche festgelegt.
Die Variable rngC durchläuft diesen Bereich von links oben nach rechts unten.

If rngC.Row Mod 5 >= 1 And rngC.Row Mod 5 <= 3 Then
Damit wird festgelegt, dass nur Löschungen und Formatänderungen in den Zeilen, im genannten Bereich, vorgenommen werden, deren Zeilenindex geteilt durch 5, den Rest >=1 und <=3 ergibt.
Also immer die 1. bis 3. Zeile je Mitarbeiter.

Ich hoffe, das bringt Aufklärung.

Gruß
Rainer

Antwort 29 von kvtv

Hallo Reiner vielen Dank für Deine promte Unterstützung. Jetzt sehe ich klarer. Bis zum nächsten Problem ;-) .Danke nochmals. Betreffs der andere Frage brauch ich noch ein paar Tage bis ich Dir die passende Datei einstellen kann. Muß erst die ganzen Kennwörter entfernen. Datei ist ein Kennungsdatenblatt mit geheimen Kennungen die nicht an die Öffentlichkeit gelangen dürfen.
Vielen Dank nochmals.
Gruß Karsten