Ecxel Sheet Spalten aus blenden und speeren

Hallo

Habe eine Mappe mit der Tabelle stunden.
Da drin sind formeln die ich bei weiter gabe der mappe schützen möchte.
Hier ein Screenshoot:
http://www.yourupload.de/show/d/1369/dIh8M2Y9.jpg

Es stehen nur die Weißen Zellen zur bearbeitung frei. Die Grauen nicht.

Wenn die Mappe geladen wird ist die Mappe geschüzt. wenn in C1 das Monat oder in D1 das Jahr geändert wird. ist nach dem Zeilen ein/ausblenden nach dem Monatsletzten Tag die Tabelle nicht mehr geschützt!

Der folgende code ensperrt die Tabelle und Belendet die Zeilen aus und ein ab den Monatsletzten Tag wie es sein sollte.

Der code sollte dann wieder die Tabelle sperren, was leider nicht geschieht.

Hier ist der Code

Private Sub Worksheet\_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range(C1)) Is Nothing Or \_
 Not Application.Intersect(Target, Range(D1)) Is Nothing Then

Application.ScreenUpdating = False

'Spalte der Wochentage Spalte B
'=Stunden!$B:blush:B
MakroSpalteWochenTag = ThisWorkbook.Names("MakroSpalteWochenTag").RefersTo
MakroSpalteWochenTag = Mid(MakroSpalteWochenTag, (InStrRev(MakroSpalteWochenTag, "$") + 1))

 'Spalte der geleisteten Dienste Spalte G
 '=Stunden!$G:blush:G
 MakroSpalteDienst1 = ThisWorkbook.Names("MakroSpalteDienst1").RefersTo
 MakroSpalteDienst1 = Mid(MakroSpalteDienst1, (InStrRev(MakroSpalteDienst1, "$") + 1))

'Spalte der geleisteten Überstunden Spalte J
'=Stunden!$J:blush:J
MakroSpalteÜberzeit2 = ThisWorkbook.Names("MakroSpalteÜberzeit2").RefersTo
MakroSpalteÜberzeit2 = Mid(MakroSpalteÜberzeit2, (InStrRev(MakroSpalteÜberzeit2, "$") + 1))



 'gibt das Passwort für Bearbeitung ein
 ThisWorkbook.Worksheets("Stunden").Unprotect Password:="fred121"
 ThisWorkbook.Worksheets("Druck Version").Unprotect Password:="fred121"


 'Sucht in Zeilen B30 bis B33 nach wochentag

 For a = 30 To 33


 If Range(MakroSpalteWochenTag & a).Value = "Montag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Dienstag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Mittwoch" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Donnerstag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Freitag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Samstag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Sonntag" Then

 'wenn ein wochentag in B30 bis B33 und die Zeile ist ausgeblendet,
 'blendet die Zeile ein
 If Rows(a).Hidden = True Then

 ThisWorkbook.Worksheets("Stunden").Rows(a).EntireRow.Hidden = False

 'blendet die zeilen in der Tabelle "Druck Version" ein
 LastCell = a
 LastCell = LastCell + 9
 ThisWorkbook.Worksheets("Druck Version").Rows(LastCell).EntireRow.Hidden = False

 End If

 Else
 'wenn kein wochentag in B30 bis B33 und die Zeile ist eingeblendet,
 'blendet die Zeile aus
 'löscht den inhalt der Zeile von Spalte G bis Spalte J
 If Rows(a).Hidden = False Then

 ThisWorkbook.Worksheets("Stunden").Rows(a).EntireRow.Hidden = True
 ThisWorkbook.Worksheets("Stunden").Range(MakroSpalteDienst1 & a, \_
 MakroSpalteÜberzeit2 & a).ClearContents

 'blendet die zeilen in der Tabelle "Druck Version" aus
 LastCell = a
 LastCell = LastCell + 9
 'Tabelle = "Druck Version"
 ThisWorkbook.Worksheets("Druck Version").Rows(LastCell).EntireRow.Hidden = True

 'wenn kein wochentag in B30 bis B33 und die Zeile ist ausgeblendet,
 'blendet die Zeile ein
 ElseIf Rows(a).Hidden = True Then

 ThisWorkbook.Worksheets("Stunden").Rows(a).EntireRow.Hidden = False

 'blendet die zeilen in der Tabelle "Druck Version" ein
 LastCell = a
 LastCell = LastCell + 9
 ThisWorkbook.Worksheets("Druck Version").Rows(LastCell).EntireRow.Hidden = False

 End If

 End If

 Next a



 'Application.Calculation = xlAutomatic
 Application.ScreenUpdating = True


 'setz wieder das Passwort für die Tabelle


 ThisWorkbook.Worksheets("Stunden").Protect Password:="fred121", DrawingObjects:=True, Contents:=True, Scenarios:=True
 ThisWorkbook.Worksheets("Druck Version").Protect Password:="fred121"

End If

End Sub

Danke Fred

Nachfrage
Hallo Manfred,

welches Excel hast du denn das sowas:

„If Not Application.Intersect(Target, Range(C1)) Is Nothing Or …“

funktioniert?
Range(C1) geht doch gar nicht *denk*

Gruß
Reinhard

Hallo Reinhard,

welches Excel hast du denn das sowas:

excel 2003

„If Not Application.Intersect(Target, Range(C1)) Is Nothing Or
…“

Hast recht es müste stehen Range(„C1“)
da aber nicht das problem ist denn der code blendet ja die zeilen ein aus. ansonst würde 1004 laufzeit fehler kommen oder *denk*
hab aus verständlichern gründen Range(C1) geschrieben, eben die anführungs zeichen vergessen!!
Gruß
fred

Hast recht es müste stehen Range(„C1“)
da aber nicht das problem ist denn der code blendet ja die
zeilen ein aus. ansonst würde 1004 laufzeit fehler kommen oder
*denk*

Hallo Manfred,

sicher, wenn Excel nix weiß kommt 1004 :smile:
So oder so ist es sicherer du schreibst hier keinen Code rein sondern kopierst ihn rein, das vermeidet unnötige Irritationen.

Deinen Code habe ich erst nur kurz überflogen. Sieht aus wie eine große If-Schleife in der du erst den Blattschutz aufhebst, was machst, dann ihn wieder setzt.

Ich muß mal genauer schauen warum er anscheinend niht wieder gesetzt wird.

Gruß
Reinhard

Hallo Reinhard,

Ich muß mal genauer schauen warum er anscheinend niht wieder
gesetzt wird.

Ja Bitte Danke
Gruß
fred

Ich muß mal genauer schauen warum er anscheinend niht wieder
gesetzt wird.

Ja Bitte Danke

Hallo Fred,

sorry, ich habe geschaut und sehe keinen Grund warum der PW_Schutz nicht wieder gesetzt wird.
Nachfolgend dein Code optisch verbessert aber unverändert.

Gruß
Reinhard

Option Explicit

Private Sub Worksheet\_Change(ByVal Target As Range)
If Target.Address "$C$1" And Target.Address "$D$1" Then Exit Sub
Application.ScreenUpdating = False
MakroSpalteWochenTag = ThisWorkbook.Names("MakroSpalteWochenTag").RefersTo
MakroSpalteWochenTag = Mid(MakroSpalteWochenTag, (InStrRev(MakroSpalteWochenTag, "$") + 1))
MakroSpalteDienst1 = ThisWorkbook.Names("MakroSpalteDienst1").RefersTo
MakroSpalteDienst1 = Mid(MakroSpalteDienst1, (InStrRev(MakroSpalteDienst1, "$") + 1))
MakroSpalteÜberzeit2 = ThisWorkbook.Names("MakroSpalteÜberzeit2").RefersTo
MakroSpalteÜberzeit2 = Mid(MakroSpalteÜberzeit2, (InStrRev(MakroSpalteÜberzeit2, "$") + 1))
ThisWorkbook.Worksheets("Stunden").Unprotect Password:="fred121"
ThisWorkbook.Worksheets("Druck Version").Unprotect Password:="fred121"
For a = 30 To 33
 If Range(MakroSpalteWochenTag & a).Value = "Montag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Dienstag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Mittwoch" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Donnerstag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Freitag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Samstag" Or \_
 Range(MakroSpalteWochenTag & a).Value = "Sonntag" Then
 If Rows(a).Hidden = True Then
 ThisWorkbook.Worksheets("Stunden").Rows(a).EntireRow.Hidden = False
 LastCell = a
 LastCell = LastCell + 9
 ThisWorkbook.Worksheets("Druck Version").Rows(LastCell).EntireRow.Hidden = False
 End If
 Else
 If Rows(a).Hidden = False Then
 ThisWorkbook.Worksheets("Stunden").Rows(a).EntireRow.Hidden = True
 ThisWorkbook.Worksheets("Stunden").Range(MakroSpalteDienst1 & a, \_
 MakroSpalteÜberzeit2 & a).ClearContents
 LastCell = a
 LastCell = LastCell + 9
 ThisWorkbook.Worksheets("Druck Version").Rows(LastCell).EntireRow.Hidden = True
 ElseIf Rows(a).Hidden = True Then
 ThisWorkbook.Worksheets("Stunden").Rows(a).EntireRow.Hidden = False
 LastCell = a
 LastCell = LastCell + 9
 ThisWorkbook.Worksheets("Druck Version").Rows(LastCell).EntireRow.Hidden = False
 End If
 End If
Next a
Application.ScreenUpdating = True
ThisWorkbook.Worksheets("Stunden").Protect Password:="fred121", DrawingObjects:=True, Contents:=True, Scenarios:=True
ThisWorkbook.Worksheets("Druck Version").Protect Password:="fred121"
End Sub

Hallo,

naja was soll’s.

trotzdem danke!!!

gruß fred