Laufzeitfehler 13 - Typen unverträglich

Liebe Fachleute,

bisher lief alles ohne Probleme, jetzt kommt o. g. Meldung.

Ich habe eine Datei mit 5 Arbeitsblättern, die ich bisher mit diesem Makro ge- und entschützt habe:

Sub BlaetterSchuetzen()
Dim ws As Worksheet
For Each ws In Sheets
ws.Protect
Next 'ws
End Sub
Sub BlaetterEntschuetzen()
Dim ws As Worksheet
For Each ws In Sheets
ws.Unprotect
Next 'ws
End Sub

Jetzt habe ich ein weiteres Arbeitsblatt hinzugefügt und krieg die o.g. Meldung.
Der Debugger-Pfeil zeigt beide Male auf die jeweilige „Next 'ws“-Zeile.
Wenn ich ihn beende, hat das Makro das gemacht, was ich wollte: geschützt bzw. entschützt. Seltsam. Aber nervend.

Ich hab schon gegoogelt, hab das Modul gelöscht und wieder hinzugefügt. Leider ohne Erfolg.

Habt ihr eine Idee?

Liebe Grüße

Jorge

Excel 2003

Worksheet ist ungleich Sheet

Jetzt habe ich ein weiteres Arbeitsblatt hinzugefügt und krieg
die o.g. Meldung.
Der Debugger-Pfeil zeigt beide Male auf die jeweilige „Next
'ws“-Zeile.
Wenn ich ihn beende, hat das Makro das gemacht, was ich
wollte: geschützt bzw. entschützt. Seltsam. Aber nervend.

Hallo Jorge,

meine Glaskugel sagt mir du hast ein Diagrammblatt (Chart) dabei.
Sheets sind alle Blätter, also z.B. auch Diagrammblätter.
Wörksheets sind nur die Arbeitsblätter.
Du definierst aber ws als Worksheet. Darauf beruht die Fehlermeldung.
Prinzipiell bräuchtest du also 2 Schleifen, eine mit Dim ws as Worksheet, eine mit Dim ws as Chart und For Each ws In Charts.
Naja, man kanns auch übertreiben mit dem Dim :smile:
Probiere es so:

Option Explicit
'
Sub BlaetterSchuetzen()
Dim ws
For Each ws In Sheets
 ws.Protect
Next ws
End Sub
'
Sub BlaetterEntschuetzen()
Dim ws
For Each ws In Sheets
 ws.Unprotect
Next ws
End Sub

Gruß
Reinhard

Danke, Reinhard!

Bleibt trotzdem die Frage, warum mein Makro, das ich ja, wie du weißt, nicht selber gemacht habe, über lange Zeit problemlos funktioniert hat?

Na, egal. Viel Spaß beim Kerzen anzünden.

Lieber Gruß

Jorge

Hallo Jorge,

Bleibt trotzdem die Frage, warum mein Makro,
über lange Zeit
problemlos funktioniert hat?

da kann ich jetzt nix zu sagen. Es gibt da vielleicht mehrere Ursachen für Fehlverhalten.
Wenn sowas wieder passiert, bau halt eine MsgBox ws.name in die Schleife ein, dann Code mit F8 durchgehen. Dann kannst du erkennen an welchem Blatt der Fehler geschieht.

Oder probiere Debug.Print ws.name aus, dazu mußt du noch ein Fensterchen über Ansicht aufmachen, weiß grad nich Direktfenster, Überwachungsfenster, naja, leicht herauszufinden.

Oder baue in den Code einen Errorhandler ein, wo du eine Msgbox hinschreibst.

Frag ruhig nach wenn dir was unklar ist. Das sind allgemeine Vorgehensweisen beim Fehlersuchen.

Na, egal. Viel Spaß beim Kerzen anzünden.

Danke dir, hab’s mit Weihnachten nicht aber Kerzen/Teelichte mag ich sehr.

Gruß
Reinhard