Supportnet / Forum / Tabellenkalkulation
Blattschutz über Code aufheben ?
Frage
Habe schon selbst danach gesucht, doch noch keine zufriedenstellende Lösung gefunden .....
Ich habe in EXCEL eine START-Seite als inhaltlich veränderbare Datenbank erstellt auf welche die einzelnen Formeln der Tabellen 1-4 zugreifen um sofort mit den neuesten Vorgaben kalkulieren zu können. Ein Beispiel hierzu wären unter anderem die sich ständig verändernden Benzinpreise oder auch diverse MwSt-Sätze im In-und Ausland, und vieles andere mehr .....
Um keinen Unfug mit den veränderbaren WERTEN der Datenbank anstellen zu können (es arbeiten mehrere Leute damit !), hätte ich gerne den Zugang zu den veränderbaren Werten der Datenbank über eine Verbindung mit dem Blattschutz geschützt. Zu diesem Zweck habe ich zunächst in Zelle (B1) nachfolgende Formel geschrieben:
=WENN(ISTLEER(A1);"Bitte geben Sie Ihren Namen in das Feld( A1) ein";+WENN(A1="Walter";"OK!";"Bitte tragen Sie den richtigen Namen ein!"))
In (B2) die Formel:
=WENN(ISTLEER(A2);"Bitte geben Sie Ihr Kennwort in das Feld (A2)ein";+WENN(A2="paulchen";"OK!";"Falsches Kennwort !"))
In (B3) die Formel:
=WENN(ISTLEER(A2);"Resultat:";+WENN(B2="Falsches Kennwort !";"NEIN!";"JA!"))
Nun hätte ich gerne, dass; wenn in Zelle B3 „JA!“ erscheint, der Blattschutz aufgehoben wird um die dort stehenden Werte verändern zu können. Steht jedoch „NEIN!“, soll der Blattschutz bestehen bleiben !
Wer weiß Rat ??
Und wer ist so nett und hilft mir ?
Gruß
Antwort 1 von Ahnan
Hallo,
dass geht nur über VBA:
Option Explicit
Private Sub Worksheet_Calculate()
If Range("B3").Value = "Ja" Then
ActiveSheet.Unprotect
End If
End Sub
Dies ist im Codefenster des betreffenden Tabellenblatts einzutragen.
Allerdings müsste der Blattschutz an irgendeiner Stelle wieder aktiviert werden !
MfG
dass geht nur über VBA:
Option Explicit
Private Sub Worksheet_Calculate()
If Range("B3").Value = "Ja" Then
ActiveSheet.Unprotect
End If
End Sub
Dies ist im Codefenster des betreffenden Tabellenblatts einzutragen.
Allerdings müsste der Blattschutz an irgendeiner Stelle wieder aktiviert werden !
MfG
Antwort 2 von Event
Hallo
so wie von Dir angedacht wird es wohl nicht gehen, da bei aktiviertem Blattschutz keine Eingaben möglich sind.
Auserdem ist der Schutz wohl von jedem zu knacken der lesen kann.
Warum also nimmst Du nicht einfach den normalen Blattschutz mit Kennwortabfrage?
Gruß
so wie von Dir angedacht wird es wohl nicht gehen, da bei aktiviertem Blattschutz keine Eingaben möglich sind.
Auserdem ist der Schutz wohl von jedem zu knacken der lesen kann.
Warum also nimmst Du nicht einfach den normalen Blattschutz mit Kennwortabfrage?
Gruß
Antwort 3 von michel123
hi all :)
möchtest mit blattschutz oder ueber vb geschuetzt haben ?
ich mach mal einiges uebes wochenende
gruss michel
möchtest mit blattschutz oder ueber vb geschuetzt haben ?
ich mach mal einiges uebes wochenende
gruss michel
Antwort 4 von taxe
Hi Ahnan , Event und michel 123 !
Natürlich habt ihr recht wenn ihr nicht so richtig wusstet was meine Frage eigentlich soll. Mittlerweile sehe ich auch ein, dass man eine frei veränderbare Datenbank alleine mit dem „BLATTSCHUTZ“ nicht wirksam schützen kann. Aber wenn man sich den ganzen Tag mit verschachtelten WENN und UND und NICHT Formeln beschäftigt hat ,sieht man am Abend den Wald vor lauter Bäumen nicht mehr ......
Habe also heute noch mal darüber nachgedacht und auch eine mich befriedigende Lösung gefunden , ohne den Blattschutz jemals aufheben zu müssen !
Beispiel: Die in meinem vorstehenden Posting genannten Zellen A1, A2, A3 , wie auch die Formeln für B1 , B2 , B3 werden beibehalten.
In Irgendeine freie Zelle, sagen wir A5 , füge ich einen Kommentar ein damit der Nutzer weiß welcher Wert hier eingetragen werden muss. (zum Bsp.: 16 oder auch 25 ) für MwSt (1) . Und so kann ich 20 oder auch 50 Zellen untereinander für die Eingabe jeweils anderer Werte präparieren. (Diese Zellen müssen natürlich von dem Blattschutz ausgenommen werden!)
Genau neben diese Zellen, hier also B5, B6 usw., halte ich mir genauso viele Zellen frei wie ich für meine Wertangaben in Spalte A belegt habe. In diese Zellen , ( welche später in den Blattschutz mit einbezogen werden ) schreibe ich dann den jeweiligen Bezug zur Nebenzelle , nämlich : WENN(B3=“JA!“;A5) Sämtlich nachstehende Tabellen greifen dann auf die durch den Berechtigungsnachweis geschützten WERTE der Spalte B zurück. Gebe ich jedoch ein falsches Codewort ein, werden die ungeschützten WERTE der Spalte A nicht in Spalte B übertragen und es erscheint ein FALSCH !
Der BLATTSCHUTZ muss also nie aufgehoben werden und keiner der das Codewort nicht kennt kann mit dieser Arbeitsmappe etwas anfangen !
Gruß und Danke, an Alle die mir helfen wollten !
Natürlich habt ihr recht wenn ihr nicht so richtig wusstet was meine Frage eigentlich soll. Mittlerweile sehe ich auch ein, dass man eine frei veränderbare Datenbank alleine mit dem „BLATTSCHUTZ“ nicht wirksam schützen kann. Aber wenn man sich den ganzen Tag mit verschachtelten WENN und UND und NICHT Formeln beschäftigt hat ,sieht man am Abend den Wald vor lauter Bäumen nicht mehr ......
Habe also heute noch mal darüber nachgedacht und auch eine mich befriedigende Lösung gefunden , ohne den Blattschutz jemals aufheben zu müssen !
Beispiel: Die in meinem vorstehenden Posting genannten Zellen A1, A2, A3 , wie auch die Formeln für B1 , B2 , B3 werden beibehalten.
In Irgendeine freie Zelle, sagen wir A5 , füge ich einen Kommentar ein damit der Nutzer weiß welcher Wert hier eingetragen werden muss. (zum Bsp.: 16 oder auch 25 ) für MwSt (1) . Und so kann ich 20 oder auch 50 Zellen untereinander für die Eingabe jeweils anderer Werte präparieren. (Diese Zellen müssen natürlich von dem Blattschutz ausgenommen werden!)
Genau neben diese Zellen, hier also B5, B6 usw., halte ich mir genauso viele Zellen frei wie ich für meine Wertangaben in Spalte A belegt habe. In diese Zellen , ( welche später in den Blattschutz mit einbezogen werden ) schreibe ich dann den jeweiligen Bezug zur Nebenzelle , nämlich : WENN(B3=“JA!“;A5) Sämtlich nachstehende Tabellen greifen dann auf die durch den Berechtigungsnachweis geschützten WERTE der Spalte B zurück. Gebe ich jedoch ein falsches Codewort ein, werden die ungeschützten WERTE der Spalte A nicht in Spalte B übertragen und es erscheint ein FALSCH !
Der BLATTSCHUTZ muss also nie aufgehoben werden und keiner der das Codewort nicht kennt kann mit dieser Arbeitsmappe etwas anfangen !
Gruß und Danke, an Alle die mir helfen wollten !
Antwort 5 von michel123
hi all :)
hier das gewuenschte
gruss michel
rem dieser code gehört in die arbeitsmappe
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Sheets(1).Protect = False Then
Tabelle1.Protect "1"
End If
End Sub
Private Sub Workbook_Open()
Range("a1").Select
If Workbooks(1).Sheets("Tabelle1").Protect = False Then
Workbooks(1).Sheets("Tabelle1").Protect "1"
End If
If Range("A1:C1").Locked = True Then
Tabelle1.Protect "1"
End If
End Sub
rem dieser code gehört in die tabelle
wie du sehen kannst zur zeit auf 4 benutzer mit vier passwoerten versehen,leicht zu erweitern geht mit erhoehung der dimension,die indexe der namen sind die selben bei den passwörtern
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim namen(4) As String
Dim namenpass(4) As String
namen(1) = "Klaus"
namen(2) = "Peter"
namen(3) = "Sabine"
namen(4) = "Heike"
namenpass(1) = "hund"
namenpass(2) = "katze"
namenpass(3) = "vogel"
namenpass(4) = "giraffe"
Dim zaehler1 As Integer
Dim zaehler2 As Integer
Dim zaehler3 As Integer
For zaehler1 = 1 To 4
If Range("A1") = namen(zaehler1) Then
zaehler2 = zaehler1
End If
Next zaehler1
For zaehler1 = 1 To 4
If Range("B1") = namenpass(zaehler2) And zaehler2 > 0 Then
zaehler3 = zaehler1
Range("C1") = "Ja"
Else
Range("C1") = "Nein"
End If
Next zaehler1
If Range("C1") = "Ja" Then
Tabelle1.Unprotect "1"
End If
End Sub
hier das gewuenschte
gruss michel
rem dieser code gehört in die arbeitsmappe
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Sheets(1).Protect = False Then
Tabelle1.Protect "1"
End If
End Sub
Private Sub Workbook_Open()
Range("a1").Select
If Workbooks(1).Sheets("Tabelle1").Protect = False Then
Workbooks(1).Sheets("Tabelle1").Protect "1"
End If
If Range("A1:C1").Locked = True Then
Tabelle1.Protect "1"
End If
End Sub
rem dieser code gehört in die tabelle
wie du sehen kannst zur zeit auf 4 benutzer mit vier passwoerten versehen,leicht zu erweitern geht mit erhoehung der dimension,die indexe der namen sind die selben bei den passwörtern
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim namen(4) As String
Dim namenpass(4) As String
namen(1) = "Klaus"
namen(2) = "Peter"
namen(3) = "Sabine"
namen(4) = "Heike"
namenpass(1) = "hund"
namenpass(2) = "katze"
namenpass(3) = "vogel"
namenpass(4) = "giraffe"
Dim zaehler1 As Integer
Dim zaehler2 As Integer
Dim zaehler3 As Integer
For zaehler1 = 1 To 4
If Range("A1") = namen(zaehler1) Then
zaehler2 = zaehler1
End If
Next zaehler1
For zaehler1 = 1 To 4
If Range("B1") = namenpass(zaehler2) And zaehler2 > 0 Then
zaehler3 = zaehler1
Range("C1") = "Ja"
Else
Range("C1") = "Nein"
End If
Next zaehler1
If Range("C1") = "Ja" Then
Tabelle1.Unprotect "1"
End If
End Sub
Antwort 6 von michel123
hi all :)
die makros sollten anschliessend noch
geschuetzt werden.
gruss michel
die makros sollten anschliessend noch
geschuetzt werden.
gruss michel
Antwort 7 von michel123
hi all
das workbook open makro hatte noch kein löschbefehl fuer name passwort gehabt,hier korrigiert,ausserdem noch zu sagen das die 1 das blattschutzpasswort ist und tabelle1 gegebenefalls noch der name angepasst werden sollte
gruss michel
Private Sub Workbook_Open()
Range("a1:c1") = ""
Range("a1").Select
If Workbooks(1).Sheets("Tabelle1").Protect = False Then
Workbooks(1).Sheets("Tabelle1").Protect "1"
End If
If Range("A1:C1").Locked = True Then
Tabelle1.Protect "1"
End If
End Sub
das workbook open makro hatte noch kein löschbefehl fuer name passwort gehabt,hier korrigiert,ausserdem noch zu sagen das die 1 das blattschutzpasswort ist und tabelle1 gegebenefalls noch der name angepasst werden sollte
gruss michel
Private Sub Workbook_Open()
Range("a1:c1") = ""
Range("a1").Select
If Workbooks(1).Sheets("Tabelle1").Protect = False Then
Workbooks(1).Sheets("Tabelle1").Protect "1"
End If
If Range("A1:C1").Locked = True Then
Tabelle1.Protect "1"
End If
End Sub
Antwort 8 von taxe
Hi Michel,
deine Lösung zur Verhinderung eines unberechtigten Zugriffs auf die Datenbank ist – gegenüber meiner – wesendlich besser und auch einfacher nachzuvollziehen. Doch auch hier kann sich jeder „Eierdieb“ per Passwortremover Zugriff verschaffen ........ Dies sollte jedoch kein großes Problem darstellen weil ich annehme, dass normale Büroangestellte gar nicht wissen was ein Passwordremover ist ........
Danke Dir für deine Arbeit !
Gruß Walter
deine Lösung zur Verhinderung eines unberechtigten Zugriffs auf die Datenbank ist – gegenüber meiner – wesendlich besser und auch einfacher nachzuvollziehen. Doch auch hier kann sich jeder „Eierdieb“ per Passwortremover Zugriff verschaffen ........ Dies sollte jedoch kein großes Problem darstellen weil ich annehme, dass normale Büroangestellte gar nicht wissen was ein Passwordremover ist ........
Danke Dir für deine Arbeit !
Gruß Walter
Antwort 9 von michel123
hi walter
danke fuer die blumen,hat spass gemacht :))
fuer noch sensiblere daten 256 bit echtzeitverschluesselung im betriebssystem integriert :)) ,muesste es geben glaub ich :)
gruss michel
danke fuer die blumen,hat spass gemacht :))
fuer noch sensiblere daten 256 bit echtzeitverschluesselung im betriebssystem integriert :)) ,muesste es geben glaub ich :)
gruss michel

