Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1768to1772
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Spalten automatisch einblenden
15.07.2020 09:28:36
Umberto
Hallo zusammen,
ich habe ein kleines Problem und komme leider selbst nicht mehr weiter. Ich habe bereits im Internet recherchiert aber bisher noch nichts gefunden das funktioniert. Meine Situation sieht wie folgt aus:
Ein Makro in meiner Datei führt beim Schließen die folgenden Befehle für ein einzelnes Sheet aus: einen bestimmten Bereich sperren, bestimmte Spalten ausblenden und am Ende noch das Sheet mit einem Passwort schützen. Problem: Nachdem der Nutzer den Blattschutz per Passwort deaktiviert hat muss er die ausgeblendeten Spalten manuell wieder sichtbar machen.
Gibt es eine Möglichkeit die Spalten automatisch sichtbar zu machen, sobald der Nutzer den Blattschutz aufgehoben hat? Solange das Blatt geschützt ist soll nichts passieren, in dem Moment wo der Blattschutz aufgehoben wird soll das ganze aber automatisch passieren. Also so etwas wie: If ActiveSheet.Unprotect Then Sheets("Sheet1").Columns("XYZ").EntireColumn.Hidden = False? Und wo müsste ich den Code hinterlegen bzw. welches Event muss ich verwenden?
Mein aktueller Code sieht wie folgt aus:
'Bereich sperren
Sheets("Sheet1").Select
Sheets("Sheet1").Range("A:B").Select
If Selection.Locked = False Then
Selection.Locked = True
Selection.FormulaHidden = False
End If
'Sensible Spalten ausblenden
If Sheets("'Sheet1").Columns("X").EntireColumn.Hidden = False Or Sheets("Sheet1").Columns("Y").EntireColumn.Hidden = False Or Sheets("Sheet1").Columns("Z").EntireColumn.Hidden = False Or Sheets("Sheet1").Columns("X:Y").EntireColumn.Hidden = False Or Sheets("Sheet1").Columns("X:Z").EntireColumn.Hidden = False Or Sheets("Sheet1").Columns("Y:Z").EntireColumn.Hidden = False Then Sheets("Sheet1").Columns("X:Z").EntireColumn.Hidden = True
End If
'Blattschutz mit Passwort aktivieren
Sheets("Sheet1").Select
ActiveSheet.Protect Password:="XYZ", DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowSorting:=True, AllowFiltering:=True
ActiveSheet.EnableSelection = xlUnlockedCells
Hoffe es kann mir jemand helfen. Schon mal vielen Dank im Voraus!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten automatisch einblenden
15.07.2020 09:37:46
Werner
Hallo,
so wie ich das sehe, gibt es ja wohl einen eingeschränkten Nutzerkreis, der die Berechtigung (das Passwort) hat, um alles sehen/bearbeiten zu können.
Da würde ich beim Start der Mappe den Nutzernamen abfragen und, wenn der Nutzer zu diesem erlauchten Kreis gehört, die entsprechenden Spalten einzublenden und den Blattschutz aufzuheben.
Gruß Werner
AW: Spalten automatisch einblenden
15.07.2020 10:33:21
Umberto
Hallo,
vielen Dank für die Rückmeldung. Ja das ist richtig, es gibt einen beschränkten Nutzerkreis.
Wie würde der Code hierfür aussehen (am besten inklusive meinem aktuellen Code)? Prinzip: Nutzer A ist berechtigt und sieht einfach alles. Bei Nutzer B hingegen wird ein bestimmter Bereich gesperrt, bestimmte Spalten ausgeblendet und er darf keine Inhalte ändern. Er darf lediglich sortieren und auf die gesamte Spalte A zugreifen, da ich hier ein weiteres Makro habe das bei Doppelklick aktiviert wird.
Ich bin damals auch auf die Variante mit dem Nutzernamen gestoßen, aber ich wusste nicht wie ich das programmieren muss.
Anzeige
AW: Spalten automatisch einblenden
15.07.2020 10:55:25
Werner
Hallo,
ins Workbook_Open
Private Sub Workbook_Open()
'abgefragt wird der Windows-Anmeldename
Select Case UCase(Environ("Username"))
'hier alle Berechtigten erfassen
'alles in Großbuchstaben
Case "KEINER", "ALLE"
With Worksheets("Sheet1")
.Columns("X:Z").Hidden = False
.Columns("A:B").Locked = False
.Unprotect Password:="XYZ"
End With
Case Else
With Worksheets("Sheet1")
.Columns("X:Z").Hidden = True
.Cells.Locked = False
.Columns("A:B").Locked = True
.Protect Password:="XYZ", DrawingObjects:=False, Contents:=True, Scenarios:=False,  _
_
AllowSorting:=True, AllowFiltering:=True
.EnableSelection = xlUnlockedCells
End With
End Select
End Sub
Und ohne dir zu Nahe treten zu wollen. Deinen VBA-Status solltest du noch mal überprüfen. Code mit Select und Status gut passen nicht zusammen.
Gruß Werner
Anzeige
AW: Spalten automatisch einblenden
15.07.2020 11:46:33
Umberto
Vielen Dank für den Code. Ich habe ihn ausprobiert, aber irgendwie wird mein Nutzername nicht erkannt. In meinem Fall gehören Max Mustermann und Erika Mustermann zu den berechtigten Personen. Wo liegt der Fehler?
Private Sub Workbook_Open()
'abgefragt wird der Windows-Anmeldename
Select Case UCase(Environ("Username"))
'hier alle Berechtigten erfassen
'alles in Großbuchstaben
Case "MAX MUSTERMANN", "ERIKA MUSTERMANN"
With Worksheets("Sheet1")
.Columns("X:Z").Hidden = False
.Columns("A:B").Locked = False
.Unprotect Password:="XYZ"
End With
Case Else
With Worksheets("Sheet1")
.Columns("X:Z").Hidden = True
.Cells.Locked = False
.Columns("A:B").Locked = True
.Protect Password:="XYZ", DrawingObjects:=False, Contents:=True,
Scenarios:=False, AllowSorting:=True, AllowFiltering:=True
.EnableSelection = xlUnlockedCells
End With
End Select
End Sub

Anzeige
AW: Spalten automatisch einblenden
15.07.2020 11:58:44
Werner
Hallo,
erst mal der Code nochmals. Da war noch ein Fehler drin, EntireColumn hatte noch gefehlt.
Private Sub Workbook_Open()
Select Case UCase(Environ("Username"))
Case "KEINER", "ALLE"
With Worksheets("Sheet1")
.Columns("X:Z").EntireColumn.Hidden = False
.Columns("A:B").Locked = False
.Unprotect Password:="XYZ"
End With
Case Else
With Worksheets("Sheet1")
.Columns("X:Z").EntireColumn.Hidden = True
.Cells.Locked = False
.Columns("A:B").Locked = True
.Protect Password:="XYZ", DrawingObjects:=False, Contents:=True, Scenarios:=False,  _
_
AllowSorting:=True, AllowFiltering:=True
.EnableSelection = xlUnlockedCells
End With
End Select
End Sub
Hat aber mit deinem Problem nichts zu tun.
Environ("Username") = der Windows Anmeldename
Lass dir den entsprechenden Namen mal in einer Messagebox ausgeben.
MsgBox Environ("Username")

Diesen Namen in Großbuchstaben mußt du in der Case Anweisung angeben.
Gruß Werner
Anzeige
Korrektur
15.07.2020 12:10:07
Werner
Hallo,
hier jetzt nochmal der Code. Das EntireColumn braucht es doch gar nicht, ist doppelt gemoppelt. Aber die Reihenfolge im Code hatte nicht gepasst. Blatt muss erst entsperrt werden bevor was ein oder ausgeblendet werden kann.
Private Sub Workbook_Open()
Select Case UCase(Environ("Username"))
Case "KEINER", "ALLE"
With Worksheets("Sheet1")
.Unprotect Password:="XYZ"
.Columns("X:Z").Hidden = False
.Columns("A:B").Locked = False
End With
Case Else
With Worksheets("Sheet1")
.Unprotect Password:="XYZ"
.Columns("X:Z").Hidden = True
.Cells.Locked = False
.Columns("A:B").Locked = True
.Protect Password:="XYZ", DrawingObjects:=False, Contents:=True, Scenarios:=False,  _
_
AllowSorting:=True, AllowFiltering:=True
.EnableSelection = xlUnlockedCells
End With
End Select
End Sub
Das Problem mit den Usernamen siehe obige Antwort.
Gruß Werner
Anzeige
AW: Korrektur
15.07.2020 15:59:51
Umberto
Vielen Dank, jetzt klappt alles!
Gerne u. Danke für die Rückmeldung. o.w.T.
15.07.2020 16:23:23
Werner

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige