ich habe eine Idee, welche ich mit meinem derzeitigem Wissensstand noch nicht umsetzen kann....
Sollzustand:
1. Exceldokument öffnen 2. Meldung erscheint, in welcher über das Betätigen eines Buttons eine Auswahl getroffen werden muss. [Person 1] oder [Person 2] oder [Person 3] (Hierbei soll im Hintergrund wenn möglich nichts vom Dokument lesbar/identifizierbar sein)
3. Direkt nach der Auswahl, findet eine Passwortabfrage statt. (Jede Auswählbare Person hat ein eigenes Passwort.) 4. Ist das Passwort richtig, wird das Dokument komplett geöffnet.
--> Das Dokument soll sich also erst komplett öffnen lassen/einsehbar sein, wenn eine Person ausgewählt und das dementsprechende Passwort richtig eingegeben wurde. Bei der Userform kann ich aktuell ja diese Meldung über das "X" am oberen Meldungsrand einfach schließen und ohne Probleme fortfahren. Das sollte auch vermieden werden.
Soweit zum ersten Schritt. Des weiteren gilt es nun die ausgewählte Person in folgende Funktion einzubetten.
Ich habe in diesem Dokument eine Tabelle, dessen Zellen ich mit einem Doppelklick mit einem "X" befüllen kann. Jetzt soll aber hier, abhängig von der Person, welche zu Beginn definiert wurde, dementsprechend ein anderer Inhalt per Doppelklick eingefügt werden.
Person 1 --> "P1" Person 2 --> "P2" Person 3 --> "P3"
Das Einstiegsfenster besteht schonmal und die Funktion des Befüllens einer Zelle per Doppelklick auch. Jedoch bekomme ich den Rest nicht hin...
Vielen Lieben dank schonmal vorab für eure Bemühungen und Zeit.
du bist bei weitem nicht der erste, der die Idee hat, Excel dazu zu verwenden, den Nutzer und Excel selbst einzuschränken und eine Art Rechtestrutkur einzufügen. Meistens kommen diese Ideen von Anwendern, deren Wissensstand bezüglich Excel im Allgemeinen und VBA im Besonderen noch nicht sehr weit ausgebaut ist. Daher ein paar Grundsätze (Ausnahmen gibt es sicher, die beißen sich aber wahrscheinlich mit dem Wissensstand) dazu: Was in Excel steht ist nicht geheim. Solange du Informationen, die du in einer Exceldatei speicherst nicht verschlüsselst, sind sie nicht Geheim. Das gilt natürlich insbesondere für die Passwörter, die du am besten nur mit einem Hash-Wert speicherst. Was du in Excel nicht schon in der Standardsoftware effektiv schützen kannst, kannst du auch nicht mit VBA besser schützen. Excel bietet einige Möglichkeiten des Datei, Arbeitsmappen und Blattschutzes. Wenn du die Möglichkeiten dieser drei Schutzebenen kennst, dann kannst du auch in etwa abschätzen, wie „wirksam“ du deine Daten mit VBA schützen kannst. Der Schutz einer Exceldatei verhindert nur versehentliches Ändern. Wer etwas ändern will, wird das in einer Exceldatei können. Lesen wird ein noch geringeres Problem sein. Wie du an der Datei von Ralf siehst, genügt es schon, die Datei ohne Makros auszuführen und der VBA-„Schutz“ ist hinüber. Aber auch der gewöhnliche Schutz lässt sich zum Beispiel durch einen einfachen Zellverweis auf eine gesperrte Zelle umgehen. Das einzige mir bekannte einigermaßen wirksame Mittel ist es, die Datei mit einem Öffnen-Passwort zu speichern (wie sehr sich ooo oder LO darum scheren sei mal dahingestellt). Blatt- und Mappenschutz in VBA sind ein Krampf Der Blatt- und Mappenschutz gilt grundsätzlich auch für die Änderungen mit VBA. Das heißt, du musst entweder vor jeder Änderung durch ein Makro den Schutz aufheben (Passwort im Quelltext im Klartext), oder den Schutz beim öffnen der Mappe mit der Option UserInterFaceOnly neu setzen (das funktioniert wieder bis zum öffnen ohne Makros). Also: Wenn du Dateneingaben mit einer Benutzer-Rechte-Struktur Daten relativ sicher erfassen willst, dann empfehle ich dir den schnellen umstieg auf eine einfache Datenbank. Da ist die Trennung in Front- und Backend, die verschlüsselte Speicherung und häufig auch eine Benutzerverfaltung als Standardaufgabe schon integriert. Und wenn es nicht integriert ist, so lässt sich das Problem doch meistens mit Standardlösungen lösen. Das Front-End kannst du dann natürlich auch als Excel-User-Form gestalten. Noch einfacher: Versuche das Problem organisatorisch zu lösen. Warum benötigst du dieses Schutzlevel? Wie bekommst du die drei Personen dazu, trotzdem ordnungsgemäß zu arbeiten?
Du könntest einige Dinge in Abhängigkeit vom angemeldeten User automatisieren. Wie schon zu lesen war, solltest Du einen Arbeitsmappenschutz verwenden, der bereits beim Öffnen greift. Um den Zugriff für den Ottonormaluser zu erschweren, solltest Du alle Blätter ausblenden (xlVeryHidden) und das VBA-Projekt schützen. Eingeblendet werden die Blätter nur, wenn ein definierter User die Datei öffnet und die Ausführung von Makros erlaubt ...
Kannst auch hier im Forum z.B. nach "Schutz" suchen, das Thema wird nicht selten angeschnitten.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Danke für die schnellen Antworten. Ich werde das mit dem Schutz nochmal überdenken.
Hat jemand eine schnelle Lösung zu meinem zweiten Punkt?
___________________________________________________________________________________________________________________________ Ich habe in diesem Dokument eine Tabelle, dessen Zellen ich bei einem Doppelklick mit einem "X" befüllen kann. Jetzt soll aber hier, abhängig von der Person, welche zu Beginn definiert wurde, dementsprechend ein anderer Inhalt per Doppelklick eingefügt werden.
Person 1 --> "P1" Person 2 --> "P2" Person 3 --> "P3"
Moin! Melden sich die Personen am "eigenen" Windows an? Dann kann man Environ("Username") abfragen.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim isect As Range Set isect = Application.Intersect(Target, Range("D6:M14")) If Not isect Is Nothing Then Select Case Environ("Username") Case "Person 1": Target = "P1" Case "Person 2": Target = "P2" Case "Person 3": Target = "P3" Case Else MsgBox "Sie sind nicht berechtigt, sinnlos doppelt zu klicken!", vbCritical End Select Cancel = True End If End Sub
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
10.12.2022, 16:31 (Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2022, 16:33 von snb.)
Man könnte die Berechtigkeit ermitteln mittels eine Datei in einem Gebiet wo der User kein Zugang hat. z.B. eine eigene website.
Ich könnte das so machen: Wenn der User eine Username "Bernd" hat und es keine Datei namens "http://www.snb-vba.eu/bestanden/Bernd.pwd" gibt, hat der User kein Zugang zur Datei.
Code:
Sub M_snb() c00 = "success" With CreateObject("MSXML2.XMLHTTP") .Open "GET", "http://www.snb-vba.eu/bestanden/" & Environ("name") & ".pwd", False .send If .Status = 404 Then c00 = "failed" End With