PDA

Vollständige Version anzeigen : Excel Kommentar schreibschützen (read-only) via VBA?


Thorsten M.
28.03.2012, 10:18
Hallo!

Ich schreibe per VBA Infotexte in das Kommentar eines geänderten Feldes. Das Kommentar soll aber nicht von Hand gelöscht oder geändert werden können sondern nur von meiner VBA-Routine.

Folgenden Code habe ich gefunden. Er schaltet den Rechtsklick ab, wenn das Feld ein Kommentar enthält. Das funktioniert so weit aber das Problem ist, dass der Benutzer auch über "Einfügen" => "Kommentar bearbeiten" etwas verändern kann.

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

If Not Target.Comment Is Nothing Then
Application.CommandBars("Cell").Enabled = False
Else
Application.CommandBars("Cell").Enabled = True
End If

End Sub

Gibt es da eine Möglichkeit das Kommentar zu sperren oder sofort wieder rückgängig zu machen, wenn jemand das Kommentarfeld ändert?

Grüße,
Thorsten

User Alfred
30.03.2012, 09:07
Du könntest mittels VBA Deine komplette Mappe schützen. Diese wäre dann vor jedem Zugriff gesperrt. Und wenn Du einträge über VBA machen willst, dann gibts auch nen Eintrag, wo Du für diesen Vorgang den Blattschutz kurzzeitig aushebelst. Darfst nur nicht vergessen, nach Deiner Routine den Schutz wieder zu setzen. Schau mal hier.

Blattschutz setzen:

ActiveSheet.Protect Password:="Passwort", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True


Blattschutz aushebeln:

ActiveSheet.Unprotect Password:="Passwort"


Somit könntest Du in "Diese Arbeitsmappe" schon mal folgendes eintragen, damit Dein Blatt schon mal unmittelbar nach dem Start geschützt ist.

Option Explicit

Private Sub Workbook_Open()
ActiveSheet.Protect Password:="Passwort", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub



Vielleicht hilft Dir das schon mal weiter.

Gruß Alf

GMG-CC
30.03.2012, 21:14
Hallo Thorsten,

in memory of good, old times: Ich habe in den ersten drei Klassen in der Schule noch ab und zu mit dem Rohrstock welche auf die Finger bekommen. DAS hat geholfen (und ich bin Jahrgang '45).

OK, schreibe in DieseArbeitsmappe folgenden Code:Option Explicit

Private Sub Workbook_Open()
Call Tabelle1.Kommentare_neu_schreiben
End Sub
Und in Tabelle1 diese Zeilen:
Option Explicit

Sub Kommentare_neu_schreiben()
'... weil manche User einfach nur krank sind
Dim ErsteZeile As String
ErsteZeile = "Hugo Hurtig:"
'Alle Kommentare erst einmal löschen
Range(Cells(1, 1), ActiveCell.SpecialCells(xlLastCell)).ClearComments
'und neu schreiben
With Range("A1")
.AddComment
.Comment.Visible = False
.Comment.Text Text:=ErsteZeile & Chr(10) _
& "Text des ersten Kommentars"
End With
With Range("C4")
.AddComment
.Comment.Visible = False
.Comment.Text Text:=ErsteZeile & Chr(10) _
& "Text des zweiten Kommentars"
End With
With Range("A9")
.AddComment
.Comment.Visible = False
.Comment.Text Text:=ErsteZeile & Chr(10) _
& "Text des x_ten Kommentars in A9"
End With
'...
End SubJa, ich weiß, dass es kürzer geht :). Und ich denke, dass du da selber erkennst, was da passiert. Bei jedem Öffnen der Mappe wird jeder vorhandene Kommentar gelöscht und komplett neu so eingetragen, wie du ihn im Code erstellt hast.

Ganz fies wäre natürlich, vor dem Speichern jedes Feld zu überprüfen und bei Veränderungen per MsgBox einen Hinweis zu geben, dass wegen des verbotenen Handelns eine Meldung an die GL erfolgt. Zumindest am Sonntag würde das ja passen (es ist der erste Tag im April ;))

Thorsten M.
03.04.2012, 10:12
Hallo,

vielen Dank für die Antworten. Es ist so, dass alles andere (außer Kommentaren) erlaubt sein soll. D.h. ich kann leider nicht alles generell sperren.

Bei den Kommentaren ist es so, dass diese erhalten bleiben sollen. In den Kommentaren steht, wer, was, wann mit dem Feld gemacht hat. Also quasi eine Logdatei für jedes Feld, damit man sieht, wer da immer herum geändert hat.

Das funktioniert auch schon und ein Rechtsklick wird verhindert. Wenn aber jemand das Kommentar löschen will, dann kann er das aktuell noch über das Menü oben.

Grüße,
Thorsten

GMG-CC
03.04.2012, 22:07
Hallo Thorsten,

... und wie werden die Kommentare aktualisiert? Per VBA? Durch den Admin? ...

Bei meiner VBA-Lösung kann User so viel löschen, wie er/sie will, beim nächsten Öffnen der Datei steht alles wieder so drin, wie vor dem Löschen.

Thorsten M.
04.04.2012, 07:57
Hallo,

die Kommentare werden per VBA aktualisiert und der Benutzer soll nichts verändern/löschen können.
Bei Deinem Beispiel bleiben die Kommentare (bei mir zumindest) nicht erhalten, wenn ich sie "händisch" lösche (Rechtsklick => Kommentar löschen).

Grüße,
Thorsten

GMG-CC
04.04.2012, 23:22
die Kommentare werden per VBA aktualisiert und der Benutzer soll nichts verändern/löschen können.
Wenn ich das wörtlich nehme: Das geht IMHO nicht.

Bei Deinem Beispiel bleiben die Kommentare (bei mir zumindest) nicht erhalten, wenn ich sie "händisch" lösche (Rechtsklick => Kommentar löschen).
Dein "(bei mir zumindest)" macht mir die Formulierung schwer ... Bei mir klappt es nämlich gut. Und das muss es auch, denn beim nächsten Öffnen der Datei wird der (hier) hart gecodete Teil, sprich die Kommentare, wieder rein geschrieben.

Was ohne riesigen Aufwand möglich ist: Alle Kommentare beim öffnen der Datei in ein Array speichern und beim Speichern einfach wieder im Original zurückschreiben. Das würde Änderungen bei den comments berücksichtigen, die irgendwann einmal VOR dem öffnen gemacht worden sind.