Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
824to828
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
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

beforesave - beforeclose

beforesave - beforeclose
28.11.2006 21:22:43
Frank
Hallo,
hatte mir letztens aus den Foren mein Sicherungsmakro gebastelt. bin damit aber nicht zufrieden. Normal müßte ich es in eine beforeclose Anweisung umwandeln. Aber Close und save beißen sich irgendwie.
Normal soll es so sein, dass ich meine daten immer speichern kann ohne dass sich irgendwelche tabellenblätter schliesen oder öffnen - ganz normal speichern.
Was aber verhindert werden muß ist, dass irgendein User die datei unter einen anderen namen speichert, Und zum anderen soll beim schließen nur noch tabelle2 sichtbar sein - speichern - sodas beim erneuten öffnen nur tabelle2 sichtbar ist. Die anderen werden über eine UF welche mit dem öffnen der datei angezeigt wird eingeblendet.
Kann mir jemand helfen

Private Sub Workbook_Beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim objWks As Worksheet
If SaveAsUI Then
MsgBox "Speichern unter ist nicht erlaubt"
Else
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Tabelle2.Visible = xlSheetVisible
For Each objWks In Worksheets
If Not objWks Is Tabelle2 Then _
objWks.Visible = xlSheetHidden
Next
ThisWorkbook.Save
For Each objWks In Worksheets
objWks.Visible = xlSheetVisible
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
ThisWorkbook.Saved = True
End If
Cancel = True
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: beforesave - beforeclose
28.11.2006 21:36:53
ramses
Hallo
1. Wo ist das Object "Tabelle2" definiert ?
2. Du nicht die Tabellenbezeichnung ab.
Du solltest deine Fragen klar stellen und nicht Heerscharen von Leuten damit beschäftigen.
Sorry für die harten Worte, aber das von dir "gebastelte" Makro hat nicht mehr viel mit den Lösungen zu tun, die du in funktionierender Weise erhalten hast.
Im Before_Close Ereignis den Namen abfragen den die Datei haben soll, wenn nicht, gleich löschen.
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Qe As Integer
If ThisWorkbook.Name <> "DeineDatei.xls" Then
Qe = MsgBox("Der Dateiname ist nicht zulässig", vbCritical + vbOKOnly, "Fehler")
Cancel = True
ThisWorkbook.Saved = False
'Alternativ
'Die Datei wird ohne Hinweis gelöscht
'Kill ThisWorkbook.FullName
End If
End Sub

Gruss Rainer
Anzeige
Nachtrag
28.11.2006 21:38:31
ramses
Hallo
Sorry es muss korrekt heissen
2. Du frägst nicht den Tabellennamen ab.
Gruss Rainer
AW: Nachtrag
28.11.2006 22:07:14
Frank
Hallo Rainer,
ich kann mich ja auch hinstellen wie so viele und flehen habe keine ahnung helft mir!!
Bevor ich einen Beitrag verfasse durchsuche ich immer die recherche. Habe ja keine ahnung vom programmieren will mich aber auch nicht nur mit offener Hand hinstellen.
Also, besagtes makro habe ich bei Herber.de gefunden nur dass ich die Tabellennamen ausgetauscht habe. Die Geschichte funktioniert ja auch nur eben soll dies beim schließen passieren. Beim normalen speichern von daten ist es schon lästig wenn die Tabellenblätter ausgeblendet werden.
Hintergrund, wenn ich meine datei öffne darf von meinen tabellenblättern nur tabelle2 angezeigt werden. Dies ist eine Hinweisseite für meine User. Gleichzeitig wird eine UF eingeblendet welche ein passwort abfragt. Kennt der User dieses hat er Zugriff auch auf die restlichen Blätter. Kennt ers nicht hat er Pech und die Datei schließt sich. Wenn der user aber die datei mit makro deaktiviert öffnet und diese vorher beim schließen nicht wieder auf Tabelle2 reduziert wurde hat er zugriff auf alle Blätter. Deswegen auch das Speichern unter unterbinden.
Gruß Frank
Anzeige
AW: Nachtrag
28.11.2006 22:18:23
ramses
Hallo
"....besagtes makro habe ich bei Herber.de gefunden ..."
Bist du sicher ?
http://phorum.excelhost.de/read.php?11,106937,106979#msg-106979
Das sieht dem zum verwechseln ähnlich ;-)
"...Die Geschichte funktioniert ja auch nur eben soll dies beim schließen passieren. ..."
Kann gar nicht funktionieren, weil "Tabelle2" nicht als Object definiert und zugewiesen ist.
"...Wenn der user aber die datei mit makro deaktiviert öffnet und diese vorher beim schließen nicht wieder auf Tabelle2 reduziert wurde..."
Wie soll das gehen ?
Wenn die Makros deaktiviert sind, kann keine UF angezeigt werden.
Dann sind jedoch die Makros aktiviert und alles sollte seinen normalen Gang gehen.
Wenn alle Tabellen xlVeryHidden gesetzt sind, hat er keine Möglichkeit ohne VBA-Code die Tabellen sichtbar zu machen
Gruss Rainer
Anzeige
AW: Nachtrag
29.11.2006 19:16:11
Frank
hallo rainer,
irgendwie drücke ich mich wahrscheinlich falsch aus.
Im Anhang schicke ich Dir mal die original Datei woher ich das makro habe und mein gesamtes makro. Wahrscheinlich reden wir da dort aneinander vorbei.
Die datei hat folgenden Sinn. Die Datei soll zeitabhängig bestimmten Usern nur zur Verfügung stehen. Das heißt beim öffnen der datei wird nur tabelle2 eingeblendet alle anderen sind ausgeblendet. Es erscheint eine UF mit einer Passwortabfrage. Bei erfolgreicher PW Eingabe steht die Datei im vollen Umfang diesem User zur Verfügung. Wird dagen abbrechen betätigt werden die restlichen Blätter nur aktiviert, wenn sie im festgelegten Zeitfenster aktiviert wurde ansonsten schließt sich die datei. Öffnet der User die datei mit Makros deaktiviert erscheint nur die Tabelle2 eingeblendet weiter nichts. Dort stehen halt nur die Öffnugszeiten drinn. Das heißt das egal wer als letztes die gesamte Datei offen hatte und abspeicherte es muß sicher gestellt werden, das bei diesem Vorgang alle tabellenblätter ausgeblendet werden (xlveryhidden) bis auf das Hinweistabellenblatt2. Speichern unter darf auch nicht funktionieren - kenne ja meine Pappenheimer. Mein Makro funktioniert soweit das öffnen und schließen + speichern unter angeht einwandfrei. Nur beim Speichern wird dies alles veranstaltet. Ich möchte gern, das das beim schließen passiert.
https://www.herber.de/bbs/user/38623.xls
Gruß Frank

Private Sub Workbook_activate()
With Application
.Application.DisplayAlerts = False
.CommandBars("Worksheet Menu Bar").Enabled = True
.CommandBars("Standard").Visible = False
'.CommandBars("Format").Visible = False
'.DisplayFormulaBar = False
'.DisplayStatusBar = False
End With
UserForm_Initialize.Show
End Sub


Private Sub Workbook_Deactivate()
With Application
.CommandBars("Worksheet Menu Bar").Enabled = True
.CommandBars("Standard").Visible = True
'.CommandBars("Format").Visible = True
.DisplayFormulaBar = True
.DisplayStatusBar = True
End With
End Sub


Private Sub Workbook_Beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim objWks As Worksheet
If SaveAsUI Then
MsgBox "Speichern unter ist nicht erlaubt"
Else
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Tabelle2.Visible = xlSheetVisible
For Each objWks In Worksheets
If Not objWks Is Tabelle2 Then _
objWks.Visible = xlSheetHidden
Next
ThisWorkbook.Save
For Each objWks In Worksheets
objWks.Visible = xlSheetVisible
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
ThisWorkbook.Saved = True
End If
Cancel = True
End Sub

Anzeige
AW: Nachtrag
30.11.2006 08:34:48
Coach
Hallo Frank,
es gibt 2 Fälle, die beide funktionieren müssen:
1) Der User nutzt Deine Datei und will seine Änderungen währenddessen immer speichern, arbeitet aber weiter. Bei jedem Speichern muß die Datei im "sicheren" Zustand gespeichert werden, weil sonst der ungesicherte Zustand bis zum Schliessen zugänglich wäre.
2) Der User schließt die Datei, ohne vorher explizit seine Änderungen zu speichern, dann muß auch gesichert gespeichert werden, eventuell mit Sicherheitsabfrage.
https://www.herber.de/bbs/user/38641.xls
Gruß Coach
Anzeige
AW: Nachtrag
30.11.2006 10:59:19
Frank
Hallo Coach,
ich komme meiner Sache immer näher. Es funktioniert bis dahin wo ich zwischendurch mal speichern möchte. Es wird gespeichert aber danach wird das letzte tabellenblatt geöffnet.
Wenn ich z.B. in Tabelle3 arbeite und zwischenspeichere möchte ich auch in 3 weiterarbeiten und nicht den Umweg über den Wechsel von Tabellenblatt5 zu Tabelle3 gehen.
Weiß nicht was das Makro veranlasst dort hinzuspringen.
Bei der datei die du geschickt hast verhält es sich ähnlich, speichere ich was in 3 wird nach tabelle 2 gewechselt. Wie kann man das denn noch abstellen. Ansonsten funktioniert es wunderprächtig!! :-)
Frank
Anzeige
AW: Nachtrag
30.11.2006 11:19:04
Coach
Hallo Frank,
das liegt am zwischenzeitlichen Ausblenden der Blätter. Die ActiveCell muss ja in einem sichtbaren Blatt sein.
Ändere das Makro Sichern wie folgt:

Sub Sichern(ByVal NurSichern As Boolean)
Dim aWS$
aWS = ActiveSheet.Name
Application.ScreenUpdating = False
Application.EnableEvents = False
Call Sichtbar(True)
ThisWorkbook.Save
If Not (NurSichern) Then
Call Sichtbar(False)
ThisWorkbook.Saved = True
Worksheets(aWS).Activate
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Gruß Coach
AW: Nachtrag
30.11.2006 11:55:58
Frank
Soooooo einfach, wenn mans kann!!!!
Danke Coach,
scheint so als ob ich am Ende meiner Wünsche wäre.
Danke, danke
Gruß Frank
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige