Code vorübergehend per Code ändern!
#1
Hallo liebe Excelgemeinde,


schön zu sehen, wie das Forum hier sich entwickelt! :15:

Ich bräuchte mal wieder eure Hilfe, und zwar habe ich in einen Code per "Worksheet Change" Ereignis am Anfang des Codes das hier stehen "ActiveSheet.Unprotect Password:="kennwort"" und am Ende des Codes "ActiveSheet.Protect Password:="kennwort"" stehen, das heißt bei jede Änderung im Blatt wird der Schutz vorübergehen aufgehoben und dann wieder scharf gemacht!
Das ist so gewollt und funktioniert auch super, dass nur in bestimmte Spalten etwas verändert werden kann! Manchmal möchte ich aber auch die schreibgeschützten Zellen bearbeiten und dazu müsste ich jedesmall das Blattschutz aufheben und Kennwort eingeben und nach jede Änderung das gleich wieder! Klar könnte ich in den Code die zwei genannten Codeteile auskommentieren aber das möchte ich nicht, bzw. würde ich gerne ein Button eifügen der diese zwei o.g. Codeteile voräbergehen auskommentiert und beim erneuten drücken das wieder scharf schaltet!

Ich hoffe Ihr könnt mich verstehen!? (ich glaube ich versteh selbst nicht was ich geschrieben habe! :) Huh


Vielen Dank im Voraus
VG
Alexandra
Top
#2
Hallo Alexandra,

Ich würde eine Checkbox nehmen und mit einer auf Abfrage. ob an oder aus verzweigen.
Gruß Atilla
Top
#3
Hi Atilla,


vielen Dank für dein Anwort, das ist eine sehr gute Idee! Werde ich auf jeden Fall ausprobieren!

Jedoch interessiert mich das sehr wie man auch mit dem Code das erreicht!?

Folgendes:

Wenn ich auf Button1 klicke soll in dem Modul der Tabelle1 der Text gesucht werden "ActiveSheet.Unprotect" und davor ein Hochkomma=Auskommentieren gemacht werden!

Wenn ich auf Button2 klicke soll das Hochkomma wieder raus!

Geht das, wenn ja wie?


Danke
VG
Alexandra
Top
#4
Hallo Alexandra,

ich würde den Code nicht verändern, sondern wie Du selber angedacht hast mit zwei Buttons (oder einem ToggleButton) lösen. Bei den einem schaltest entsperrst Du das Tabellenblatt und schaltest die Ereignisse aus, bei dem andern schaltest Du die Ereignisse wieder ein und sperrst das Tabellenblatt wieder.
Gruß Stefan
Win 10 / Office 2016
Top
#5
Hallo Steffl,


ja das wäre normalerweise kein Problem, aber das Problem ist WorksheetChange, die "ActiveSheet.Protect" ist in dem Code des WorksheetChange beinhaltet! Das heißt ich kann den Blattschutz ausschalten per Button aber wenn ich was ändere ist der SChreibschutz wieder da!

Kann man den nicht einfach dieses Hochkomma rein und raus machen per Button?


Danke
VG
Alexandra
Top
#6
Hallo Alexandra,

Du hast das mit dem Ausschalten der Ereignisse überlesen. Wenn Du das auch noch tun würdest, wird das Worksheet_Change nicht mehr gefeuert.

Code:
Private Sub CommandButton21_Click()
   ActiveSheet.Unprotect "Password"
   Application.EnableEvents = False
End Sub
Gruß Stefan
Win 10 / Office 2016
Top
#7
Hallo Steffl,


ja schon, aber dann wird der Restcode des Worksheets-Change Ereignisses auch nicht ausgeführt!!!

Aus diese Grund möchte ich einfach nur dieses Hochkomma rein und wieder raus!!! Wenn es möglich ist, würde ich sehr gerne wissen wie?

Vielen Dank im voraus
LG
Alexandra
Top
#8
Hallo Alexandra,

vom Code her ist es weniger Aufwand, wenn Du es mit einer Chekbox oder wie Steffan vorschlägt mit einem Toggelbutton machst.

Hier ein Beispiel, wie Du es einsetzen kannst:

Code:
Private Sub CheckBox1_Click()
   If Me.CheckBox1 Then
      ActiveSheet.Unprotect
   Else
      ActiveSheet.Protect
   End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
   If Me.CheckBox1 = False Then ActiveSheet.Unprotect
      'Dein bisheriger Code
   If Me.CheckBox1 = False Then ActiveSheet.Protect
End Sub
Code nachträglich ergänzt und erweitert.

Mit dem Toggelbutton geht das genauso.

Code mit Code bearbeiten geht sicher etwas aufwändiger.
Gruß Atilla
Top
#9
Hallo Alexandra,

ich halte dies immer noch für eine schlechte Lösung aber Du bekommst zwei Links.

Homepage von Monika Can

Hier auf der linken Seite Lesenwertes für Fortgeschrittene auswählen und danach Programmierungen am Visual Basic Editor auswählen.

Code per Code manipulieren

Ich selber würde eher das mir nicht bekannte Change-Ereignis ändern.
Gruß Stefan
Win 10 / Office 2016
Top
#10
Hallo Atilla,


mit

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Me.CheckBox1 = False Then ActiveSheet.Unprotect
       'Dein bisheriger Code
    If Me.CheckBox1 = False Then ActiveSheet.Protect
End Sub

funktioniert es prima! Danke dafür!!!

@Steffl, danke für die Links, diese sind sehr interresant, werde mich mal da durchlesen, mal sehen ob ich was schönes finde!!


Vielen Dank euch beiden & schönen Abend noch!
LG
Alexandra
Top


Gehe zu:


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