Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[VBA] Case-Funktion arbeitet nicht wie erwartet
#1
Hi,

mit diesem Code regele ich die Zugriffsrechte auf die Datei und einzelne Blätter:
Code:
Private Sub Workbook_Open()
  Dim s As String
 
  '   SetTimer    'siehe mdl_Timer
 
  s = VBA.Environ("Username")
  MsgBox (s)
 
  'Datei schreibgeschützt öffnen
  'Ausdruck.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
  '   If Environ("username") <> "rab" or Environ("username") <> "har" Then
  '      Application.DisplayAlerts = False
  '      Workbooks.Open ThisWorkbook.FullName, , True
  '   End If
 
  With ThisWorkbook
     Select Case s                     'Tabellen, Bereiche und Formularschaltflächen ausblenden, je nach Account
     Case Is = "rab", "tig":
        For i = 1 To Sheets.Count
           .Sheets(i).Visible = True
           .Sheets(i).Unprotect 'Password:="test"
        Next i
        .Sheets("Eingabe").Activate
        .Sheets("Eingabe").Range("K1:K3") = ""
     Case Is = "har", "can":
        For i = 1 To Sheets.Count
           .Sheets(i).Visible = True
           .Sheets(i).Unprotect 'Password:="test"
        Next i
        .Sheets("Eingabe").Activate
        .Sheets("Eingabe").Range("K1:K3") = ""
     Case Is = "sl", "spe", "alm", "tik":
        For i = 1 To Sheets.Count
           .Sheets(i).Visible = True
        Next i
        .Sheets("Datenbank").Activate
     Case Is = "tim", "brm", "smi":
        For i = 1 To Sheets.Count
           .Sheets(i).Visible = True
           '.Sheets(i).Protect 'Password:="test"
        Next i
        .Sheets("Eingabe").Visible = False
        .Sheets("Daten-Anzeige").Activate
     Case Else
        'Datei schreibgeschützt öffnen
        'Ausdruck.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
        Application.DisplayAlerts = False
        Workbooks.Open ThisWorkbook.FullName, , True
        Call drei_Blätter_zeigen                   'hier werden nur 3 definierte Blätter angezeigt
        .Sheets("Anzeige Fertigung").Activate
     End Select
  End With
  Application.DisplayAlerts = True
 
End Sub

Nun ist es so, daß einzelne User die Datei nur schreibgeschützt öffnen können, obwohl sie im ersten oder zweiten Case drin stehen.

"har" kann es nur schreibgeschützt öffnen
"can" kann sie normal öffnen

Wenn ich den "Case Else" auskommentiere, können sie von allen namentlich Genannten entsprechend der Case-Einteilung geöffnet werden.

Was habe ich im Code falsch gemacht?
Antworten Top
#2
Hallo,

das erneute Öffenen mit


Code:
Workbooks.Open ThisWorkbook.FullName, , True


konnte ich in einem kleinen Test nicht als wirkungsvoll erkennen. Müßte es nicht eine andere Datei sein?

mfg

(da viele user alle Blätter sehen können, sind die Abfragen redundant)
Antworten Top
#3
Hallo Ralf,

versuche es mal so (ungetestet)

Code:
Case Like "tim", "brm", "smi":
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#4
Hallo,

obwohl Deine Version mE eigentlich funktionieren sollte, versuch es mal so:
Code:
Case "rab", "tig"

EDIT: Was steht denn in der Variable s genau drin?
Gruß
Michael
Antworten Top
#5
Hi,

ich habe die Ursache jetzt so rausgefunden (mit oder ohne "Is ="):
   With ThisWorkbook
      Select Case s                     'Tabellen, Bereiche und Formularschaltflächen ausblenden, je nach Account 
      Case Is = "rab", "tig"
         MsgBox ("rab, tig")
      Case "har", "Har"  'Is = "har", "Har" 
         MsgBox ("Har")
      Case Is = "can"
         MsgBox ("can")
      Case Is = "sl", "spe", "alm", "tik"
         MsgBox ("sl, spe, alm, tik")
      Case Is = "tim", "brm", "smi"
         MsgBox ("tim, brm, sm")
      Case Else
         MsgBox ("else")
      End Select
   End With

Wie kann ich das von Groß-, Kleinschreibung unabhängig machen?
Antworten Top
#6
nur Kleinschreibung:
Code:
Select Case Lcase$(s)
bzw.
Code:
Select Case Lcase(s)
Gruß
Michael
Antworten Top
#7
Hi,

ungetestet:

Select case Ucase(s)

Case "HAR" ....
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#8
UCASE verwenden Boskobiati war schneller  Sleepy
Antworten Top
#9
Hi,

danke an alle.

Ich habe es auch gefunden und verwende
Code:
Select Case LCase(s)          'unabhängig von der Großschreibung
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste