Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

VBA - Problem bei gesetztem "ActiveSheet.Protect"


Betrifft: VBA - Problem bei gesetztem "ActiveSheet.Protect" von: Boory@gmx.net
Geschrieben am: 16.08.2016 08:41:29

Hallo Forum,

in einer Zeiterfassung, in der die MA sich per Transponder-Scan einloggen, wird VBA-seitig der Blattschutz (hier PW: 12345) aufgehoben, der Wert eingetragen und dann wieder geschützt (ActiveSheet.Unprotect / ActiveSheet.Protect). Dies funktioniert problemlos! Nun möchte ich über ein Userform per Call ein Modul aufrufen, in dem zum Eintrag eines neuen "Monats-Ersten" alle alten Einträge gelöscht werden, da der MA ja die geschützten Zellen nicht selbst löschen kann. Dann wird ein "SaveAs" ausgeführt, in dem die Datei mit Namen des MA und aktuellem Monat gespeichert wird und sich das Userform dann schließt. So weit die Theorie... :o)
Wenn ich jetzt im Sheet selbst den VBA-Code mit "ActiveSheet.Protect" beende, bekomme ich eine Fehlermeldung -- Debuggen. Diese tritt aber nur auf, wenn die gefüllten Zellen (aktuell per Button) geleert werden, da das Sheet ja dafür ebenfalls unprotected werden muss (geschieht im Modul11). Kommentiere ich das "ActiveSheet.Protect..." am Codeende im Worksheet aus, funktioniert der Code wie gewünscht.

Was übersehe ich...??? Datei hier:

https://www.herber.de/bbs/user/107639.xlsm

Blattschutz-PW: 12345

Viele Grüße - Boory

  

Betrifft: AW: VBA - Problem bei gesetztem "ActiveSheet.Protect" von: Matthias L
Geschrieben am: 16.08.2016 10:33:49

Hallo

Leider kann ich das nicht komplett testen, da schon beim Laden des Formulares
der Debugger anspringt.
Der DTPicker ist nicht auf meinem System vorhanden, deshalb bekomme ich den Fehler
Ich kann aber auch nicht den ungültigen Verweis entfernen da Du ein VBA-Kennwort gesetzt hast.
Somit komme ich nicht an die Verweise(deaktiviert).

Beim direktem Ausführen des Code aus Modul11 läuft alles sauber durch.
Aber evtl, solltest Du die Events(Ereignisprozedur) erst ausschalten

Sub Delete_Content_only()

' Delete_Content Makro

ActiveSheet.Unprotect "12345"
 Application.EnableEvents = False
  Range("C3:C33,D3:D33,E3:E33").ClearContents
  Range("D3").Select '<- eigentlich nicht nötig
 Application.EnableEvents = True
ActiveSheet.Protect "12345"

End Sub

da sonst das Worksheet_Change des Erfassungsblattes immer wieder gestartet wird.
Evtl hilft das ja schon.

Gruß Matthias


  

Betrifft: AW: VBA - Problem bei gesetztem "ActiveSheet.Protect" von: ChrisL
Geschrieben am: 16.08.2016 10:34:57

Hi

Wo wie was genau konnte ich nicht erkennen, aber das Problem ist folgendes. Durch das Löschen wird das Change Event angesprochen und durch die Zellenänderungen im Change-Ereignis erneut ein Change Ereignis... irgendwie so :)

Jedenfalls musst du das Event beim Löschen deaktivieren:

Sub Delete_Content_only()
'
' Delete_Content Makro
'
On Error Resume Next
Application.EnableEvents = False
With ActiveSheet
    .Unprotect "12345"
    .Range("C3:C33,D3:D33,E3:E33").ClearContents
    .Protect "12345"
End With
Application.EnableEvents = True
End Sub

cu
Chris


  

Betrifft: AW: VBA - Problem bei gesetztem "ActiveSheet.Protect" von: Boory@gmx.net
Geschrieben am: 16.08.2016 10:54:15

Hallo Chris und Matthias,

genau DAS war die Lösung. ich hab quasi das Event in eine Schleife gezwungen.
Blind -- Wald -- Bäume... :o)

Ganz lieben Dank! Ich hab's so eingebaut und jetzt läuft das Script so, wie ich es wollte!

Vielen Dank

Boory


Beiträge aus den Excel-Beispielen zum Thema "VBA - Problem bei gesetztem "ActiveSheet.Protect""