Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellen der Vorwoche sperren

Forumthread: Zellen der Vorwoche sperren

Zellen der Vorwoche sperren
30.09.2024 16:59:02
Maverick_57
Hallo zusammen,
ich habe folgende Problemstellung:
in einer Zeiterfassung (es kamen in der Vergangenheit Unregelmäßigkeiten vor ;-)) möchte der Arbeitgeber folgende Zusatzfunktion haben:
am ersten Arbeitstag der Folgewoche (muss nicht notwendig Montag sein, da auch TZ-Kräfte, die erst am Di oder Mi arbeiten) soll eine Abfrage erscheinen, ob die Vorwoche so korrekt erfasst wurde. Bei Antwort "Nein" soll der MA die Möglichkeit bekommen, die Daten der Vorwoche zu pflegen. Danach und bei Antwort "Ja" sollen die Eingabezellen der Vorwoche (Spalten C:I) gesperrt werden, so dass bei aktiviertem Blattschutz (aus einem Makro heraus) keine nachträgliche Bearbeitung dieser Zellen mehr möglich ist.
Der Bearbeitungszeitraum soll immer für die Vorwoche gelten, und zwar von Montag bis Samstag.
Daten älter als eine Woche sollen nicht mehr geändert werden können (außer durch Eingriff des Admin).
Für die erste Woche des Monats soll der Änderungszeitraum vom 1. des Monats bis zum drauffolgenden Samstag gehen.
Ich suche jetzt ein Makro, dass den Sperrvermerk auf die angesprochenen Zellen setzt.

Ich hoffe, ich konnte mein Anliegen halbwegs klar darstellen?


Beipieldatei: https://www.herber.de/bbs/user/172499.xlsm
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen der Vorwoche sperren
30.09.2024 21:13:09
Waldemar II
Was spricht dagegen, das händisch zu erledigen? (Zu viele Mitarbeiter?)

Auch frage ich mich, wie die Mitarbeiter ihre Stunden eintragen. Läuft das über ein Netzwerk, wo Makros möglich sind oder über eine Cloud? Ich frage deswegen , weil ich das als Admin auch erledigen muss, aber das am Monatsende nach erinnernden Hinweis an die Mitarbeiter händisch erledige, da es sich auch nur um eine Handvoll Mitarbeiter handelt.
Anzeige
AW: Zellen der Vorwoche sperren
02.10.2024 10:03:40
UweD
Hallo


Du hast mich fast an mir zweifeln lassen.
Ich hatte was programmiert und der Code lief immer auf einen Fehler, den ich mir nicht erklären konnte,

Bis ich gesehen habe, das du das 1904 Datumssystem in der Datei verwendest. :-(
Warum?

Egal. hab die Einstellung nun ausgelesen und berücksichtigt.

- Rechtsclick auf den Tabellenblattreiter vom Blatt Mastermonat
- Code anzeigen
- Rechts diesen Code reinkopieren

Bei Aktivierung des Blattes läuft das Makro ab

Private Sub Worksheet_Activate()

Dim Zeile As Long, Z1 As Integer, LR As Long, D1904 As Integer, DatumW As Long
Dim LTagVorw As Date

On Error GoTo Fehler
Const APPNAME = "Worksheet_Activate"

Z1 = 7 'erste DatenZeile

'Bei Datumswert 1904 Aktivierung
If ThisWorkbook.Date1904 Then D1904 = 1462

LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte A

LTagVorw = Date - (Weekday(Date, vbMonday) - 1) - 2 ' Erster Tag der Woche - 2 Tage = Samstag Vorwoche

DatumW = CLng(LTagVorw) - D1904

Zeile = WorksheetFunction.CountIf(Columns(1), DatumW) 'Ist das Datum in Tabelle vorhanden
If Zeile > 0 Then
Zeile = WorksheetFunction.Match(DatumW, Columns(1), 0) ' Ja, in Zeile

Rows(Z1).Resize(Zeile - Z1 + 1).Locked = True 'vorher sperren
Rows(Zeile).Resize(LR - Zeile + 1).Locked = False 'Rest bis Ende ungesperrt
End If

Me.Protect Userinterfaceonly:=True 'Blatt schützen

'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number > 0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub


LG UweD
Anzeige
AW: Zellen der Vorwoche sperren
02.10.2024 10:46:51
Maverick57
Hallo Uwe D,

herzlichen Dank für Deine Mühe! Ich werde das Makro am langen Wochenende (ab morgen) ausprobieren :-)

Zwei Anmerkungen:
Das Datumssystem 1904 ist nicht absichtlich aktiviert gewesen! Kann es sein, dass das damit zusammenhängt, das die Ursprungsdatenmappe auf einem Mac erstellt wurde? Ich arbeite ausschließlichmit dem 1900er-System ...
Was meinst Du mit "Bei Aktivierung des Blattes...", wenn das Batt aufgerufen wird, oder wenn die erste Zelle angeklickt wird?

Danke im Voraus!

LG Rudi
Anzeige
AW: Zellen der Vorwoche sperren
03.10.2024 18:00:51
Maverick57
Hallo UweD,

vielen Dank nochmal für deine Hilfestellung, es klappt prima, mit einer Kleinigkeit, die ich aber in meiner Frage auch nicht erwähnt hatte:
es sollen nicht ALLE Felder zum Editieren freigegeben werden, sondern nur die Felder der "Rest"-Spalten C, D, F:I unterhalb des gesperrten Bereichs :-(

Darf ich dich hier nochmals um Hilfstellung bitten ...

Herzlichen Dank im Voraus
Rudi
Anzeige
AW: Zellen der Vorwoche sperren
03.10.2024 22:10:11
schauan
Hallöchen,

mal als Ansatz zum tüfteln.
Bei der ersten msgbox nehme ich den codeteil, mit dem ein Bereich gesperrt wird und schaue aber stattdessen nach der Adresse, die das betrifft.
--> zeile und lr hab ich mal frei Schnauze gesetzt :-)
Bei der zweiten msgbox nehme ich mal statt einer ganzen Zeile eine Zelle aus Spalte C (3) und schaue, wie die Adresse da aussieht.

Sub test()

zeile = 5
lr = 10
MsgBox Rows(zeile).Resize(lr - zeile + 1).Address
MsgBox Cells(zeile, 3).Resize(lr - zeile + 1).Address
End Sub
Anzeige
AW: Zellen der Vorwoche sperren
03.10.2024 22:20:10
Maverick57
Hallo schauan,
cool, danke für den Denkanstoß! ;-)

LG Rudi
AW: Zellen der Vorwoche sperren
02.10.2024 11:23:01
UweD
Hallo nochmal

"Bei Aktivierung des Blattes..."
Wenn du von einem anderen Blatt auf dieses wechselst...

Hab gerade noch gemerkt, wenn das Blatt schon geschützt ist, kommt noch ein Fehler.
Deshalb besser so (Blattschutz nach oben verschieben

Ausserdem, wenn du schon auf dem Blatt bist, startet der Code nicht.


Deshalb:

- Lösche den Code im Tabellenblatt wieder
- Füge das hier in deinem Modul1 unten an
Sub Zeilenschutz()

Dim TB As Worksheet, Zeile As Long, Z1 As Integer, LR As Long, D1904 As Integer, DatumW As Long
Dim LTagVorw As Date

If MsgBox("Vorwoche so korrekt erfasst", vbYesNo + vbQuestion, "Zeilenschutz") = vbjes Then
Set TB = Sheets("Mastermonat")
TB.Activate

Z1 = 7 'erste DatenZeile

TB.Protect Userinterfaceonly:=True 'Blatt schützen, aber Änderungen durch Code zulassen

'Bei Datumswert 1904 Aktivierung
If ThisWorkbook.Date1904 Then D1904 = 1462

LR = TB.Cells(TB.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte A

LTagVorw = Date - (Weekday(Date, vbMonday) - 1) - 2 ' Erster Tag der Woche - 2 Tage = Samstag Vorwoche

DatumW = CLng(LTagVorw) - D1904

Zeile = WorksheetFunction.CountIf(TB.Columns(1), DatumW) 'Ist das Datum in Tabelle vorhanden
If Zeile > 0 Then
Zeile = WorksheetFunction.Match(DatumW, TB.Columns(1), 0) ' Ja, in Zeile

TB.Rows(Z1).Resize(Zeile - Z1 + 1).Locked = True 'vorher sperren
TB.Rows(Zeile).Resize(LR - Zeile + 1).Locked = False 'Rest bis Ende ungesperrt
End If
End If
End Sub


- Ausserdem das hier noch im Codebeich von "DieseArbeitsmappe"
Private Sub Workbook_Open()

Call Zeilenschutz
End Sub


Jetzt wird das Makro beim Öffnen der Datei aufgerufen.

LG UweD
Anzeige
AW: Zellen der Vorwoche sperren
02.10.2024 11:29:25
UweD
Ist aber auch der Wurm drin

Schreibfehler vbjes

Sub Zeilenschutz()

Dim TB As Worksheet, Zeile As Long, Z1 As Integer, LR As Long, D1904 As Integer, DatumW As Long
Dim LTagVorw As Date

If MsgBox("Vorwoche so korrekt erfasst", vbYesNo + vbQuestion, "Zeilenschutz") = vbYes Then
Set TB = Sheets("Mastermonat")
TB.Activate

Z1 = 7 'erste DatenZeile

TB.Protect Userinterfaceonly:=True 'Blatt schützen, aber Änderungen durch Code zulassen

'Bei Datumswert 1904 Aktivierung
If ThisWorkbook.Date1904 Then D1904 = 1462

LR = TB.Cells(TB.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte A

LTagVorw = Date - (Weekday(Date, vbMonday) - 1) - 2 ' Erster Tag der Woche - 2 Tage = Samstag Vorwoche

DatumW = CLng(LTagVorw) - D1904

Zeile = WorksheetFunction.CountIf(TB.Columns(1), DatumW) 'Ist das Datum in Tabelle vorhanden
If Zeile > 0 Then
Zeile = WorksheetFunction.Match(DatumW, TB.Columns(1), 0) ' Ja, in Zeile

TB.Rows(Z1).Resize(Zeile - Z1 + 1).Locked = True 'vorher sperren
TB.Rows(Zeile + 1).Resize(LR - Zeile + 1).Locked = False 'Rest bis Ende ungesperrt
End If
End If
End Sub
Anzeige
AW: Zellen der Vorwoche sperren
02.10.2024 12:43:42
Maverick57
Hallo UweD,

danke für deine Mühe!
Aber das Makro soll nicht starten, wenn der MA die Arbeitsmappe öffnet, sondern erst, wenn er ein entsprechendes Dialog-Fenster beantwortet hat!
Beipiel:
MA will am Dienstag, 08.10.2024 die Zeit eintragen, wenn er/sie zu arbeiten beginnt ("Einstempeln").
Jetzt soll ein Dialog aufgehen (den habe ich schon, auch getestet) "Willst Du die Daten der Wochwoche übernehmen, oder hast du noch Änderungen vorzunehmen?"
Bei Antwort "Ja" => Sperren der vorherigen Daten, bei Antwort "Nein" => Möglichkeit, die Daten zu editieren.
Dann zweite Abfrage (gibt's auch schon): "Daten jetzt ok?" "Ja" => es wird jetzt gesperrt, "Nein" => Schleife läuft nocheinmal durch.

Hab mal versucht, den Ablauf darzustellen:
Userbild

LG Rudi
Anzeige
AW: Zellen der Vorwoche sperren
02.10.2024 12:49:12
UweD
Lies dir den Code doch erst mal durch.

- Die Abfrage JaNein ist doch drin.
- Auch die eigentliche Logik um die Zeilen zu sperren ist doch vorhanden und läuft.

Das Drumherum kannst du doch sicher anpassen.

LG UweD
AW: Zellen der Vorwoche sperren
03.10.2024 12:00:47
schauan
Hallöchen,

"Jetzt soll ein Dialog aufgehen (den habe ich schon, auch getestet) "Willst Du die Daten der Wochwoche übernehmen, oder hast du noch Änderungen vorzunehmen?"
Bei Antwort "Ja" => Sperren der vorherigen Daten, bei Antwort "Nein" => Möglichkeit, die Daten zu editieren.
Dann zweite Abfrage (gibt's auch schon): "Daten jetzt ok?" "Ja" => es wird jetzt gesperrt, "Nein" => Schleife läuft nocheinmal durch."


Geht da wirklich ein Dialog auf oder eine Msgbox?

Bei einem Dialog kannst Du die Eigenschaft Showmodal auf False setzen. Das ermöglicht Dir eine Bearbeitung des Blattes bei angezeigtem Dialog.
Du könntest also im Prinzip damit einen Hinweis ausgeben im Prinzip ... letzte Möglichkeit zur Änderung, Datenübernahme mit "ausführen" bestätigen ...

Der Anwender kann dann den Dialog beiseite schieben, ändern und dann bestätigen oder gleich bestätigen ...

Danach kannst Du ja eine Meldung ausgeben, "Daten übernommen" oder "Vorgang abgebrochen" oder was in der Art ...

Anzeige
AW: Zellen der Vorwoche sperren
03.10.2024 12:39:46
Maverick57
Hallo schauan,

danke für den Hinweis!
Im Moment ist es tatsächlich eine MsgBox!
Ich werde heute gleich mal den Dialog ausprobieren! :-)

LG Rudi
AW: Zellen der Vorwoche sperren
03.10.2024 17:53:30
Maverick57
Hallo schauan,

hab dein Skript gerade getestet, läuft einwandfrei!
Vielen Dank für den Hinweis MsgBox vs. Dialogfenster!

LG Rudi
Anzeige
AW: Zellen der Vorwoche sperren
30.09.2024 22:26:42
Maverick57
Hallo Waldemar II,
es sind nicht zu viele MitarbeiterINNEN, sondern zu viele verschiedene Arbeistzeit-Modelle. Es handelt sich um eine mittelständische Werbeagentur, und man wird es nicht schaffen, den "Kreativen" ein Korsett gleicher Arbeitszeitmodelle anzulegen ;-)
Und da die MitarbeiterINNEN auch noch im z.T. im Home Office tätig sind, ist eine zentrale Pfelge durch den Admin nicht realisierbar.
Makros sind machbar, wir haben sie an vielen anderen Stellen auch im Einsatz.
Anzeige
AW: Zellen der Vorwoche sperren
02.10.2024 23:58:58
Waldemar II
Frage außerhalb des Themas: Warum MitarbeierINNEN? 🤔
AW: Zellen der Vorwoche sperren
03.10.2024 11:43:01
Maverick57
Hallo Waldemar II,
weil hier sehr viel Wert auf Gendern gelegt wird ;-)

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige