4.1k Aufrufe
Gefragt in Tabellenkalkulation von raisix Mitglied (287 Punkte)

Hallo zusammen,

die Tabelle besteht aus 55 Blättern (53 für Kalenderwochen). Die Arbeitsmappe ist geschützt.

Der erste Teil des Codes färbt das Tabellenblatt rot, welches der aktuellen Kalenderwoche entspricht.

Der weitere Teil des Code ist dafür da, einen Hinweistext beim Öffnen anzuzeigen und die Arbeitsblätter zu sperren und dabei die Auto-Gliederung zuzulassen.

Mein Code ist leider noch fehlerhaft. Es wird folgender Fehler ausgegeben:

Laufzeitfehler '1004':

Anwendungs- oder objektdefinierter Fehler

Hier der VBA-Code:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("" & DatePart("ww", Date, vbMonday, vbFirstFourDays)).Tab.ColorIndex = xlNone
End Sub

____________________________________________________________________________

Sub Workbook_Open()
 MsgBox "MUSTERTEXT.", 0, "Hinweis"
 Dim i As Long
 For i = 1 To Worksheets.Count
 Sheets(i).Protect userinterfaceonly:=True, Password:="Passwort"
 Sheets(i).EnableOutlining = True 'für Gliederung
 Sheets(i).EnableAutoFilter = True 'für Autofilter

 Next i
  
  Worksheets("" & DatePart("ww", Date, vbMonday, vbFirstFourDays)).Tab.ColorIndex = 3
  
 End Sub

Kann mir jemand sagen, wo der Fehler liegt?

14 Antworten

0 Punkte
Beantwortet von raisix Mitglied (287 Punkte)
Ja stimmt. Habe es eingearbeitet. Funktioniert super.

Danke nochmal :)
0 Punkte
Beantwortet von raisix Mitglied (287 Punkte)
Hallo nochmal,

leider habe ich doch noch ein Problem mit dem Code. Er läuft ohne Fehler durch.

Das Problem:
Das Tabellenblatt, welches der aktuellen Kalenderwoche entspricht wird nicht eingefärbt.

Hier nochmal der endgültige Code:

Sub Workbook_Open()
    MsgBox "Hinweistext", 0, "Hinweis"
    Dim i As Long
   
    ' zuerst Mappenschutz aufheben !!!
       ActiveWorkbook.Unprotect "Passwort" ' Schutz aufheben
   
    'Tabellenblatt einfärben, welches aktueller Kalenderwoche entspricht
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = CStr(DatePart("ww", Date, vbMonday, vbFirstFourDays)) Then
        Worksheets(1).Tab.ColorIndex = 3
            Else
            Worksheets(1).Tab.ColorIndex = xlNone
        End If
        Worksheets(i).Protect userinterfaceonly:=True, Password:="Passwort"
        Worksheets(i).EnableOutlining = True 'für Gliederung
        Worksheets(i).EnableAutoFilter = True 'für Autofilter
    Next i
   
   
   
    ' Mappenschutz wieder setzen
      ActiveWorkbook.Protect "Passwort" ' Schützen
       
   
   
End Sub
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

in der If-Verzweigung darf es nicht heißen Worksheets(1) - die 1 muss durch i ersetzt werden

Bis später, Karin

0 Punkte
Beantwortet von raisix Mitglied (287 Punkte)

Super vielen Dank smiley

...