PDA

Vollständige Version anzeigen : Tabellenblätter ein und aus blenden


xercanx1
29.09.2016, 03:34
Hallo,

zusammen als Anfänger bräuchte ich eure Hilfe, mit dem folgendem Code
habe ich es hingekriegt das beim schließen die Tabellenblätter bis auf Start
ausgeblendet wird, beim öffnen funktioniert es leider nicht die geschlossenen
Tabellenblätter werden nicht geöffnet.

Für Eure hilfe wäre ich sehr Dankbar:)


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
For Each wks In ActiveWorkbook.Sheets
wks.Visible = True
Worksheets("Start").Visible = xlVeryHidden
Next
Application.ScreenUpdating = True
End Sub

Private Sub Workbook_Open()

Dim BerechtigteUser()

BerechtigteUser = Array("Person0", "Person1", "Person2", "Person3", "Person4")

Application.ScreenUpdating = False
Worksheets("Start").Visible = True
For Each wks In ActiveWorkbook.Sheets
If wks.Name <> "Start" Then wks.Visible = xlVeryHidden
Next

If Not IsError(Application.Match(Environ("Username"), BerechtigteUser, 0)) Then
MsgBox "Sie Sind berechtigt - viel Spaß !"
Else
MsgBox "Sie sind nicht berechtigt, die Datei zu öffnen - Mappe wird geschlossen !", , "ALARM !"
ThisWorkbook.Close False 'Mappe ohne Änderungen speichern
End If

End Sub


VG

Ercan

Beverly
29.09.2016, 07:43
Hi Ercan,

mit dieser Zeile

If wks.Name <> "Start" Then wks.Visible = xlVeryHidden

blendest du beim Öffnen die Blätter aus, sie sollen aber eingeblendet werden also: wks.Visible = xlVisible


Außerdem solltest du zuerst abfragen ob der Benutzer berechtigt ist - wozu sonst die Tabellenblätter einblenden?

Private Sub Workbook_Open()
Dim BerechtigteUser()
Dim wks As Worksheet
BerechtigteUser = Array("Persin0", "Person1", "Person2", "Person3", "Person4")
If Not IsError(Application.Match(Environ("Username"), BerechtigteUser(), 0)) Then
MsgBox "Sie Sind berechtigt - viel Spaß !"
Else
MsgBox "Sie sind nicht berechtigt, die Datei zu öffnen - Mappe wird geschlossen !", , "ALARM !"
ThisWorkbook.Close False 'Mappe ohne Änderungen speichern
End If
Application.ScreenUpdating = False
For Each wks In ActiveWorkbook.Sheets
wks.Visible = xlVisible
Next
Application.ScreenUpdating = True
End Sub



<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

xercanx1
29.09.2016, 08:46
Hallo Beverly,

vielen Dank für Deine Antwort, ich glaube vor lauter Verzweifelung, habe ich mich nicht richtig ausgedrückt, gedacht ist beim schließen sollen alle Tabellenblätter bis auf "Start" geschlossen werden und beim öffnen, wenn Berechtigter User wieder geöffnet werden.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
For Each wks In ActiveWorkbook.Sheets
wks.Visible = True
Worksheets("Start").Visible = xlVisible
Next
Application.ScreenUpdating = True
End Sub

Private Sub Workbook_Open()

Private Sub Workbook_Open()
Dim BerechtigteUser()
Dim wks As Worksheet
BerechtigteUser = Array("Persin0", "Person1", "Person2", "Person3", "Person4")
If Not IsError(Application.Match(Environ("Username"), BerechtigteUser(), 0)) Then
MsgBox "Sie Sind berechtigt - viel Spaß !"
Else
MsgBox "Sie sind nicht berechtigt, die Datei zu öffnen - Mappe wird geschlossen !", , "ALARM !"
ThisWorkbook.Close False 'Mappe ohne Änderungen speichern
End If
Application.ScreenUpdating = False
For Each wks In ActiveWorkbook.Sheets
wks.Visible = xlVisible
Next
Application.ScreenUpdating = True
End Sub

VG

Ercan

mathieu_91
29.09.2016, 09:02
Hallo,

ich habe das in meinem Tool auch.

Habe dafür eine Function erzeugt, die als Boolean zurückgibt, ob die Person befugter oder unbefugter ist, also True oder False.



Sub Workbook_Open()

If UserStat=true then

msgbox "viel spaß!"
'Die einblenden, die ein Nutzer sehen darf

Else
msgbox"blabla Alarm!"
thisworkbook.close
End if

End Sub

Function UserStat()as boolean

BerechtigteUser = Array("Persin0", "Person1", "Person2", "Person3", "Person4")
User=Environ("Username")
UserStat=false

For i=1 to ubound(BerechtigteUser)
Select Case BerechtigteUser(i)
Case User
UserStat=true
Exit function
Case else
UserStat=false
End select
Next i

End Function

xercanx1
29.09.2016, 09:45
Hallo mathieu_91,

vielen Dank für deine Antwort, Kriegs aber nicht hin, schmeißt mich raus
obwohl ich Benutzername angepasst habe.



VG

Ercan

Beverly
29.09.2016, 10:48
Hi Ercan,

du solltest nur im Code für das Open-Ereignis etwas ändern - das BeforeClose-Ereignis soll so bleiben wie in deinem zuerst geposteten Code.



<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

xercanx1
29.09.2016, 12:14
Hallo zusammen,

vielen Danke für eure Unterstützung, ich habs mit dem folgenden Code geschafft.


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Start").Visible = True
' alle Tabellen ausblenden vom letzten bis zum ersten
' außer "Start"
For InI = Sheets.Count To 1 Step -1
If Sheets(InI).Name <> "Start" Then Sheets(InI).Visible = xlVeryHidden
Next InI
ByS = True
Application.StatusBar = False
ThisWorkbook.Save



End Sub
Private Sub Workbook_Open()
Dim BerechtigteUser()

BerechtigteUser = Array("Person0", "Person1", "Person2", "Person3", "Person4")

If Not IsError(Application.Match(Environ("Username"), BerechtigteUser, 0)) Then
MsgBox "Sie Sind berechtigt - viel Spaß !"
Else
MsgBox "Sie sind nicht berechtigt, die Datei zu öffnen - Mappe wird geschlossen !", , "ALARM !"
ThisWorkbook.Close False 'Mappe ohne Änderungen speichern
End If
Application.ScreenUpdating = False
For InI = Sheets.Count To 1 Step -1
Sheets(InI).Visible = True
Next InI
' Tabelle mit Hinweis ausblenden
Sheets("Start").Visible = False


End Sub



VG

Ercan