Clever-Excel-Forum

Normale Version: [VBA] Case-Funktion arbeitet nicht wie erwartet
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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?
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)
Hallo Ralf,

versuche es mal so (ungetestet)

Code:
Case Like "tim", "brm", "smi":
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?
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?
nur Kleinschreibung:
Code:
Select Case Lcase$(s)
bzw.
Code:
Select Case Lcase(s)
Hi,

ungetestet:

Select case Ucase(s)

Case "HAR" ....
UCASE verwenden Boskobiati war schneller  Sleepy
Hi,

danke an alle.

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