Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Can
27.09.2018 19:39:58
EFE
bin neu hier, zuerst mal wirklich eine tolle Community. Sehr Hilfsbereite Menschen.
Bin eigentlich ein Neuling wenn es um VBA geht. Aber ich hab es mal geschafft was zusammen zu stellen.
Kurze Erläuterung zur der Excel:
Habe 5-12 Tabellen, die je nach User eingeblendet bzw. ausgeblendet werden. Je nach Berechtigung kann der User die Tabellen sehen.
Die User dürfen bei dieser Excel nur "Speichern" und "Speichern unter" deaktiviert ist.
Jetzt die Probleme:
1. Wenn die User "Speichern" (was auch funktioniert*grins*) schließt mir das Makro die ganzen Tabellen, auch die wo der User Berechtigung hat (das gilt auch für den AdminUser), bis auf die 2 freien Tabellen.
2. Da ich AdminUser die Berechtigung für alle Tabellen hat, kann er Trotzdem nicht "Speichern unter"
Wie bekomme ich das eigentlich hin, für den AdminUser "Speichern unter" erlaubt ist.
Hoffe das diese Fragestellung euch mein Problem erklärt.
Und wie gesagt bin nicht der VBA Killer, habe das mit sehr viel lesen und Hilfe zusammen gestellt.
Hier noch was ich zusammengebastelt habe:
Im DieseArbeitsmappe:
Option Explicit
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Call Macros.userEinfügen
Call Macros.blätterAusblenden
Call Macros.userFreigabe
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Arbeitsblatt As Worksheet
If SaveAsUI Then
MsgBox "Ein Versuch wars Wert ;)", vbCritical, "Speichern unter nicht erlaubt!"
Else
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Tabelle8.Visible = xlSheetVisible
For Each Arbeitsblatt In Worksheets
If Not Arbeitsblatt Is Tabelle8 Then _
Arbeitsblatt.Visible = xlSheetVeryHidden
Next
ThisWorkbook.Save
For Each Arbeitsblatt In Worksheets
Sheets("").Visible = xlSheetVeryHidden
Sheets("").Visible = xlSheetVeryHidden
Sheets("").Visible = xlSheetVeryHidden
Sheets("").Visible = xlSheetVeryHidden
Sheets("").Visible = xlSheetVisiable
Sheets("").Visible = xlSheetVisible
Next
Tabelle8.Visible = xlSheetVisible
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
ThisWorkbook.Saved = True
End If
Cancel = True
End Sub
Im Modul:
Option Explicit
Sub blätterAusblenden()
Dim ws As Worksheet
For Each ws In Worksheets
Sheets("Startblatt").Activate
If ws.Name "Startblatt" Then
ws.Visible = xlSheetVeryHidden
End If
Next
End Sub
Sub userEinfügen()
Sheets("User").Range("A2") = Environ$("username")
End Sub
Sub userFreigabe()
Dim varUser As Variant
Dim lngZeile As Long
Dim intSpalte As Integer
Dim ws As Worksheet
With Sheets("User")
varUser = .Range("B2").Value
lngZeile = 2
Do While .Cells(lngZeile, 5).Value varUser And lngZeile "" Then
For Each ws In Worksheets
ws.Visible = True
Next
Else
intSpalte = 7
Do While .Cells(1, intSpalte).Value ""
Set ws = Sheets(.Cells(1, intSpalte).Value)
If .Cells(lngZeile, intSpalte).Value "" Then
ws.Visible = True
Else
ws.Visible = xlSheetVeryHidden
End If
intSpalte = intSpalte + 1
Loop
End If
Else
Call falscherUser
End If
End With
End Sub
Sub BlattUser()
Sheets("User").Visible = xlSheetHidden
Sheets("User").Visible = True
End Sub
Sub falscherUser()
End Sub
LG EFE