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

VBA-Profis benötigt...........:-)

VBA-Profis benötigt...........:-)
29.01.2006 18:48:50
MUC
Hallo ich habe unten aufgeführtes MAKRO gebastelt.
Ziel: nur Windows-User "mitarbeiter-alles1" oder "mitarbeiter-alles2" dürfen alle Arbeitsmappen sehen.
alle Anderen Windows-Usern wird nur ihre eigene Arbeitsmappe angezeigt, die so heisst wieder der jeweilige Windows-User.
Problem: Ich kann folgenen Fehler nicht reproduzieren. Es soll so sein, dass nur die schlusstabelle angezeigt wird, falls die Frage ob makros aktivieren am Anfang mit nein beantwortet wird.
Ab und an erscheinen, auch wenn man die Makros deaktiviert alle Arbeitsmappen; und das bei einem User der eigentlich nur seine eigenes Tabellenblatt sehen sollte.
Meistens klappt es und es erscheint bei deaktivierten Makros nur die Schlusstabelle.
Erkennt jemand von euch woran das liegen könnte? Ich kann keinen Fehler erkennen?!
Vielen dank
Marco.
_________________________________________________________________________
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 = "mitarbeiter-alles1" Or unam = "mitarbeiter-alles2" 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
Else
objSh.Visible = xlSheetVeryHidden
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)
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

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Profis benötigt...........:-)
29.01.2006 19:32:18
Nepumuk
Hallo Marco,
wo ist die Workbook_BeforeSave - Routine?
Gruß
Nepumuk

AW: VBA-Profis benötigt...........:-)
29.01.2006 21:12:13
MUC
hallo,
Workbook_BeforeSave - Routine? brauch ich doch nicht, man wird dich sowieso gefragt, ob geseichert werden soll?
das hat doch keine auswirkungen auf das eigentlich erwähnte problem, oder?
danke!
Marco
AW: VBA-Profis benötigt...........:-)
29.01.2006 21:16:05
Nepumuk
Hallo Marco,
und was passiert, wenn dein User die Mappe speichert, wenn die Tabellen angezeigt sind, und die Frage beim schließen, ob er speichern will, aber verneint?
Gruß
Nepumuk

Anzeige
AW: VBA-Profis benötigt...........:-)
29.01.2006 21:59:35
Nepumuk
Hallo Marco,
ich glaube, du hast es nicht verstanden. Also noch mal langsam.
1. Dein User öffnet die Mappe und arbeitet darin.
2. Er klickt auf speichern.
3. Die Mappe wird mit angezeigten Tabellen gespeichert.
4. Jetzt schließt der User die Mappe.
5. Dein Makro blendet die Tabellen aus.
6. Weil dies eine Änderung darstellt, fragt Excel nach, ob diese gespeichert werden sollen.
7. Der User denkt, ich hab doch schon gespeichert und klickt auf Nein.
8. Die Mappe wird geschlossen.
9. Beim nächsten öffnen wird die Mappe mit angezeigten Tabellen geöffnet (Siehe Punkt 3).
Jetzt klarer was passiert?
Du benötigst also eine Routine, welche vor dem speichern ausblendet und anschließend wieder einblendet.
Ein Beispiel:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeSave( _
        ByVal SaveAsUI As Boolean, _
        Cancel As Boolean)

    Dim objWks As Worksheet
    If SaveAsUI Then
        MsgBox "Nicht erlaubt"
    Else
        With Application
            .ScreenUpdating = False
            .EnableEvents = False
        End With
        Tabelle1.Visible = xlSheetVisible
        For Each objWks In Worksheets
            If Not objWks Is Tabelle1 Then _
                objWks.Visible = xlSheetVeryHidden
        Next
        ThisWorkbook.Save
        For Each objWks In Worksheets
            objWks.Visible = xlSheetVisible
        Next
        Tabelle1.Visible = xlSheetVeryHidden
        With Application
            .ScreenUpdating = True
            .EnableEvents = True
        End With
        ThisWorkbook.Saved = True
    End If
    Cancel = True
End Sub

Private Sub Workbook_Open()
    Dim objWks As Worksheet
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    For Each objWks In Worksheets
        objWks.Visible = xlSheetVisible
    Next
    Tabelle1.Visible = xlSheetVeryHidden
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub

Gruß
Nepumuk

Anzeige
AW: VBA-Profis benötigt...........:-)
29.01.2006 22:10:06
MUC
schön, das du eine solche Geduld mit mir hast:-)
na verstehen tu ich es nicht 100%, aber zumindest erahne ich was du meinst. für dich als VBA-profi mag es vielleicht lächerlich klingen, aber wie genau baue ich deinen Tip in mein VBAProjekt ein, wie heisst das gesamte projekt.
kannst du es kurz posten, bevor ich wieder etwas falsch mache:-)
Tausend Dank!!!!!!!!!!!!!!
AW: VBA-Profis benötigt...........:-)
29.01.2006 22:26:55
MUC
ich meine wie baue ich das in mein VBA Projekt (s.u.) ein? Ziel ist es, dass wenn sich der User "Mitarbeiter-alles1" oder "Mitarbeiter-alles2" am pc anmeldet alle arbeitsblätter sieht und wenn sich andere mitarbeiter anmelden nur sein Arbeitsblatt angezeigt wird
Die 20 Arbeitsmappen sind mit dem PC-User identisch.
kannst du nachvollziehen wie ich es meine?
vielen dank!
Gruss
Marco
_______________________________________________
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 = "Mitarbeiter-alles1" Or unam = "Mitarbeiter-alles2" 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
Else
objSh.Visible = xlSheetVeryHidden
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)
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

Anzeige
AW: VBA-Profis benötigt...........:-)
29.01.2006 23:11:20
MUC
wäre schön wenn Du mir nochmal helfen könntest Nepumuk.
gruss
Marco
EIN KLEINER FEHLER IST NOCH DRIN, HILFE!!!!!!!!!!!
30.01.2006 00:21:33
MUC
Es ist mir ein licht aufgegangen
Der Mitarbeiter hat eigentlich fünf möglichkeiten zu speichern;
1. speichern unter: >>>>>> ist nicht erlaubt
>>>>>>>>funktioniert!!!!!!!!
2. speichern unter: >>>>>> ist erlaubt. um zu verhindern das alles sichtbar gespeichert wird, wird erst ausgeblendet, dann gespeichert und wieder eingeblendet
>>>>>>>>funktioniert!!!!!!!!
3. excel mit "X" schliessen: >>>>>> man wird gefragt ob gespeichert werden soll >>> arbeitsmappe schliesst sich automatisch nachdem "JA" gedrückt wurde
>>>>>>>>funktioniert!!!!!!!!
4. excel mit "X" schliessen: >>>>>> man wird gefragt ob gespeichert werden soll >>> arbeitsmappe schliesst sich automatisch nachdem "NEIN" gedrückt wurde. mitarbeiter hat daten nicht gespeichert und ist selber schuld wenn er sie nochmal eingeben muss. Für den Fall das man die Datei anschliessend ohne makros öffnet ist dieser fall vier unschädlich
>>>>>>>>funktioniert!!!!!!!!
5. DAS PROBLEM tritt auf wenn der Mitarbeiter, nicht excel mit dem X rechts oben schliessen will, sondern excel offen lassen will und die die Arbeitsmappe mit dem kleineren X schliessen will
ERGEBNIS: er gerät in eine Endlosschleife wenn er speichern will. Nach dem er auf "JA" gedrückt hat erscheit, die speicherabfrage nocheinmal.
?
BITTE UM HILFE, Nepumuk:-)
danke!
Marco
______________________________________________
Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim objWks As Worksheet
If SaveAsUI Then
MsgBox "Nicht erlaubt"
Else
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Tabelle4.Visible = xlSheetVisible
For Each objWks In Worksheets
If Not objWks Is Tabelle4 Then _
objWks.Visible = xlSheetVeryHidden
Next
ThisWorkbook.Save
For Each objWks In Worksheets
objWks.Visible = xlSheetVisible
Next
Tabelle4.Visible = xlSheetVeryHidden
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
ThisWorkbook.Saved = True
End If
Cancel = True
End Sub


Private Sub workbook_open()
Dim objsh As Worksheet
Dim unam As String
Dim blnAccess As Boolean
Application.ScreenUpdating = False
unam = Environ("Username")
If unam = "mitarbeiter-alles1" Or unam = "mitarbeiter-alles2" 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
Else
objsh.Visible = xlSheetVeryHidden
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)
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

Anzeige
ZWEI FEHLER SIND NOCH DRIN, HILFE!!!!!!!!!!!
30.01.2006 00:43:59
MUC
die änderung hat nun zur Folge: SPeichert ein Mitarbeiter, der eigentlich nur sein Tabellenblatt sehen sollte, über den SpeicherButton, so werden ihm alle anderen 30 Tabellenblätter, die er eigentlich nicht sehen sollte, eingeblendet?!?!!?!?
ich gebts auf für heute:-(
gruss
Marco
ES FUNKTIONIERT NUN :-)
30.01.2006 12:42:18
MUC
JETZT funktioniert es so wie ich will ( bis auf SaveAs möglich )
Falls jemandem noch Fehler auffallen, bitte gebt mir einen HInweis.
vielen dank an alle die mit geholfen haben!
gruss
Marco
______________________________________________________________________
Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim objsh As Worksheet
Dim i As Byte
If SaveAsUI Then
MsgBox "ACHTUNG:  Diese Arbeitsmappe darf nicht an einem anderen Ort gespeichert werden."
Else
With Application
End With
Tabelle4.Visible = xlSheetVisible
For Each objsh In Worksheets
If Not objsh Is Tabelle4 Then _
objsh.Visible = xlSheetVeryHidden
Next
ThisWorkbook.Save
For i = 1 To Sheets.Count
If Sheets(i).Name <> "schlusstabelle" Then _
Sheets(i).Visible = xlVeryHidden
Next
With Application
End With
ThisWorkbook.Saved = True
End If
End Sub


Private Sub workbook_open()
Dim objsh As Worksheet
Dim unam As String
Dim blnAccess As Boolean
Application.ScreenUpdating = False
unam = Environ("Username")
If unam = "Mitarbeiter-alles1" Or unam = "Mitarbeiter-alles2" 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
Else
objsh.Visible = xlSheetVeryHidden
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)
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

Anzeige
AW: überdenken
29.01.2006 20:31:23
HansHei
Hallo Marco,
Du arbeitest ja schon länger an deinem Projekt, und ich schau ab und zu auch mal rein. Wenn mein bescheidenes Wissen auch nicht abgefragt wurde, so möchte ich dennoch ein wenig zum Nachdenken anregen.
Überlege doch einmal, ob der von Dir beschrittene Weg, dein Ziel zu erreichen, konzeptionell ein Irrweg sein könnte. Überlege, ob es nicht sinnvoller ist, den AnwenderInnen eine eigenständige Datei mit je einem Tabellenblatt auf einem gemeinsamen Netzlaufwerk zur Verfügung zu stellen. Du erstellst dann eine Masterdatei die über entsprechende Verknüpfungen die relevanten Daten in ein entsprechendes Tabellenblatt("Peter", "Hans" etc.) deiner Datei überträgt. Dort kannst Du dann nach belieben entsprechende Daten den gewünschten Auswertungen zuführen.
Ein klitzekleines Beispiel anbei:
https://www.herber.de/bbs/user/30489.zip
Gruß
Hans
Frage weiter offen
Anzeige
überdenken abgeschlossen > und abgelehnt:-)
29.01.2006 21:17:41
Marco
hier liegt kein konzeptioneller Irrweg vor:-) wenn ich das auf dem weg machen würde, den du vorschlägst, dann müsste ich jedesmal bevor ich die daten in der Masterdatei aktualisiere, 30 passworter der einzelnen mitarbeiter eigbenen. genau aus dem grund mache ich ja diesen, in der Fragestellung beschriebenen weg.
aber trotzdem danke für deinen lösungsversuch.
gruss
Marco
AW: überdenken abgeschlossen > und abgelehnt:-)
29.01.2006 21:22:31
MUC
? was willst Du mir mit diesem Posting sagen?
gruss
Marco
AW: überdenken abgeschlossen > und abgelehnt:-)
29.01.2006 21:30:58
HansHei
Hallo Marco,
Ließe sich das nicht mit einem Makro lösen? Die Passwörter vergibst doch Du, oder?
Ein letztes Mal
Gruß
Hans
Frage offen
Anzeige
AW: überdenken abgeschlossen > und abgelehnt:-)
29.01.2006 21:34:35
muc@gmx.org
gute idee:-) aber so klappt es auch ganz gut.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige