Environ("username") mit Schleife lösen?

176 Aufrufe
Gefragt 1 Jun in Tabellenkalkulation von vba-jongleuer Einsteiger (27 Punkte)
Hallo,

wer kann mir Hilfestellung geben zu folgendem Problem geben - weiß nicht, wie ich das genau lösen soll / kann:

Über Environ("username") soll eine Excel geöffnet werden. Hierbei handelt es sich um 25 von 120 Personen, die die Datei öffnen dürfen, bei allen anderen soll sie sich direkt wieder schließen.

Dazu werden die Windows-User der Personen herangezogen.

Mit einer If-Funktion könnte das Ganze etwas schwierig werden, wodurch ich an eine Schleife dachte...

Wie kann das ganze nun gelöst werden?

Für Beispiele gerne einfach MA1 MA2 usw. eintragen - müssen jetzt nicht alle 25 beispielhaft dargestellt werden.

PS: mir ist Bewusst dass es keine 100-%-Absicherung gibt. Von Passwortschutz über Excel möchte absehen.

Vielen Dank im Voraus

und Gruß

13 Antworten

0 Punkte
Beantwortet 1 Jun von computerschrat Profi (18,040 Punkte)
Hallo,

ich bin zwar kein VBA-Kenner, könnte mir aber in etwa folgende Vorgehensweise vorstellen:

In einem Excel-Arbeitsblatt befindet sich eine Liste aller zugelassenen User. Über die genannte Funktion environ(username) liest du den Usernamen des gerade angemeldeten Benutzers aus.

Mit Sverweis() gehst du in mit dem gefundenen Usernamen in die Liste und kannst das weitere Vorgehen vom Ergebnis des Sverweises abhängig machen.

Gruß computerschrat
+1 Punkt
Beantwortet 2 Jun von m-o Profi (11,159 Punkte)
Bearbeitet 4 Jun von m-o

Hallo,

mit VBA kannst du das z.B. lösen:

Private Sub Workbook_Open()
Dim arrUser
Dim bErlaubt As Boolean
Dim i As Long

'Hier die Namen der berechtigten User eingeben; in Hochkomma, mit Komma getrennt
arrUser = Array("MA1", "MA2")

'Prüfen, ob aktueller User zu den berechtigten Usern gehört
For i = LBound(arrUser) To UBound(arrUser)
 If arrUser(i) = Environ("Username") Then 
   bErlaubt = True  'falls ja, dann Schalter auf wahr setzen
   Exit For
 End If 
Next i

'falls kein berechtigter User, dann Hinweis und Tabelle wieder schließen
If bErlaubt = False Then
MsgBox "Der User " & Environ("Username") & " darf die Datei nicht öffnen!"
ActiveWorkbook.Close (False)
End If

End Sub

Das Makro gehört in das VBA-Projekt der entsprechenden Arbeitsmappe. Eine Anleitung findest du hier: http://www.excelbeispiele.de/DieseArbeitsmappe.htm

Gruß

M.O.

0 Punkte
Beantwortet 14 Jun von vba-jongleuer Einsteiger (27 Punkte)
Hallo m-o,

funktioniert leider nur bedingt:

wenn ich das nur mit meinem User mache, kann es niemand außer mir öffnen.

Füge ich jedoch noch eine zweite Person hinzu, kann diese nach wie vor nicht zugreifen...

Habe ich etwas übersehen?
0 Punkte
Beantwortet 14 Jun von nighty Experte (6,171 Punkte)

Hallo Community laugh

Da reicht ein zwei Zeiler smiley

Nach selben Muster mit weiteren Namen ergänzen!

Private Sub Workbook_Open()
    NamenString = "User1" & _
                  "User2" & _
                  "User3" & _
                  "User4" & _
                  "User5"
    If InStr(NamenString, Environ("Username")) = 0 Then ThisWorkbook.Close
End Sub

Einzufüfen

VbaEditor/Projektexplorer/DieseArbeitsmappe

Das Projekt im VbaEditor mit einem Passwort versehen,um Änderungen im Code zu vermeiden!

Vorher würde ich die Datei Digital Signieren um die Abfrage der Makro Zulässigkeit zu unterbinden!

Gruß Nighty

0 Punkte
Beantwortet 14 Jun von nighty Experte (6,171 Punkte)

Hallo Community smiley

Einzeiler!

Private Sub Workbook_Open()
    If InStr("User1" & _
                  "User2" & _
                  "User3" & _
                  "User4" & _
                  "User5", Environ("Username")) = 0 Then ThisWorkbook.Close
End Sub

Gruß Nighty

0 Punkte
Beantwortet 14 Jun von m-o Profi (11,159 Punkte)
Hallo,

entweder versucht du mal den Code von Nighty oder du postest deinen Code hier im Forum.

Gruß

M.O.
0 Punkte
Beantwortet 15 Jun von vba-jongleuer Einsteiger (27 Punkte)
Hallo Nighty,

geht alles nicht...

weiterhin das Problem, dass nur ich aber nicht die zweite Person das öffnen kann...
hier der Code:

Private Sub Workbook_Open()
    
    NamenString = "ttonisc" & _
                  "t0019dh"
                  
    If InStr(NamenString, Environ("Username")) = 0 Then ThisWorkbook.Close
    
    M1_Startseite.Show
        
End Sub
0 Punkte
Beantwortet 15 Jun von nighty Experte (6,171 Punkte)
Hallo

Und so ?

Private Sub Workbook_Open()
    If InStr("User1" & _
                  "User2" & _
                  "User3" & _
                  "User4" & _
                  "User5", Application.UserName) = 0 Then ThisWorkbook.Close
End Sub
 

Gruß Nighty
0 Punkte
Beantwortet 15 Jun von vba-jongleuer Einsteiger (27 Punkte)
:D jetzt öffnet es sich gar nicht mehr - kann es sein dass da eine "1" statt einer 0 stehen muss?

Oder vielleicht noch die Else-Funktion fehlt?
0 Punkte
Beantwortet 15 Jun von nighty Experte (6,171 Punkte)
Hallo

Die Logic ist simpel!

z.b.

String

"MichaelHansBeate"

Angenommen Hans wird gesucht

Hans begintt die Position an 8 stelle

Es wird also die 8 zurückgegeben,ist also größer 0

Somit läuft der Code durch und die Mappe wird dargestellt

Wird eine null zurückgegeben,dann wurde nichts gefunden

Bei Null Position wird die Mappe dann wieder geschlossen

Leider habe ich keine Testumgebung mehr,um mehrbenutzer betrieb zu testen

Vielleicht kommt ja MO an an eine bessere Testumgebung heran!

Ansonsten,war das keine Aufgabe für mich,wollte den Code nur kürzer darstellen

oder für MO als Tip dienen!

Gruß Nighty
...