[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?
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)
Top
#3
Hallo Ralf,

versuche es mal so (ungetestet)

Code:
Case Like "tim", "brm", "smi":
Gruß Stefan
Win 10 / Office 2016
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
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?
Top
#6
nur Kleinschreibung:
Code:
Select Case Lcase$(s)
bzw.
Code:
Select Case Lcase(s)
Gruß
Michael
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.
Top
#8
UCASE verwenden Boskobiati war schneller  Sleepy
Top
#9
Hi,

danke an alle.

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


Gehe zu:


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