Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
772to776
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
772to776
772to776
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenschutz

Datenschutz
12.06.2006 10:58:38
Arend
Hallo Ihr,
folgende Herausforderung für mich, bei der ihr mir hoffentlich helfen könnt:
In einem Tabellenblatt einer Exceldatei dürfen nur Ausgewählte Daten eintragen, aber von diesen darf nur einer Daten löschen.
Wie kann ich das lösen?
mfg
arend keesenberg

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenschutz
12.06.2006 11:15:49
Hoffi
Hallo Arend,
ich würde beim öffnen der Datei im Workbook_open Ereignis eine Kennwort abfragen, dann beim jeweiligen User die Eigenschaften, was derjenige machen darf und was nicht setzten.
zBsp.

Private Sub Workbook_Open()
Select Case InputBox("Kennwort eingeben", "Anmeldung")
Case Is <> "Arend"
MsgBox "Keine Berechtigung" 'hier der Code, was gemacht werden darf wenn nicht der Administrator angemeldet ist.
Case "Arend"
MsgBox "Daten löschen" 'hier der Code für den Administrator
End Select
End Sub

Grüße
Hoffi
P.S. Rückmeldung wäre nett..
Anzeige
AW: Datenschutz
12.06.2006 11:40:16
Arend
Hallo Ihr,
ersteinmal herzlichen Dank für die Hilfe...
.. leider hilft mir das nicht wirklich weiter. Denn:
- es soll ja nur ein bestimmtes Tabellenblatt besonders geschützt werden.
- und von uns ist keiner als Admin angemeldet.
ich dachte an folgenden Weg:
- Beim aktvieren des Tabellenblattes gibt es eine Sicherheitsabfrage ob eine Berechtigung für die Dateneingabe vorliegt und/oder ob jemand dort Daten löschen darf!
mfg
arend keesenberg
AW: Datenschutz
12.06.2006 15:51:58
Arend
Hollo Hoffi,
leider bin ich mit "hier den Code... " eingeben überfordert.
wer kann helfen?
mfg
arend
Anzeige
AW: Datenschutz
12.06.2006 16:22:30
Hoffi
Hallo Arend,
Dein eigentliches Problem ist mit dem Makro aber nicht erledigt.
Du wolltest eine Abfrage für zwei verschiedene Personen.
Die erste darf nur Daten eingeben, aber nicht löschen..
Die zweite darf beides...
Ich glaube aber nicht, das es in Excel eine Funktion gibt, wo du eine Zelle zwar ändern kannst, aber nicht den Inhalt löschen darfst.
Das geht also nicht.
Somit kann also jeder, der Daten eingeben darf, diese auch löschen..
Man könnte in diesem Falle mit einem Ascii Code arbeiten im Worksheet_Change Ereignis, aber das ist sehr aufwendig.
Ich muss gleich von Berlin mit Zug nach Frankfurt, da werd ich dann sowas mal versuchen zu basteln und stelle es dann morgen früh hier ein.
Grüße
Hoffi
Anzeige
AW: Datenschutz
13.06.2006 10:30:24
Arend
Hallo ihr,
erstmal herlichen Dank, ich werde jetzt alles ausprobieren;-))
arend
ich nehme mal an...
16.06.2006 10:20:41
Andi
... dass die angebotene Lösung gepasst hat?
Eine entsprechende Rückmeldung wära ganz nett gewesen...
Schönen Gruß,
Andi
AW: ich nehme mal an...
27.06.2006 17:20:49
Arend
Hallo Ihr,
jetzt hatte ich endlich Zeit gefunden eure Vorschläge auszuprobieren.
Hat wunderbar geklappt herzlichen Dank.
Musste aber aus welchen Gründen auch immer eine kleine Änderung vornehmen.
das mit dem Vba.Environ("username") hat nicht geklappt. Ich habe statt dessen application.username genommen.
mfg
arend
...Herausforderung?
12.06.2006 11:16:32
P@ulchen
Hallo Arend,
betreffs Herausforderung: Wäre es nicht eine ebensolche für Dich, mal ein Feedback auf Antworten zu Deinen Threads zu geben?
Du hast diese Frage vor 3 Tagen schon einmal gestellt, auf die Antworten aber nicht reagiert...
Woher soll Excel wissen, ob der User Daten löscht oder überschreibt? Denn jedes Überschreiben bzw neu Eintragen stellt ja ein Löschen der voherigen Daten dar...
Gruß aus Leipzig
P@ulchen
www.excel-werkstatt.de

Anzeige
AW: Datenschutz
12.06.2006 16:25:56
Andi
Hi,
Mal so als Denkanstoss...
kopiere folgendes ins Modul der Tabelle:

Private Sub Worksheet_Activate()
Select Case VBA.Environ("username")
Case "andi"  'hier user-Name mit Lösch- und Schreibberechtigung
loeschen = True
eintragen = True
Case "Arendt", "Hans"  'hier user-Namen mit Schreibberechtigung
loeschen = False
eintragen = True
Case Else
loeschen = False
eintragen = False
End Select
Select Case ActiveCell.Value
Case ""
zelle_leer = True
Case Else
zelle_leer = False
End Select
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
Select Case zelle_leer
Case True
If eintragen = False Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Keine Bereichtigung"
End If
Case False
If loeschen = False Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Keine Bereichtigung"
End If
End Select
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Value
Case ""
zelle_leer = True
Case Else
zelle_leer = False
End Select
End Sub

und folgendes in ein Standard-Modul:

Private Sub Worksheet_Activate()
Select Case VBA.Environ("username")
Case "andi"  'hier user-Name mit Lösch- und Schreibberechtigung
loeschen = True
eintragen = True
Case "Arendt", "Hans"  'hier user-Namen mit Schreibberechtigung
loeschen = False
eintragen = True
Case Else
loeschen = False
eintragen = False
End Select
Select Case ActiveCell.Value
Case ""
zelle_leer = True
Case Else
zelle_leer = False
End Select
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
Select Case zelle_leer
Case True
If eintragen = False Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Keine Bereichtigung"
End If
Case False
If loeschen = False Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Keine Bereichtigung"
End If
End Select
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Value
Case ""
zelle_leer = True
Case Else
zelle_leer = False
End Select
End Sub

Nachdem die Tabelle ja beim Öffnen evtl gleich aktiv ist, müsstest Du den Code von Worksheet_Activate und Worksheet_SelectionChange evtl noch sinngemäß ins Workbook_Open übernehmen, aber das müsste ja bei VBA gut möglich sein...
Schönen Gruß,
Andi
Anzeige
oh mann...
12.06.2006 17:33:49
Andi
copy & paste für blöde... :-)
Ins Standard-Modul gehört natürlich nicht das gleiche wie in die Tabelle, sondern einfach folgendes:
public loeschen as boolean
public eintragen as boolean
public zelle_leer as boolean
Schönen Gruß,
Andi
AW: oh mann...
12.06.2006 18:00:12
P@ulchen
Hallo Andi,
sieht ja echt schon mal ganz gut aus, gibt aber eine Fehlermeldung, wenn mehr als eine Zelle selektiert wird.
Was ist, wenn der User die Makroausführung deaktiviert?
Gruß aus Leipzig
P@ulchen
www.excel-werkstatt.de

Anzeige
AW: oh mann...
13.06.2006 10:18:47
Andi
Hi,
also, das Problem wenn mehr als eine Zelle selektiert wird habe ich so gelöst:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range
zelle_leer = True
For Each c In Range(Target.Address)
Select Case c.Value
Case ""
zelle_leer = True
Case Else
zelle_leer = False
Exit For
End Select
Next c
End Sub

Das Problem, dass man nach der Meldung doch überschrieben kann, hat mir a bisserl Kopfzerbrechen bereitet; die aktive Zelle springt dabei einmal eins nach unten, dann wieder rauf, merkt sich aber den Zustand von der unteren; wenn die leer ist, dann kann man schreiben. Gelöst, wenn auch eher unelegant weil mit select, habe ich das jetzt so:

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case zelle_leer
Case True
If eintragen = False Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Keine Schreibbereichtigung"
Target.Offset(1, 0).Select
End If
Case False
If loeschen = False Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "Keine Löschbereichtigung"
Target.Offset(1, 0).Select
End If
End Select
End Sub

Durch den Offset nach der MsgBox wird der user gezwungen, für einen erneuten Schreibversuch die Zelle neu anzuklicken; dadurch steht in zelle_leer dann der richtige Zustand. Wenn jemand ne elegantere Lösung dafür hat, gerne her damit.
Das Problem mit den aktiven Makros tritt ja bei jeder Lösung auf, und kann imho nur mit dem bekannten workaround umgangen werden:
- alle Blätter in aus eins mit xlsheetveryhidden ausblenden
- auf dem einen steht ein Hinweis, dass Makros aktiv sein müssen
- im workbook_open alle Blätter ein-, und das eine ausblenden
- im workbook_beforeclose alle aus-, und das eine einblenden
- zentraler Schwachpunkt hierbei: im workbook_beforeclose muss auf jeden Fall zwangsweise gespeichert werden.
Schönen Gruß,
Andi
P.S.: Ich hatte den ganzen Krempel grad schon mal getippt, hab dann in der Vorschau nen Tipfehler entdeckt, wollte editieren und alles war weg. Sehr ärgerlich. Kommt sowas öfter vor?
Anzeige
AW: oh mann...
12.06.2006 18:08:00
P@ulchen
noch was:
ein User, der zwar schreib-, aber nicht löschberechtigt ist, will eine nichtleere Zelle überschreiben. Es kommt die Meldung, dass er hierzu nicht berechtigt ist. Nach Klick auf "OK" in der MsgBox kann die Zelle überschrieben werden.
Gruß aus Leipzig
P@ulchen
www.excel-werkstatt.de

AW: oh mann...
13.06.2006 00:20:52
Andi
Hi,
gute inputs, ich guck mir das morgen nochmal an. komm grad vom Fußballschaun und hab mich indem ich dies schreibe schon 4-mal vertippt; wenn ich's heut noch versuche, hättest Du morgen nur noch mehr Mühe mit der Fehlersuche... :-)
Schönen Gruß,
Andi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige