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

Zellen zwischen 16.30 und 7.00 Uhr sperren

Forumthread: Zellen zwischen 16.30 und 7.00 Uhr sperren

Zellen zwischen 16.30 und 7.00 Uhr sperren
janwe02
Hallo und guten Morgen,
ich suche einen VBA code zum sperren bestimmter Zellen, jedoch nur zwischen 16.30 Uhr und 7.00 Uhr Morgens.
Die Sperre soll nur gegen Passwort aufgehoben werden können.
Hintergrund: Eine Bestelldatei ist freigegeben und soll von versch. Usern eben nur bis max 16.30 bearbeitet werden , dann ist schluss bis zum nächsten tag.
Ich habe schon viel gestöbert zum Tabellen oder Zellenschutz aber leider nichts gefunden was eben die zeiteinschränkung bewirkt
Würde mich freuen wenn jemand helfen kann
Danke jan
Anzeige
AW: Zellen zwischen 16.30 und 7.00 Uhr sperren
31.03.2012 09:26:02
Hajo_Zi
Hallo Jan,
das geht nur über Tabellenschutz, also alle Zellen sind gesperrt. Du mußt eine Prozedur laufen lassen die die Tabelle sperrt. Sind es alle Tabelle der Datei? Wie genau möchtest Du das haben. Läuft die Prozedur im Sekundenabstand, kann es Leistung kosten.

Anzeige
AW: Zellen zwischen 16.30 und 7.00 Uhr sperren
31.03.2012 09:49:26
janwe02
Moin Hajo,
es kann / soll die gesamte Datei gesperrt werden oder eben auch alle Tabellenblätter (Dann können die User ggf im schreibgeschützten Modus noch die Daten lesen). Wichtig ist nur das nach 16.30 Uhr nur noch Passwortbefugte die Datei ändern können.
Die Prozedur im sekundenabstand ? Verstehe ich das so das sie im sekundenabstand gegen die Zeit prüft ?
Dann reicht auch ein grösserer Abstand bspw.Minute.
Ich hab die Mastertabelle mal hochgeladen
. Unter D,E,F und H dürfen / sollen zwischen in bestimmten Zeilen (bsp D5:H11)die ich freigegeben habe Einträge gemacht werden dürfen. Aber eben nur in der besagten Zeit. Danach kann das ganze Blatt gesperrt sein, damit Manipulationen ausgeschlossen sind.
https://www.herber.de/bbs/user/79622.xls
Gruss Jan
Anzeige
AW: Zellen zwischen 16.30 und 7.00 Uhr sperren
31.03.2012 09:53:26
Hajo_Zi
Hallo Jan,
die Datei habe ich jetzt nicht runter geladen. Die Zellen formatieren sehe ich nicht als Problem.
Falls jemand die Makro deaktiviert, nützt Dir der gesamte Code nichts.
Das VBA Projekt sollte geschützt sein, da dort das Passwort steht.
In Excel ist aber nichts sicher.
Ich versuiche jetzt mal eine Code zu erstellen.
Gruß Hajo
Anzeige
AW: Zellen zwischen 16.30 und 7.00 Uhr sperren
31.03.2012 10:25:38
Hajo_Zi
Hallo Jan,
' ************************************************************* _ ' Modul: DieseArbeitsmappe Typ = Element der Mappe(Sheet, Workbook, ...) ' ************************************************************** Option Explicit _ ' Variablendefinition erforderlich '************************************************** '* H. Ziplies * '* 31.03.12 * '* erstellt von HajoZiplies@web.de * '* http://Hajo-Excel.de/ * '************************************************** Private Sub _ Workbook_Activate() 'Sperren Starten Sperren End Sub Private Sub _ Workbook_Deactivate() 'sperren Abschalten Ende End Sub Private Sub _ Workbook_BeforeClose(Cancel As Boolean) Ende ' Sperren _ beenden End Sub Private Sub _ Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Ende ' Sperren _ beenden End Sub


' **************************************************************
' Modul: mdl_gesperrt Typ = Allgemeines Modul
' **************************************************************

Option Explicit ' Variablendefinition erforderlich
Option Private Module ' Makro nicht unter Extra, Makro sichtbar
'**************************************************
'* H. Ziplies *
'* 31.03.12 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/ *
'**************************************************
' das Schreiben der Startzeit auf eine Variable hat den Vorteil das die
' Prozedur leichter angehalten werden kann
Public DaEt As Date ' nächste Startzeit
Public Const DaZeitEnde As Date = "16:30" ' Ende Zeit
Public Const DaZeitStart As Date = "10:23" ' Start Zeit
Public Const DaZeit As Date = "00:01:00" ' Zeitabstand prüfen
Dim WsTabelle As Worksheet
Sub Sperren()
For Each WsTabelle In Sheets
If Time <= DaZeitStart Or Time >= DaZeitEnde Then
WsTabelle.Protect ("Gruß Gott")
Else
WsTabelle.Unprotect ("Gruß Gott")
End If
Next WsTabelle
Application.OnTime Time + DaZeit, "Sperren"
End Sub
Sub Ende()
On Error Resume Next ' Fehlerroutine von Excel ausschalten
Application.OnTime EarliestTime:=DaEt, Procedure:="Sperren", Schedule:=False
On Error GoTo 0 ' Fehlerroutine von Excel einschalten
End Sub
Gruß Hajo
Anzeige
AW: Zellen zwischen 16.30 und 7.00 Uhr sperren
31.03.2012 10:30:48
Hajo_Zi
Hallo Jan,
der Code im Modul war nicht ganz korrekt.
Option Explicit                                     ' Variablendefinition erforderlich
Option Private Module                               ' Makro nicht unter Extra, Makro sichtbar
'* H. Ziplies                                     *
'* 31.03.12                                       *
'* erstellt von HajoZiplies@web.de                *
'* http://Hajo-Excel.de/
' das Schreiben der Startzeit auf eine Variable hat den Vorteil das die
' Prozedur leichter angehalten werden kann
Public DaEt As Date                                 ' nächste Startzeit
Public Const DaZeitEnde As Date = "16:30"           ' Ende Zeit
Public Const DaZeitStart As Date = "10:23"          ' Start Zeit
Public Const DaZeit As Date = "00:01:00"            ' Zeitabstand prüfen
Dim WsTabelle As Worksheet
Sub Sperren()
For Each WsTabelle In Sheets
If Time = DaZeitEnde Then
WsTabelle.Protect ("Gruß Gott")
Else
WsTabelle.Unprotect ("Gruß Gott")
End If
Next WsTabelle
DaEt = Time + DaZeit
Application.OnTime DaEt, "Sperren"
End Sub
Sub Ende()
On Error Resume Next                            ' Fehlerroutine von Excel ausschalten
Application.OnTime EarliestTime:=DaEt, Procedure:="Sperren", Schedule:=False
On Error GoTo 0                                 ' Fehlerroutine von Excel einschalten
End Sub
Gruß Hajo
Anzeige
AW: Zellen zwischen 16.30 und 7.00 Uhr sperren
31.03.2012 11:12:41
janwe02
Hallo Hajo , erstmal vielen vielen Dank. Aber ich bekomme das nicht zum laufen.
Ich habe den code mdl_gesperrt in ein allgemeines Modul kopiert und den anderen Code unter : Diese Arbeitsmappe
läuft aber irgendwie gar nicht. auch habe ich die Systemzeit bei mir verändert brachte aber auch nichts.
Wo ist bloss mein Fehler?
Gruss Jan
Anzeige
AW: Zellen zwischen 16.30 und 7.00 Uhr sperren
31.03.2012 11:18:48
Hajo_Zi
Hallo Jan,
in meiner Datei lief es. Deine Datei sehe ich nicht. Nach der Beschreibung ist es am korrekten Ort. Die Datei hast Du schon geschlossen, nach Eintragung Code?
Gruß Hajo
AW: Zellen zwischen 16.30 und 7.00 Uhr sperren
31.03.2012 12:28:38
janwe02
Sorry, ich habe meine grauen dann mal richtig angestrengt.
Lag bei mir. Ich hatte den Zellschutz für einige zellen herausgenommen und dann das gesamte Ws gesperrt. so ging das natürlich nicht.
Jetzt klappt das PERFEKT. Tausend dank
Nun werde ich ne kleine Msgbox einbauen mit den Öffnungzeiten der Datei :-)
Gruss Jan
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zellen zwischen 16.30 und 7.00 Uhr sperren


Schritt-für-Schritt-Anleitung

Um Zellen in einer Excel-Datei zwischen 16.30 Uhr und 7.00 Uhr zu sperren, benötigst Du einen VBA-Code. Hier sind die Schritte, die Du befolgen solltest:

  1. Öffne Deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) und wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    Public DaEt As Date
    Public Const DaZeitEnde As Date = "16:30"
    Public Const DaZeitStart As Date = "07:00"
    Public Const DaZeit As Date = "00:01:00"
    Dim WsTabelle As Worksheet
    
    Sub Sperren()
       For Each WsTabelle In Sheets
           If Time >= DaZeitEnde Or Time < DaZeitStart Then
               WsTabelle.Protect ("Passwort") ' Passwort hier anpassen
           Else
               WsTabelle.Unprotect ("Passwort") ' Passwort hier anpassen
           End If
       Next WsTabelle
       DaEt = Time + DaZeit
       Application.OnTime DaEt, "Sperren"
    End Sub
    
    Sub Ende()
       On Error Resume Next
       Application.OnTime EarliestTime:=DaEt, Procedure:="Sperren", Schedule:=False
       On Error GoTo 0
    End Sub
  4. Füge den Code in das DieseArbeitsmappe-Modul ein:

    • Klicke mit der rechten Maustaste auf DieseArbeitsmappe und füge den folgenden Code hinzu:
    Private Sub Workbook_Activate()
       Sperren
    End Sub
    
    Private Sub Workbook_Deactivate()
       Ende
    End Sub
  5. Schließe den VBA-Editor und speichere Deine Datei als Excel-Makro-enabled Workbook (*.xlsm).

  6. Teste den Code, indem Du die Datei öffnest und die aktuelle Zeit außerhalb der erlaubten Zeiten setzt.


Häufige Fehler und Lösungen

  • Fehler: Code läuft nicht

    • Stelle sicher, dass Du den Code an den richtigen Stellen eingefügt hast: einen im Modul und den anderen im DieseArbeitsmappe.
  • Fehler: Zellen nicht gesperrt

    • Überprüfe, ob das Passwort korrekt ist und ob Du die Zellen vorher nicht manuell entsperrt hast.
  • Fehler: Zeit nicht korrekt erkannt

    • Achte darauf, dass die Systemzeit korrekt eingestellt ist.

Alternative Methoden

Falls Du keinen VBA-Code verwenden möchtest, kannst Du die Zellen manuell sperren, allerdings wird dies zeitaufwendig und anfällig für menschliche Fehler sein. Eine andere Möglichkeit ist die Verwendung von Excel-Formularen oder -Steuerelementen, um die Eingaben zu regulieren, jedoch bieten diese keine zeitbasierte Sperre.


Praktische Beispiele

  • Beispiel 1: Du kannst die Zellen D5:H11 für die Benutzer freigeben, indem Du den Bereich im Code spezifizierst. Ändere den Code entsprechend, um nur diese Zellen zu schützen.

  • Beispiel 2: Füge eine MsgBox hinzu, die die Benutzer über die Öffnungszeiten informiert:

    MsgBox "Die Datei kann nur von 07:00 bis 16:30 bearbeitet werden."

Tipps für Profis

  • Excel-Datei sperren: Um die gesamte Datei zu schützen, kannst Du die Funktion Workbook.Protect verwenden.
  • Verwendung von Application.OnTime: Diese Funktion ermöglicht es, den Code in regelmäßigen Abständen auszuführen, was eine dynamische Kontrolle über die Sperrzeiten ermöglicht.

FAQ: Häufige Fragen

1. Frage
Wie kann ich eine Excel-Datei sperren?
Antwort: Du kannst die Datei mit dem VBA-Befehl Workbook.Protect schützen und ein Passwort festlegen.

2. Frage
Kann ich auch Bilder in Excel sperren?
Antwort: Ja, Du kannst das Bild sperren, indem Du es in ein geschütztes Arbeitsblatt einfügst. Nutze dazu ebenfalls den Tabellenschutz.

3. Frage
Funktioniert dieser Code in allen Excel-Versionen?
Antwort: Der Code sollte in den meisten modernen Excel-Versionen (Excel 2010 und höher) funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige