Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
724to728
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
724to728
724to728
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Dringend Hilfe von VBA-Profis benötigt............

Dringend Hilfe von VBA-Profis benötigt............
25.01.2006 22:12:27
VBA-Profis
Hallo liebe VBA Spezialisten,
ich habe ein Problem bei dem ich nicht recht weiter komme.
Das folgende VBA-Projekt sollte zum Ziel haben, dass für die Mitarbeiter die sich mit einem der Windows-User von Mitarbeiter1 bis Mitarbeiter19 am PC anmelden, ausschliesslich nur die dem jeweiligen Mitarbeiter zugeordente Tabelle geöffnet wird und alle anderen Tabellenblätter verborgen bleiben.
Es sollen nur dann alle Tabellen angezeigt werden, falls sich der Mitarbeiter mit dem Windows-User Mitarbeiter500 , der Chef, anmeldet.
Falls die Excel-Datei ohne die Makros zu aktivieren geöffnet wird soll nur die leere "schlusstabelle" angezeigt werden.
Darüber hinaus soll auch dann nur die "schlusstabelle" und sonst nichts angezeigt werden, wenn die Tabelle von einer Person geöffnet wird, die sich mit einem nicht im VBA-Projekt, siehe unten, genannten Windows-User angemeldet hat.
Derzeit stellt es sich so dar, dass in der freigegeben Datei, ab und an doch manche Mitarbeiter alle Tabellenblätter sehen können. Ich habe noch nicht herausgefunden was der Grund dafür ist.
Schaut mal bitte mit eurem VBA-Profiblick über das unten aufgeführte Projekt und sagt mir, was ich zu ändern habe, damit es so funktioniert wie ich es oben beschrieben habe.
Vielen herzlichen dank schon mal für Eure Mühe!!!!!!!!!!!!!!
Ein verzweifelter Excel-User:-)
__________________________________________________________________________

Private Sub workbook_open()
Application.ScreenUpdating = False
uNam = Environ("Username")
If uNam = " mitarbeiter01" Then Sheets("mitarbeiter01").Visible = True
If uNam = " mitarbeiter02" Then Sheets("mitarbeiter02").Visible = True
If uNam = " mitarbeiter03" Then Sheets("mitarbeiter03").Visible = True
If uNam = " mitarbeiter04" Then Sheets("mitarbeiter04").Visible = True
If uNam = " mitarbeiter05" Then Sheets("mitarbeiter05").Visible = True
If uNam = " mitarbeiter06" Then Sheets("mitarbeiter06").Visible = True
If uNam = " mitarbeiter07" Then Sheets("mitarbeiter07").Visible = True
If uNam = " mitarbeiter08" Then Sheets("mitarbeiter08").Visible = True
If uNam = " mitarbeiter09" Then Sheets("mitarbeiter09").Visible = True
If uNam = " mitarbeiter10" Then Sheets("mitarbeiter10").Visible = True
If uNam = " mitarbeiter11" Then Sheets("mitarbeiter11").Visible = True
If uNam = " mitarbeiter12" Then Sheets("mitarbeiter12").Visible = True
If uNam = " mitarbeiter13" Then Sheets("mitarbeiter13").Visible = True
If uNam = " mitarbeiter14" Then Sheets("mitarbeiter14").Visible = True
If uNam = " mitarbeiter15" Then Sheets("mitarbeiter15").Visible = True
If uNam = " mitarbeiter16" Then Sheets("mitarbeiter16").Visible = True
If uNam = " mitarbeiter17" Then Sheets("mitarbeiter17").Visible = True
If uNam = " mitarbeiter18" Then Sheets("mitarbeiter18").Visible = True
If uNam = " mitarbeiter19" Then Sheets("mitarbeiter19").Visible = True
If uNam = "mitarbeiter500" Then Sheets("Tagesübersicht").Visible = True
If uNam = "mitarbeiter500" Then Sheets("Jahresübersicht").Visible = True
If uNam = "mitarbeiter500" Then Sheets("Produktübersicht").Visible = True
If uNam = "mitarbeiter500" Then Sheets("Januar").Visible = True
If uNam = "mitarbeiter500" Then Sheets("Februar").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter01").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter02").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter03").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter04").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter05").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter06").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter07").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter08").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter09").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter10").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter11").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter12").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter13").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter14").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter15").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter16").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter17").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter18").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter19").Visible = True
If uNam = "mitarbeiter500" Then Sheets("mitarbeiter500").Visible = True
Sheets("schlusstabelle").Visible = xlVeryHidden
Application.ScreenUpdating = True
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Sheets("schlusstabelle").Visible = True
Dim i As Byte
For i = 1 To Sheets.Count
If Sheets(i).Name <> "schlusstabelle" Then _
Sheets(i).Visible = xlVeryHidden
Next i
Application.ScreenUpdating = True
End Sub

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dringend Hilfe von VBA-Profis benötigt........
25.01.2006 23:01:21
VBA-Profis
Hallo ?
Probier's mal so!
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub workbook_open()
Dim objSh As Worksheet
Dim unam As String
Application.ScreenUpdating = False
unam = Environ("Username")

If unam = "mitarbeiter500" Then
  For Each objSh In Me.Worksheets
    objSh.Visible = xlSheetVisible
  Next
Else
  For Each objSh In Me.Worksheets
    If objSh.Name = unam Then
      objSh.Visible = xlSheetVisible
      Exit For
    End If
  Next
End If

Sheets("schlusstabelle").Visible = xlVeryHidden

Application.ScreenUpdating = True
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim objSh As Worksheet
Application.ScreenUpdating = False
Sheets("schlusstabelle").Visible = xlSheetVisible
Dim i As Byte
For Each objSh In Me.Worksheets
  If objSh.Name <> "schlusstabelle" Then _
    objSh.Visible = xlVeryHidden
Next
Application.ScreenUpdating = True
End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Dringend Hilfe von VBA-Profis benötigt........
25.01.2006 23:28:07
VBA-Profis
WOW, das ist neuer Rekord:-) vielen dank.
Wenn sich also ein teamfremder User die Exceldatei öffnet bekommt er die Fehlermeldung
"Laufzeitfehler - die visible-Eigenschaft des worksheet-objektes kann nicht festgestellt werden" und er hat keine Möglichkeit die Datei zu öffnen ohne das Projekt-Kennwort zu kennen oder falls er es kennen würde, müsste er erst am VBA-Code etwas ändern, oder?
Wie sicher schätzt Du das ein?
Ach fast hätte ich es vergessen. Was Muss ich am Code noch ändern, damit ausser dem User "mitarbeiter500" auch noch die beiden Assistenten des User "mitarbeiter500" exklusiv zugreiffen können? Im Beispiel "Mitarbeiter-Ass1" und "Mitarbeiter-Ass2"
Zusatzfrage: Die Freigabe und/oder das Schützen der exceldatei, sodass bestimmte zellen nicht mehr geändert werden können, hat keine auswirkungen auf die angezeigten Tabellen, oder?
Anzeige
AW: Dringend Hilfe von VBA-Profis benötigt........
25.01.2006 23:28:24
VBA-Profis
WOW, das ist neuer Rekord:-) vielen dank.
Wenn sich also ein teamfremder User die Exceldatei öffnet bekommt er die Fehlermeldung
"Laufzeitfehler - die visible-Eigenschaft des worksheet-objektes kann nicht festgestellt werden" und er hat keine Möglichkeit die Datei zu öffnen ohne das Projekt-Kennwort zu kennen oder falls er es kennen würde, müsste er erst am VBA-Code etwas ändern, oder?
Wie sicher schätzt Du das ein?
Ach fast hätte ich es vergessen. Was Muss ich am Code noch ändern, damit ausser dem User "mitarbeiter500" auch noch die beiden Assistenten des User "mitarbeiter500" exklusiv zugreiffen können? Im Beispiel "Mitarbeiter-Ass1" und "Mitarbeiter-Ass2"
Zusatzfrage: Die Freigabe und/oder das Schützen der exceldatei, sodass bestimmte zellen nicht mehr geändert werden können, hat keine auswirkungen auf die angezeigten Tabellen, oder?
Anzeige
AW: Dringend Hilfe von VBA-Profis benötigt........
26.01.2006 00:02:46
VBA-Profis
Hallo MUC,
Frage 1: Sehr UNSICHER. VBE öffnen und
im Direktfenster eingeben Sheets("Username").Visible =true
oder z.B. Sheets(3).Visible = true
Frage 2: If unam = "mitarbeiter500" then
If unam = "mitarbeiter500" or unam = "Mitarbeiter-Ass1" or unam = "Mitarbeiter-Ass2" then
Frage 3: Doch:
In den geschützten Zellen könne keine Änderungen vorgenommen werden.
Gruss Hansueli
AW: Dringend Hilfe von VBA-Profis benötigt........
26.01.2006 00:10:46
VBA-Profis
Frage 1: Sehr UNSICHER. VBE öffnen und
im Direktfenster eingeben Sheets("Username").Visible =true
oder z.B. Sheets(3).Visible = true
____________________________________________
Danke für die Antwort, aber wenn das VBA-Projekt kennwortgeschützt ist, dann sind doch eingaben ins "Direktfenster" nicht möglich, oder?
Gruss
Marco:-)
Anzeige
AW: Dringend Hilfe von VBA-Profis benötigt........
26.01.2006 00:19:42
VBA-Profis
Hallo MUC,
Probier's halt aus:
1. öffne mal ein leeres Excelsheet.
2. Alt-F11 (VBE-Editor)
3. Ins Direkfenster eingeben:
Application.EnableEvents=False
Workbooks.Open Filename:="Der Name Deiner super geschützten Datei.xls"
Sheets(4).Visible = True
Das war's
Gruss Hansueli
AW: Dringend Hilfe von VBA-Profis benötigt........
26.01.2006 00:26:23
VBA-Profis
Danke, habs grad ausprobiert.
wie könnte ich den Zugriff über einen solchen Umweg unterbinden?
bzw. eine indiviuelle, d.h. mitarbeiterabhängige Passwortabfrage zum Aufrufen der
Datei einbauen.
Danke für die Hilfe!
Gruss
Marco
AW: Dringend Hilfe von VBA-Profis benötigt........
26.01.2006 12:14:57
VBA-Profis
Hallo Marco,
Ich glaube nicht, dass Du eine "sichere" Lösung mit EXCEL und VBA findest.
Das einfachste wäre die Struktur aufzubrechen und die Dateien auf einen Netzwerk-Server zu legen. Dann kannst Du die Zugriffe über die Netzwerk-Security (File-Access / Benutzer) lösen. Also etwa so:
Master-EXCEL zum aufrufen der Mitarbeiter EXCELs (Zugriff readonly alle, Chef & Stellvertreter haben alle zugriffsrechte).
Zusammenfassungs-EXCEL mit gesammelten Mitarbeiter Daten [Externe Links auf Mitarbeiter-EXELS] (Zugriff Chef & Stellvertreter)
Mitarbeiter-EXCEL's (1 pro Mitarbeiter) (Zugriff nur der entsprechend Mitarbeiter und die Chefs)
Gruss Hansueli
Anzeige
Netzwerk-Security ?
26.01.2006 12:56:36
MUC
Nein über Netzwerk-Security kann ich es nicht lösen, da ich keine Adminrechte habe.
Was für alternativen gibt es denn?
AW: Netzwerk-Security ?
26.01.2006 13:28:31
EtoPHG
Hallo Marco,
KEINE.
Es geht nicht um Admin-Rechte haben oder nicht. Jemand hat die wohl bei Euch und vielleicht kannst Du Dich mit ihm zusammensetzen und Deine Probleme erläutern.
Wenn Du schon eine Datenschutz-Kritische Applikation schreiben musst, wirst Du wohl in Deiner Firma durchsetzen können, das die bestehende Sicherheits-Infrastruktur dazu genutzt werden kann. Wenn nicht, lass die Finger davon. Sorry das tönt harsch, aber ich begreife immer weniger, das Firmen kritische Applikationen auf Back-office Produkten realisieren (schnell und billig) und sich dabei um Sicherheit und Datenschutz foutieren (teuer, aufwändig und image-schädigend, wenn's kracht).
Gruss Hansueli
Anzeige
es steckt immer noch ein fehler drin:-)
26.01.2006 19:33:20
MUC
ja es handelt sich hier nicht um steng geheime daten, sodass eine schnell und billig lösung legitim ist.
vielen dank aber für deine beiträge.
gruss
Marco
aber es besteht immer noch folgendes problem:
Wenn ich zB die freigebenene Datei als "Mitarbeiter01" öffne und gleichzeitig der
User "Mitarbeiter02" die datei auf macht, dann sieht der User "Mitarbeiter02" auch das Tabellenblatt von "Mitarbeiter01"
woran liegt das?
AW: es steckt immer noch ein fehler drin:-)
26.01.2006 19:40:42
EtoPHG
Hallo Marco,
Ersetze diesen Teil mit:

Private Sub workbook_open()
Else
For Each objSh In Me.Worksheets
If objSh.Name = unam Then
objSh.Visible = xlSheetVisible
blnAccess = True
Else
objSh.Visible = xlSheetVeryHidden
End If
Next
End If
If ...
End Sub

Gruss Hansueli
Anzeige
AW: Dringend Hilfe von VBA-Profis benötigt........
26.01.2006 00:03:47
VBA-Profis
Hallo ? (hast du auch einen Namen?)
Jetzt erscheint eine Meldung, wenn ein nichtberechtigter User die Datei öffnet,
danach wird die datei geschlossen!
Der Blattschutz hat keinen Einfluss auf das Aus- oder Einblenden der Tabellen!
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub workbook_open()
Dim objSh As Worksheet
Dim unam As String
Dim blnAccess As Boolean

Application.ScreenUpdating = False
unam = Environ("Username")

If unam = "mitarbeiter500" Or unam = "Mitarbeiter-Ass1" Or unam = "Mitarbeiter-Ass2" Then
  For Each objSh In Me.Worksheets
    objSh.Visible = xlSheetVisible
  Next
  blnAccess = True
Else
  For Each objSh In Me.Worksheets
    If objSh.Name = unam Then
      objSh.Visible = xlSheetVisible
      blnAccess = True
      Exit For
    End If
  Next
End If

If blnAccess Then
  Sheets("schlusstabelle").Visible = xlSheetVeryHidden
Else
  MsgBox "Unerlaubter Zugriff!"
  Me.Close False
End If

Application.ScreenUpdating = True
End Sub




Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim objSh As Worksheet

Application.ScreenUpdating = False
Sheets("schlusstabelle").Visible = xlSheetVisible
For Each objSh In Me.Worksheets
  If objSh.Name <> "schlusstabelle" Then _
    objSh.Visible = xlVeryHidden
Next
Application.ScreenUpdating = True
End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Dringend Hilfe von VBA-Profis benötigt........
26.01.2006 00:28:50
VBA-Profis
Danke. (siehe antwort von 00:26Uhr)
Funktioniert doch nicht :-(
26.01.2006 11:28:37
MUC
Wenn ich zB die freigebenene Datei als "Mitarbeiter01" öffne und gleichzeitig der
User "Mitarbeiter02" die datei auf macht, dann sieht der User "Mitarbeiter02" auch das Tabellenblatt von "Mitarbeiter01"
woran liegt das?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige