Microsoft Excel

Herbers Excel/VBA-Archiv

Laufzeitfehler 1004

Betrifft: Laufzeitfehler 1004 von: Detlef Homberg
Geschrieben am: 01.11.2020 11:08:05

Hallo.

Ich habe eine tabelle mit 13 tabellenblättern, für jeden monat eins. Ich bin jetzt dabei die blätter mit einem makro so zu beeinflussen das sie nur eingeblendet werden wenn der jeweilige monat angezeigt wird. das klappt soweit ganz gut. nur wenn am anfang des monats der nächste monat angezeigt werden soll erscheint der Fehler 1004 " Die Visible-eigenschaft des Worksheet-Objekt kann nicht festgestellt werden".

Jedes einzelne Blatt ist schreibgeschützt.

In einem weiteren Blatt (Makro)liegt eine Tabelle mit der Monatsberechnung.

Ich habe folgende makro geschrieben. Was ist dort falsch?

Private Sub Worksheet_Calculate()
If Range("Makro!c5").Value = "ja" Then
    ActiveWorkbook.Sheets("januar").Unprotect Password:=""
    Sheets("januar").Visible = True
    ActiveWorkbook.Sheets("januar").Protect Password:=""
    Else
    Sheets("januar").Visible = False
    End If
 If Range("Makro!c6").Value = "ja" Then
    ActiveWorkbook.Sheets("februar").Unprotect Password:=""
    Sheets("februar").Visible = True
    ActiveWorkbook.Sheets("februar").Protect Password:=""
    Else
    Sheets("februar").Visible = False
    End If
If Range("Makro!c7").Value = "ja" Then
    ActiveWorkbook.Sheets("märz").Unprotect Password:=""
    Sheets("märz").Visible = True
    ActiveWorkbook.Sheets("märz").Protect Password:=""
    Else
    Sheets("märz").Visible = False
    End If
If Range("Makro!c8").Value = "ja" Then
    ActiveWorkbook.Sheets("april").Unprotect Password:=""
    Sheets("april").Visible = True
    ActiveWorkbook.Sheets("april").Protect Password:=""
    Else
    Sheets("april").Visible = False
    End If
If Range("Makro!c9").Value = "ja" Then
    ActiveWorkbook.Sheets("mai").Unprotect Password:=""
    Sheets("mai").Visible = True
    ActiveWorkbook.Sheets("mai").Protect Password:=""
    Else
    Sheets("mai").Visible = False
    End If
If Range("Makro!c10").Value = "ja" Then
    ActiveWorkbook.Sheets("juni").Unprotect Password:=""
    Sheets("juni").Visible = True
    ActiveWorkbook.Sheets("juni").Protect Password:=""
    Else
    Sheets("juni").Visible = False
    End If
If Range("Makro!c11").Value = "ja" Then
    ActiveWorkbook.Sheets("juli").Unprotect Password:=""
    Sheets("juli").Visible = True
    ActiveWorkbook.Sheets("juli").Protect Password:=""
    Else
    Sheets("juli").Visible = False
    End If
If Range("Makro!c12").Value = "ja" Then
    ActiveWorkbook.Sheets("august").Unprotect Password:=""
    Sheets("august").Visible = True
    ActiveWorkbook.Sheets("august").Protect Password:=""
    Else
    Sheets("august").Visible = False
    End If
If Range("Makro!c13").Value = "ja" Then
    ActiveWorkbook.Sheets("september").Unprotect Password:=""
    Sheets("september").Visible = True
    ActiveWorkbook.Sheets("september").Protect Password:=""
    Else
    Sheets("september").Visible = False
    End If
If Range("Makro!c14").Value = "ja" Then
    ActiveWorkbook.Sheets("oktober").Unprotect Password:=""
    Sheets("Oktober").Visible = True
    ActiveWorkbook.Sheets("oktober").Protect Password:=""
    Else
    Sheets("oktober").Visible = False
    End If
If Range("Makro!c15").Value = "ja" Then
    ActiveWorkbook.Sheets("november").Unprotect Password:=""
    Sheets("november").Visible = True
    ActiveWorkbook.Sheets("november").Protect Password:=""
    Else
    Sheets("Oktober").Visible = False
    End If
If Range("Makro!c16").Value = "ja" Then
    ActiveWorkbook.Sheets("dezember").Unprotect Password:=""
    Sheets("dezember").Visible = True
    ActiveWorkbook.Sheets("dezember").Protect Password:=""
    Else
    Sheets("dezember").Visible = False
    End If
    Sheets("makro").Visible = False
    End Sub


Danke im voraus für eure Hilfe

Betrifft: AW: Laufzeitfehler 1004
von: volti
Geschrieben am: 01.11.2020 11:23:16

Hallo Detlef,

ohne mir Deinen Code jetzt näher angeschaut zu haben, stellt sich mir folgende Frage.

Kann es sein, dass vor Einblenden des Blattes für den neuen Monats das Blatt des vorhergehenden Monats schon ausgeblendet werden soll und damit kein Blatt mehr visible ist.

Mindestens ein Tabellenblatt muss sichtbar sein.
Vielleicht das ganze von hinten aufziehen...

viele Grüße
Karl-Heinz

Betrifft: AW: Laufzeitfehler 1004
von: Daniel
Geschrieben am: 01.11.2020 11:34:54

Hi
das mit dem Protect/Unprotect kannst du weglassen.
zum Ein- oder Ausblenden ist der blattschutz nicht relevant.
das wäre höchstens der Arbeitsmappenschutz.

der Fehler dürfte sein, dass in Excel immer mindestens ein Blatt sichtbar sein muss.
wenn jetzt das Blatt "Makro" ausgeblendet ist wenn das makro startet (du blendest es am Ende zwar aus, aber zu beginn nicht ein), dann kann dieser Zustand eintreten, weil du zuerst den Oktober ausblendest und erst danach den November einblendest, du kannst aber den Oktorber nicht ausblenden, wenn er das einzige sichtbare Tabellenblatt ist.

eine mögliche Lösung wäre, dass du die Zellen 2x durchläufst.
im ersten Durchgang blendest du die Blätter mit "ja" ein und im zweiten Durchgang blendest du die ohne "ja" aus.

Gruß Daniel

Betrifft: AW: Laufzeitfehler 1004
von: Detlef Homberg
Geschrieben am: 01.11.2020 13:33:40

Hallo daniel,

danke für deinen Tip.

Ich habe den Fehler endlich ausgemerzt. Mit diesem makro gehts.




Private Sub Worksheet_Calculate()
If Range("c5").Value = "ja" Then
    Sheets("januar").Visible = True
    Else
    Sheets("januar").Visible = False
    End If
    Sheets("Muster").Visible = True
 If Range("c6").Value = "ja" Then
    Sheets("februar").Visible = True
    Else
    Sheets("februar").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c7").Value = "ja" Then
    Sheets("märz").Visible = True
    Else
    Sheets("märz").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c8").Value = "ja" Then
    Sheets("april").Visible = True
    Else
    Sheets("april").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c9").Value = "ja" Then
    Sheets("mai").Visible = True
    Else
    Sheets("mai").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c10").Value = "ja" Then
    Sheets("juni").Visible = True
    Else
    Sheets("juni").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c11").Value = "ja" Then
    Sheets("juli").Visible = True
    Else
    Sheets("juli").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c12").Value = "ja" Then
    Sheets("august").Visible = True
    Else
    Sheets("august").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c13").Value = "ja" Then
    Sheets("september").Visible = True
    Else
    Sheets("september").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c14").Value = "ja" Then
    Sheets("Oktober").Visible = True
    Else
    Sheets("oktober").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c15").Value = "ja" Then
    Sheets("november").Visible = True
    Else
    Sheets("november").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c16").Value = "ja" Then
    Sheets("dezember").Visible = True
    Else
    Sheets("dezember").Visible = False
    End If
    Sheets("Muster").Visible = False
    End Sub




Gruss

Betrifft: AW: Laufzeitfehler 1004
von: volti
Geschrieben am: 01.11.2020 13:04:41

Hallo Detlef,

wenn Du magst, kannst Du das ganze auch auf ein paar Zeilen "zusammendampfen".

Das Blatt Makro wird zunächst eingeblendet, damit ist dann immer ein Blatt eingeblendet.
Nach der Aktion kann es dann wieder ausgeblendet werden.
Code:
[Cc]

Private Sub Worksheet_Calculate() Dim sMon() As String, iMon As Integer 'Monatsnamen in ein Array schaffen sMon = Split(" januar februar märz april mai juni juli august september oktober november dezember") With Sheets("Makro") .Visible = True 'Blatt Makro einbenden For iMon = 1 To 12 'Alle Monate durchgehen und ein/ausblenden Sheets(sMon(iMon)).Visible = IIf(.Cells(iMon + 4, "C").Value = "ja", True, False) Next iMon On Error Resume Next 'Fehlerabfang: Falls alles ausgeblendet sein sollte .Visible = False 'Blatt Makro einbenden End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz


Betrifft: AW: Laufzeitfehler 1004
von: Detlef Homberg
Geschrieben am: 01.11.2020 13:41:52

Hallo Karl Heinz,
ich habe gerade selbst das makro soweit geändert das es geht.
Aber auch mit deinem makro klappt es bestens.
Hier ist mein makro:
Private Sub Worksheet_Calculate()
If Range("c5").Value = "ja" Then
    Sheets("januar").Visible = True
    Else
    Sheets("januar").Visible = False
    End If
    Sheets("Muster").Visible = True
 If Range("c6").Value = "ja" Then
    Sheets("februar").Visible = True
    Else
    Sheets("februar").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c7").Value = "ja" Then
    Sheets("märz").Visible = True
    Else
    Sheets("märz").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c8").Value = "ja" Then
    Sheets("april").Visible = True
    Else
    Sheets("april").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c9").Value = "ja" Then
    Sheets("mai").Visible = True
    Else
    Sheets("mai").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c10").Value = "ja" Then
    Sheets("juni").Visible = True
    Else
    Sheets("juni").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c11").Value = "ja" Then
    Sheets("juli").Visible = True
    Else
    Sheets("juli").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c12").Value = "ja" Then
    Sheets("august").Visible = True
    Else
    Sheets("august").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c13").Value = "ja" Then
    Sheets("september").Visible = True
    Else
    Sheets("september").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c14").Value = "ja" Then
    Sheets("Oktober").Visible = True
    Else
    Sheets("oktober").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c15").Value = "ja" Then
    Sheets("november").Visible = True
    Else
    Sheets("november").Visible = False
    End If
    Sheets("Muster").Visible = True
If Range("c16").Value = "ja" Then
    Sheets("dezember").Visible = True
    Else
    Sheets("dezember").Visible = False
    End If
    Sheets("Muster").Visible = False
    End Sub





Ist zwar mehr zu schreiben, funktioniert aber auch.
danke nochmal.
Gruss aus Köln

Betrifft: warum dann offen? o.w.T.
von: Werner
Geschrieben am: 01.11.2020 13:48:08



Beiträge aus dem Excel-Forum zum Thema "Laufzeitfehler 1004"