Microsoft Excel

Herbers Excel/VBA-Archiv

Benutzerabhängig Tabellen einblenden

Betrifft: Benutzerabhängig Tabellen einblenden von: Torsten K.
Geschrieben am: 12.08.2004 09:48:18

Hallo zusammen,

mit folgendem Code möchte ich bestimmte WS nur einblenden lassen, wenn ich der User bin (GWS-TKR):

Dim ws
Dim Arr As Integer

Arr = Array("SETT", "PROTOC", "RE18VJ", "RE912VJ", "RE18LJ", "BU12LJ", "Accounts")

If Application.UserName <> "GWS-TKR" Then
For Each ws In Arr
Worksheets(ws).Visible = xlVeryHidden
Else
Worksheets(ws).Visible = True
End If

Leider erhalte ich folgende Fehlermeldung:
"For Each kann nur zum Durchlauf einer Auflistung (...) verwendet werden".
Was mache ich falsch?
Vielen Dank für Eure Tips.

Gruß
Torsten

  


Betrifft: AW: Benutzerabhängig Tabellen einblenden von: Dr.
Geschrieben am: 12.08.2004 09:52:01

Mach´s doch so:

Dim ws
Dim Arr As Integer

If Application.UserName <> "GWS-TKR" Then
For i=1 to Sheets.Count
Worksheets(i).Visible = xlVeryHidden
Else
Worksheets(i).Visible = True
Next i


  


Betrifft: AW: Benutzerabhängig Tabellen einblenden von: sergiesam
Geschrieben am: 12.08.2004 09:57:13

Guter Tipp aber er will nicht alle ausblenden sondern nur bestimmte Blätter... (siehe mein Beitrag).
Sam


  


Betrifft: AW: Benutzerabhängig Tabellen einblenden von: Dr.
Geschrieben am: 12.08.2004 10:01:14

Stimmt. Erst lesen, dann schreiben. ;-)


  


Betrifft: AW: Benutzerabhängig Tabellen einblenden von: sergiesam
Geschrieben am: 12.08.2004 09:55:51

Hi,

mit for each kann man nur Objekte durchlaufen. ein Array ist kein objekt.
Du kannst z.B. ein Collection-Objekt verwenden.

Sub test()
  Dim wsCollection As Collection
  Set wsCollection = New Collection
  wsCollection.Add Worksheets("SETT")
  wsCollection.Add Worksheets("PROTOC")
  wsCollection.Add Worksheets("RE18VJ")
  '...

  Dim ws As Worksheet
  For Each ws In wsCollection
    If Application.UserName <> "GWS-TKR" Then
      ws.Visible = xlSheetVeryHidden
    Else
      ws.Visible = xlSheetVisible
    End If
  Next ws
End Sub


Gruß,
Sam


  


Betrifft: AW: Benutzerabhängig Tabellen einblenden von: IngoG
Geschrieben am: 12.08.2004 09:59:56

Hallo sam,

versuchs doch mal mit:

for each ws in worksheets(arr)


Gruß Ingo


  


Betrifft: AW: Benutzerabhängig Tabellen einblenden von: sergiesam
Geschrieben am: 12.08.2004 10:20:08

Hi,

stimmt, schön das es sooooo viele wege gibt...
Sam


  


Betrifft: AW: Benutzerabhängig Tabellen einblenden von: Torsten K.
Geschrieben am: 12.08.2004 10:41:07

Hallo Ingo,

ich habe Deinen Vorschlag auch aufgegriffen, erhalte aber im Gegensatz zu Sam's Version eine Fehlermeldung "Else ohne If". Versteh' ich nicht. Kannst Du Dir das nochmal anschauen bitte? (Sam's Vorschlag läuft durch - Eine Lösung hätte ich also zu meinem Problem. Ich würd' halt nur gerne wissen, warum's der eine Code tut und der andere nicht)

' Dim ws As Worksheet
' Dim Username As Integer
' Dim wsCollection As Collection
' Set wsCollection = New Collection
'
' wsCollection.Add Worksheets("SETT")
' wsCollection.Add Worksheets("PROTOC")
' wsCollection.Add Worksheets("RE18VJ")
' wsCollection.Add Worksheets("RE912VJ")
' wsCollection.Add Worksheets("RE18LJ")
' wsCollection.Add Worksheets("BU12LJ")
' wsCollection.Add Worksheets("Accounts")
'
' For Each ws In wsCollection
' If Application.Username <> "Torsten Kreuer" Then
' ws.Visible = xlSheetVeryHidden
' Else
' ws.Visible = xlSheetVisible
' End If
' Next ws
---------------------------------------------------------------------------------------

Dim ws
Dim Arr As Integer

Arr = Array("SETT", "PROTOC", "RE18VJ", "RE912VJ", "RE18LJ", "BU12LJ", "Accounts")

If Application.Username <> "Torsten Kreuer" Then
For Each ws In Worksheets(Arr)
ws.Visible = xlSheetVeryHidden
Else
ws.Visible = xlSheetVisible
End If
Next ws

Vielen Dank und Gruß

Torsten


  


Betrifft: For und if austauschen!!! von: IngoG
Geschrieben am: 12.08.2004 10:46:17

Hallo Thorsten,
Du hast die for-schleife hinter der if anweisung stehen...
einfach austauschen

Gruß Ingo


  


Betrifft: AW: For und if austauschen!!! von: Torsten K.
Geschrieben am: 12.08.2004 10:51:30

Sorry Ingo,

ich hoffe, ich werde jetzt nicht lästig:

Dim ws
Dim Arr As Integer

Arr = Array("SETT", "PROTOC", "RE18VJ", "RE912VJ", "RE18LJ", "BU12LJ", "Accounts")

For Each ws In Worksheets(Arr)
If Application.Username <> "Torsten Kreuer" Then
ws.Visible = xlSheetVeryHidden
Else
ws.Visible = xlSheetVisible
End If
Next ws

Jetzt bleibt Excel an der Stelle "Arr = Array(...)" stehen und meldet etwas von "Typen-unverträglich"! Hast Du eine Idee, was jetzt noch ist?
Vielen Dank

Torsten


  


Betrifft: AW: For und if austauschen!!! von: IngoG
Geschrieben am: 12.08.2004 10:54:49

Sorry, hatte ich beim ersten malnicht sofort gesehen ;-)

Dim arr as string

muß es heissen, da du ja strings in deinem Array hinterlegst...

Gruß Ingo


  


Betrifft: AW: For und if austauschen!!! von: Torsten K.
Geschrieben am: 12.08.2004 11:10:57

Hallo Ingo,

trotzdem (leider) gleiche Fehlermeldung: Typen unverträglich. :-((

Gruß
Torsten


  


Betrifft: AW: For und if austauschen!!! von: IngoG
Geschrieben am: 12.08.2004 11:34:43

Hallo nochmal,

lauffähig kriegst Du es auf jedenfall, wenn Du arr weglässt und direkt

for each ws in worksheets(array(...))

schreibst

für die Zuweisung eines arrays zu einer variablen müsste ich auch erst nachsuchen.

Gruß ingo


  


Betrifft: AW: For und if austauschen!!! von: Torsten K.
Geschrieben am: 12.08.2004 11:45:01

Hi Ingo,

Dein Vorschlag

For Each ws In Worksheets(Arr("SETT", "PROTOC", "RE18VJ", "RE912VJ", "RE18LJ", "BU12LJ", "Accounts"))

gibt die Fehlermeldung: Erwartet Datenfeld.

Mein Vorschlag: An der Stelle brechen wir ab. Ich habe ja einen Code, der läuft (von Sam). Es sei denn, Du hast noch Lust, hier weiter zu forschen und den Eifer, das Problem zu lösen.

Ein herzliches Dankeschön für Deine Unterstützung (und Geduld :-) )

Viele Grüße
Torsten


  


Betrifft: Danke für die Rückmeldung von: IngoG
Geschrieben am: 12.08.2004 12:20:11

Hallo Thorsten,

sorry aber bei mir läuft der Code so wie beschrieben...
weiss jetzt auch nicht wirklich wo der Fehler noch liegen kann.

Gruß Ingo


  


Betrifft: PS anregung... von: IngoG
Geschrieben am: 12.08.2004 11:14:06

Hallo Thorsten,

um auf nummer sicher zu gehen solltest Du ein weiteres Macro schreiben, welches beim schließen automatisch die angegebenen sheets wieder auf verryhidden setzt.

wenn Du dies nicht tust, kann nachdem Du in der Datei warst (und zwischendurch abgespeichert hast) jeder die Blätter sehen, wenn er die Datei öffnet ohne macros zuzulassen...

Gruß Ingo



  


Betrifft: AW: Benutzerabhängig Tabellen einblenden von: Luschi
Geschrieben am: 12.08.2004 10:18:50

Hallo Torten,

mach es einfach so:

Dim Arr As Variant, i As Long, n As Long, ok As Boolean, _
wieZeigen As Variant

Arr = VBA.Arr = Array("SETT", "PROTOC", "RE18VJ", "RE912VJ", "RE18LJ", "BU12LJ", "Accounts")


wieZeigen = IIf(Application.UserName = "GWS-TKR", True, xlVeryHidden)
n = UBound(Arr)
For i = 0 To n
Worksheets(Arr(i)).Visible = wieZeigen
Next i


  


Betrifft: AW: erledigt. - An alle fleißigen Helfer ..... von: Torsten K.
Geschrieben am: 12.08.2004 11:47:21

ein Dankeschön.

Gruß
Torsten


 

Beiträge aus den Excel-Beispielen zum Thema "Benutzerabhängig Tabellen einblenden"