Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Alle Tabellenblätter mittels Codename ausblenden

Alle Tabellenblätter mittels Codename ausblenden
24.02.2016 02:04:40
Torsten
Nun zu einer Sache mit der sich jeder befasst, wenn er eine Tabelle mit vertraulichen Daten erstellt.
Wie blende ich beim schließen des Workbooks alles aus und beim öffnen alles ein?!
Da beim öffnen der Mappe und nicht aktiviertem Inhalt das letzte bearbeitete Blatt vor dem speichern zu sehen und sogar zu bearbeiten ist.
Ich möchte vor dem schließen der Mappe das Tabellenblatt mit dem Codenamen "wksopen" aufrufen.
Egal welchen Namen dieses Tabellenblatt hat.
Denn wenn einem Nutzer die Langeweile quält und er den Namen von "startseite" auf "probe" ändert, kann mein vba-code dieses Blatt nicht mehr ansprechen.
Um hier auf Nummer sicher zu gehen, möchte ich das Blatt mit dem Codenamen ansprechen.

sub probe ()
Dim wks As Worksheet
Application.ScreenUpdating = False
For Each wks In ThisWorkbook.Worksheets
If Not wks.Name = "Startseite" Then
wks.Visible = xlVeryHidden
End If
Next wks
Application.ScreenUpdating = True
end sub

Nun mein Versuchcode mit dem ich immer scheiter:
Sub aus()
Dim wks As Worksheet
Application.ScreenUpdating = False
wksopen.Visible = True
For Each wks In ThisWorkbook.Worksheets
If wks.CodeName = Not wksopen Then
wks.Visible = xlVeryHidden
End If
Next wks
Application.ScreenUpdating = True
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Alle Tabellenblätter mittels Codename ausblenden
24.02.2016 02:51:39
Matthias
Hallo
Ungetestet
If wks.CodeName  "wksopen" Then
Gruß Matthias

AW: Alle Tabellenblätter mittels Codename ausblenden
24.02.2016 11:18:43
Torsten
Danke Matthias,
des Rätsels Lösung war:
If Not wks Is wksopen Then
Vielen Dank

das weiß ich ...
24.02.2016 15:18:39
Matthias
Hallo
wks.CodeName  "wksopen" Then

geht genauso.
Gruß Matthias

Warum machst du das hier falschrum, ...
24.02.2016 02:58:58
Luc:-?
…Torsten:
If wks.CodeName = Not wksopen Then? Vorher war's richtiger (Not voranstellen oder benutzen)!
Den CodeName sollte man dann aber auch auf wksOpen ändern! Standardmäßig entsprechen alle CodeNames der Blätter nämlich ihren Namen (eigentlich Titeln!) und der der Mappe lautet DieseArbeitsmappe. Das ist nicht eindeutig und kann bei gleichzeitiger Verwendung mehrerer Mappen zu Problemen führen, da die CodeNames selbständige Objekte bezeichnen und nicht auf irgendein anderes, per CodeName identifiziertes Objekt bezogen wdn können. Das kannst du ja mal mit 2 offenen Mappen, den Standard­Blatt­Namen und Tabelle2.Parent testen, ggf von einer 3.Mappe aus, die nur ein Blatt enthält.
Mal ein Bsp:
1.Datei — CodeName VBAProject → AlfaDatei - (Name): Alfa.xlsm
- MappenDokuModul — CodeName DieseArbeitsmappe → AlfaMappe - (Name): ohne
- Blatt1DokuModul — CodeName Tabelle1 → AlfaTab1 - (Name): Tabelle1
- Blatt2DokuModul — CodeName Tabelle2 → AlfaTab2 - (Name): Tabelle2
usw.
2.Datei — CodeName VBAProject → BetaDatei - (Name): Beta.xlsm
- MappenDokuModul — CodeName DieseArbeitsmappe → BetaMappe - (Name): ohne
- Blatt1DokuModul — CodeName Tabelle1 → BetaTab1 - (Name): Tabelle1
- Blatt2DokuModul — CodeName Tabelle2 → BetaTab2 - (Name): Tabelle2
usw.
Das ist besonders wichtig für eine als AddIn fungierende Mappe (.xlam/b), sonst kann man ihren Inhalt nicht in andere VBA-Pro­jekte per VBE-Verweis einbinden!
Übrigens wäre wksOpen in deinem 2.PgmBsp eine direkte Referenz auf das Objekt, CodeName liefert aber einen Text. Also hast du 2 reale Möglichkeiten, aber leider eine weitere falsche gewählt. Richtig wäre entweder …
If wks.CodeName "wksOpen" Then
…oder …
If Not wks Is wksOpen Then
Gruß, Luc :-?
Besser informiert mit …

Anzeige
Alle Tabellenblätter mittels Codename ausblenden
24.02.2016 11:15:24
Rudi
Hallo,
noch eine Möglichkeit.
Sub probe()
Dim wks As Worksheet
Application.ScreenUpdating = False
For Each wks In ThisWorkbook.Worksheets
If Not wks Is wksOpen Then
wks.Visible = xlSheetVeryHidden
End If
Next wks
Application.ScreenUpdating = True
End Sub

Gruß
Rudi

Die hatte ich als 2. bereits genannt! ;-] orT
24.02.2016 13:09:29
Luc:-?
Gruß, Luc :-?

AW: Alle Tabellenblätter mittels Codename ausblend
24.02.2016 12:09:40
Daniel
Hi
kleiner Tip am Rande:
ich würde die Blätter beim Speichern mit dem Event "BeforeSave" ausblenden!
wenn du die Blätter beim Schließen ausblendest, könnte der Anwender ja auch folgendes tun:
- erst speichern ohne zu schließen
- dann schließen ohne zu speichern (bspw Excel über den Taskmanager "abschießen")
dann wären bei deiner Vorgehensweise die Blätter sichtbar gespeichert.
damit man beim Zwischenspeichern wieder normal arbeiten kann, kannst du ja im AfterSave-Event die Blätter wieder einblenden.
Gruß Daniel

Anzeige
AW: Alle Tabellenblätter mittels Codename ausblend
24.02.2016 12:10:01
Daniel
Hi
kleiner Tip am Rande:
ich würde die Blätter beim Speichern mit dem Event "BeforeSave" ausblenden!
wenn du die Blätter beim Schließen ausblendest, könnte der Anwender ja auch folgendes tun:
- erst speichern ohne zu schließen
- dann schließen ohne zu speichern (bspw Excel über den Taskmanager "abschießen")
dann wären bei deiner Vorgehensweise die Blätter sichtbar gespeichert.
damit man beim Zwischenspeichern wieder normal arbeiten kann, kannst du ja im AfterSave-Event die Blätter wieder einblenden.
Gruß Daniel

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige