Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Blattschutz aufheben
#1
Hallo,

ich habe folgendes Makro zusammengebaut.
Damit möchte ich, wenn in der Spalte G der Wert einer Zelle auf "Ja" geändert wird  in bestimmten Zellen dieser Zeile Userdaten, Datum, etc. eingetragen wird.
Das Blatt ist geschützt weil der User manuell keine Daten in Spalten die vom Makro versorgt werden eintragen soll.
Ich hebe zuerst den Schutz auf und lasse dann das Makro laufen.
Der objUser.FullName wird noch eingetragen dann bricht das Makro jedoch ab, wenn das Datum in die Spalte 10 eingetragen werden soll (Laufzeitfehler '1004' Anwendungs- oder objektdefinierter Fehler)
Es schaut so aus als würde der Blattschutz wieder aktiv sein.
Wenn ich vor jedem eintragen der weiteren Daten den Blattschutz wieder per Makro aufhebe, funktioniert es.
Wie kann ich dauerhaft den Blattschutz aufheben oder den Code anders gestalten?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Call Schutz_aufheben
Application.ScreenUpdating = False
   
   Dim KeyCells As Range
   Set KeyCells = Range("G:G")

   Dim Netzwerk As Object
   Dim objSysInfo As Object, objUser As Object
   
   Set Netzwerk = CreateObject("wscript.network")
   Set objSysInfo = CreateObject("ADSystemInfo")
   Set objUser = GetObject("LDAP://" & objSysInfo.UserName)

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
   Is Nothing Then
         
   If Cells(Target.Row, 7).Value = "Ja" Then
   Cells(Target.Row, 8) = objUser.FullName
   Cells(Target.Row, 10) = Date
   Cells(Target.Row, 11) = Now
   Cells(Target.Row, 12) = Netzwerk.UserName
   Cells(Target.Row, 13) = Netzwerk.Computername
   End If
End If

Call Schutz_aktivieren
Application.ScreenUpdating = True

End Sub
LG Herbert
Windows 10
Office 365
Antworten Top
#2
Hallo Herbert,

du könntest zB den Blattschutz unter Workbook_Open so setzen, dass VBA Änderungen vornehmen darf.
Code:
Private Sub Workbook_Open()
Sheets("DeinBlatt").Protect Password:="DeinPasswort", UserInterfaceOnly:=True
End Sub
Das hat den großen Vorteil, dass du den Schutz nicht aufheben musst, du ersparst dir somit die Prozeduren Schutz_aufheben und Schutz_aktivieren.
Schöne Grüße
Berni
Antworten Top
#3
Hallo Berni,

das funktioniert.
Das ist genial, damit erspare ich mir in Zukunft viele Dinge.

Danke!
LG Herbert
Windows 10
Office 365
Antworten Top
#4
Hallo, :19:

sobald du im "Worksheet_Change" in Zellen etwas änderst - eigentlich sollte man das immer machen - muss du die Events ausschalten, da sich der Code sonst jedesmal selbst neu aufruft. Das kann zu dem von dir beschriebenen Verhalten führen.


Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Fin
    Application.EnableEvents = False
    Call Schutz_aufheben
    ' dein weiterer Code
Fin:
    Call Schutz_aktivieren
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub

Und schau auch mal hier: :21:

Schutz...
________
Servus
Case
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste