Office: (Office 2010) Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben

Helfe beim Thema Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, da ich ein absoluter Neuling im VBA-Editor in Excel bin, möchte ich hier um Hilfe bitten. Mein Problem besteht darin, dass ich... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Betalo, 26. Januar 2017.

  1. Betalo User

    Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben


    Hallo zusammen,

    da ich ein absoluter Neuling im VBA-Editor in Excel bin, möchte ich hier um Hilfe bitten.

    Mein Problem besteht darin, dass ich einzelne Zellen in Tabellenblättern nur für bestimmte andere Benutzer zugänglich machen will.
    Dabei soll der Benutzername unter Windows abgefragt werden. Wenn dieser stimmt, soll das Passwort umgangen werden und der Zugriff auf die Zelle gewährleistet werden.
    Mit der Schaltfläche "Benutzer dürfen Bereiche bearbeiten" habe ich es schon versucht, jedoch ohne Erfolg, da Excel sofort abschmiert, wenn ich die Personen eintrage, die Zugriff erhalten sollen.

    Bezogen auf meine Datei:

    B23 und C27 in Tabellenblatt Dienstreiseantrag für Person A
    H29 in Tabellenblatt Dienstreiseabrechnung für Person A, B, C
    P29 in Tabellenblatt Dienstreiseabrechnung für Person D, E

    Ich freue mich auf eure Antworten.

    Freundliche Grüße

    Betalo
     
  2. maninweb
    maninweb MVP für Microsoft Excel
    Hallo,

    Um den Usernamen zu ermitteln, kannst Du die in VBA integrierte Funktion Environ verwenden oder dies per Windows API ermitteln (falls Environ z.B. nicht geht). Anbei ein Beispiel:

    Code:
    Option Explicit
    
    
    Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _
    Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    
    
    Public Function GetUserNameByAPI()
    
    
      Dim strBuffer As String * 255
      Dim lngSize   As Long
      Dim lngResult As Long
      
      lngSize = 255
      lngResult = GetUserName(strBuffer, lngSize)
      
      If lngResult <> 0 Then
      
        GetUserNameByAPI = Left(strBuffer, lngSize - 1)
        
      End If
      
    End Function
    
    
    Public Function GetUserNameByEnvironment()
    
    
      GetUserNameByEnvironment = Environ("Username")
      
    End Function
    
    
    Sub Test()
    
    
      MsgBox "'" & GetUserNameByEnvironment & "'"
      MsgBox "'" & GetUserNameByAPI & "'"
      
    End Sub
    
    Das Ergebnis kannst Du dann nutzen, um per If oder Select Case die User auszuwählen.

    Gruß
     
    maninweb, 26. Januar 2017
    #2
  3. Betalo User
    Hallo maninweb,

    danke für deine Hilfe, aber du hast mich wohl missverstanden. Die Benutzernamen der Windows-Anmeldung der Mitarbeiter sind mir bekannt. Mir geht es darum, dass die oben genannten Zellen nur für diese Leute änderbar sein sollen und niemand anderes darauf zugreifen darf.

    Gruß

    Betalo
     
  4. Lutz Fricke Erfahrener User

    Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben

    Code:
    If lngResult = "Chef" Then
                ActiveSheet.Unprotect ("123")
                Range("B23").Locked = False
                Range("B23").Select
        End If
    Beim Schließen Blattschutz wieder rein und fertig.
     
    Lutz Fricke, 26. Januar 2017
    #4
  5. Betalo User
    Hallo Lutz Fricke,

    wenn ich deinen Code eingebe und für meine Tabelle anpasse, kriege ich immer die Fehlermeldung Variable nicht definiert. Was muss ich ändern?

    Code:
    Sub Unterschrift()

    If lngResult = "sf000145" Then
    ActiveSheet.Unprotect ("sf000145")
    Range("B23", "C27").Locked = False
    Range("B23", "C27").Select
    End If

    End Sub
     
  6. Lutz Fricke Erfahrener User
    Hallo Betalo,

    Du hast verschiedene Möglichkeiten:
    Wenn Du's einfach machen willst, löscht Du die erste Zeile deines Moduls "Option Explicit" raus und fertig.
    Wenn Du's gescheit machen willst, fügst Du nach "Sub Unterschrift" in die nächste Zeile "Dim lngResult As Long" ein. Damit definierst Du deine Variable.

    Eine Frage: Dein Passwort ist identisch mit Deinem Blattnamen?

    Gruß,
    Lutz
     
    Lutz Fricke, 27. Januar 2017
    #6
  7. Betalo User
    Ich hab den Code so verstanden, dass nach lngResult der Benutzername hinkommt, also vorerst sf000145 um zu schauen ob's funktioniert, wenn ja kommt da ein anderer rein und das Passwort ist sf000145 was nach active.sheet.unprotect steht.
    Oder kommt danach der Blattname rein?

    Vielen Dank für deine Hilfe.

    Gruß

    Betalo
     
  8. Lutz Fricke Erfahrener User

    Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben

    Dann hast Du's richtig verstanden.

    Gruß,
    Lutz
     
    Lutz Fricke, 27. Januar 2017
    #8
  9. Betalo User
    Gut zu wissen.
    Jetzt bleibt mir nur noch eine Frage: Muss ich deinen Code unter den anderen schreiben? Weil da funktioniert es bei mir nicht.
    und wenn ich lngresult als Long deklariere kommt immer der fehler "Typen unverträglich" was ich soweit auch nachvollziehen kann, da der Benutzername auch aus Buchstaben besteht. Ich hatte es jetzt mit string probiert, trotzdem tut sich da nichts.

    Gruß

    Betalo
     
  10. Lutz Fricke Erfahrener User
    Hast Du mal deinen gesamten Code?
     
    Lutz Fricke, 27. Januar 2017
    #10
  11. Betalo User
    Option Explicit


    Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _
    Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long


    Public Function GetUserNameByAPI()



    Dim strBuffer As String * 255
    Dim lngSize As Long
    Dim lngResult As Long

    lngSize = 255
    lngResult = GetUserName(strBuffer, lngSize)

    If lngResult <> 0 Then

    GetUserNameByAPI = Left(strBuffer, lngSize - 1)

    End If

    End Function


    Public Function GetUserNameByEnvironment()


    GetUserNameByEnvironment = Environ("Username")

    End Function


    Sub Test()

    MsgBox "'" & GetUserNameByEnvironment & "'"
    MsgBox "'" & GetUserNameByAPI & "'"

    End Sub

    Sub Unterschrift()


    Dim lngResult As String

    If lngResult = "sf000145" Then
    ActiveSheet.Unprotect ("sf000145")
    Range("B23", "A27").Locked = False
    Range("B23", "A27").Select
    End If

    End Sub
     
  12. Lutz Fricke Erfahrener User
    Hallo Betalo,

    ok, ich seh schon, Du bist wirklich blank, was VBA angeht. Hast Du schon mal VBA programmiert oder nur aufgezeichnet und abgespielt?

    Leg Dir eine neue Mappe (Kopie der bestehenden) an, lösch alles aus dem Modul, in dem du die Makros stehen hast, und kopieren diesen Code hinein:

    Code:
    Option Explicit
    
    
    Public Function GetUserNameByEnvironment()
    
    GetUserNameByEnvironment = Environ("Username")
    
    End Function
    
    
    Sub Unterschrift()
    
    If GetUserNameByEnvironment = "sf000145" Then
    ActiveSheet.Unprotect ("sf000145")
    Range("B23", "A27").Locked = False
    Range("B23", "A27").Select
    End If
    
    End Sub 
    Dann solltest Du nur noch ein Makro (Unterschrift) aufrufen können. Was passiert dann?

    Bin jetzt erstmal ins Wochenende und weiß noch nicht genau, ob ich dir helfen kann. Ansonsten geht's Montag weiter.

    Gruß,
    Lutz
     
    Lutz Fricke, 27. Januar 2017
    #12
  13. Betalo User

    Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben

    Hallo Lutz Fricke,

    ich arbeite heute das erste Mal mit VBA, bisher brauchte ich es auch noch nicht. Von daher vielen Dank für deine Geduld und Ausdauer. Du hast mir sehr geholfen.

    Mir wird nur noch das Makro Unterschrift aufgeführt und es funktioniert einwandfrei.

    Viel Spaß dir in deinem wohlverdienten Wochenende.

    Gruß

    Betalo
     
Thema:

Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben

Die Seite wird geladen...
  1. Zellen aus Tabellenblättern per Makro für bestimmte Nutzer ohne PW-Abfrage freigeben - Similar Threads - Zellen Tabellenblättern Makro

  2. Zeilen aufgrund von bestimmten Informationen in anderes Tabellenblatt kopieren

    in Microsoft Excel Hilfe
    Zeilen aufgrund von bestimmten Informationen in anderes Tabellenblatt kopieren: Hallo zusammen, ich bin erst vor ein paar Tagen auf die Excel VBA gestoßen und kenne mich deswegen leider so gut wie gar nicht aus. Ich würde gerne aus den Tabellen 3 - 11, bestimmte Zeilen in die...
  3. VBA - Zeilen je nach Bedingung in neues Tabellenblatt verschieben und löschen

    in Microsoft Excel Hilfe
    VBA - Zeilen je nach Bedingung in neues Tabellenblatt verschieben und löschen: Hallo liebe Excel-Kommunity, nach ewigen Stunden des Suchens und Rumprobierens bin ich an dem Punkt angekommen an dem ich verzweifelt um eure Hilfe fragen muss. Da ich leider keinerlei...
  4. Werte aus mehrere Zellen in einer Anzeigen lassen über mehrere Tabellenblätter

    in Microsoft Excel Hilfe
    Werte aus mehrere Zellen in einer Anzeigen lassen über mehrere Tabellenblätter: Hallo zusammen, ich habe eine Frage bezüglich Excel. Gibt es eine Formel die mir ermöglicht mehrere Werte in einer Zelle auszugeben? Ich habe eine Datei, mit mehrere Tabellenblätter (in der...
  5. Zellen im 2. Tabellenblatt automatisch "anzeigen", wenn Kriterium erfüllt

    in Microsoft Excel Hilfe
    Zellen im 2. Tabellenblatt automatisch "anzeigen", wenn Kriterium erfüllt: Hallo zusammen, ich habe folgende Herausforderung: im 1. Tabellenblatt habe ich in einer Zeile zunächst einen Nachnamen geschrieben und anschließend in der gleichen Zeile ein Kriterium per...
  6. Bestimmte Zellen addieren, Ergebnis auf neues Tabellenblatt

    in Microsoft Excel Hilfe
    Bestimmte Zellen addieren, Ergebnis auf neues Tabellenblatt: Hallo zusammen, ich will die Zellen A1-A5 addieren, und deren Summe auf Tabellenblatt abbilden. Das selbe für die Zellen A11-A15. Jedoch soll, wenn eine Zeile zwischen A1 und A5 eingefügt wird,...
  7. Werte der letzten Zelle einer Spalte in mehreren Tabellenblättern ermitteln

    in Microsoft Excel Hilfe
    Werte der letzten Zelle einer Spalte in mehreren Tabellenblättern ermitteln: Hallihalllo, Ich sitze gerade an meine Bachelorarbeit und muss mittels VBA ein Auswertungsprogramm für erhobene Daten erarbeiten. Ich suche schon ewig im Internet nach dem passenden Code und...
  8. Makro: vorhandenes Tabellenblatt kopieren und bennennen nach Wert in Zelle

    in Microsoft Excel Hilfe
    Makro: vorhandenes Tabellenblatt kopieren und bennennen nach Wert in Zelle: Hi, bin ein absoluter Frischling in Sachen Excel Makros und stehe vor meinem ersten Problem: Innerhalb eines Deckblattes "Projektübersicht" werden in der Spalte A7-AX Teilenummern eingegeben....
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden