Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
872to876
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
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler bei Auto-Makro

Fehler bei Auto-Makro
02.06.2007 18:03:00
MichaOch
Hallo! ;-)
brauche nochmal Eure Hilfe... :-)
Habe eine Datei mit vier Datenblättern.
Das vierte ("BE") soll beim Schließen der Datei immer automatisch ausgeblendet werden - und das egal, wie ich die Datei schließe ("Speichern", "Schließen", "X" etc.).
Habe dazu folgenden VBA-Code erstellt - nur passiert damit beim Schließen (und vorherigen Öffnen des vierten Blattes) leider gar nix...: :-(

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("BE").Visible = False
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub


Wisst Ihr, was ich falsch mache?
VG u vielen Dank im Voraus,
Micha

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler bei Auto-Makro
02.06.2007 18:08:25
Hajo_Zi
Hallo Micha,
das Ereignis wird nur ausgeführt, wenn Veränderungen in der Mappe gemacht wurden die noch nicht gespeichert wurden.

AW: Fehler bei Auto-Makro
02.06.2007 18:14:55
MichaOch
Hallo Hajo,
danke.
Es klappt leider auch nicht, wenn ich vorher in irgendeiner Zelle Änderungen vornehme und dann beim Schließen auf "Speichern - Ja" klicke... - es passiert schlicht u einfach gar nix und das vierte Blatt wird beim nächsten Öffnen nach wie vor angezeigt... :-(
Führe ich dagegen das Makro (bei mir STRG + a) mit dem gleichen Inhalt manuell aus, wird der Reiter ausgeblendet...?!?
VG,
Micha

Anzeige
AW: Fehler bei Auto-Makro
02.06.2007 18:20:07
Hajo_Zi
Hallo Micha,
ich habe keine Datei gesehen. Darum habe ich jetzt die Zeit investiert und das nachgebaut. Der Code läuft wie geplant.
Gruß Hajo

AW: Fehler bei Auto-Makro
02.06.2007 18:20:50
Josef
Hallo Micha,
probier mal.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim bSaved As Boolean
bSaved = Me.Saved
Sheets("BE").Visible = xlSheetHidden
If bSaved Then Me.Save
End Sub

Gruß Sepp

Anzeige
AW: Fehler bei Auto-Makro
02.06.2007 18:28:56
MichaOch
Hi Ihr,
hatte den Code versehentlich nur in einem Blatt und nicht für die ganze Arbeitsmappe eingefügt - jetzt läufts...
Ganz großes Sorry und vielen Dank an alle ! ;-)
Micha

AW: Fehler bei Auto-Makro
02.06.2007 18:41:00
Matthias
Hallo Sepp,
Dein Code hat folgenden "Fehler", teste mal:
Mappe öffnen, Blatt BE einblenden, Mappe speichern.
Nun ein paar Zellen ändern, dann Mappe schließen, Abfrage nach speichern mit "Nein" beantworten.
Nun ist beim nächsten Öffnen das Blatt BE sichtbar.
Liegt natürlich daran, dass es keine BeforeSave-Routine gibt.
Gruß Matthias

Das ist doch klar, ...
02.06.2007 18:54:00
Josef
Hallo Matthias,
... oder warum glaubst du, habe ich "bSaved" im Code?
Ich mag keine Routinen, die Speichern ohne das ich es will!
Gruß Sepp

Anzeige
AW: Das ist doch klar, ...
02.06.2007 18:56:00
MichaOch
...vielen Dank für alle Tipps - es läuft !
VG,
Micha

AW: Das ist doch klar, ...
02.06.2007 18:59:00
Matthias
Hallo Sepp,
Ich mag keine Routinen, die Speichern ohne das ich es will!
Wer mag das schon...
mein Lösungsvorschlag ist unten im Thread. Da wird das Speichern abgefangen und durch eine eigene Routine ersetzt, die das Blatt vorher ausblendet.
Naja, das sollte ich eigentlich dem Micha sagen, du bist ja m.W. fit auf dem Gebiet ;-)
Gruß Matthias

AW: Das ist doch klar, ...
02.06.2007 21:31:09
KiaOra
Hi Ihr,
habe wieder mal ein kleines Problem - hoffe, Ihr könnt mir weiterhelfen! ;-)
Hi Matthias,
ist ja der Hammer, wie viel Mühe Du Dir gemacht hast - danke, ist echt klasse !!!
Da ich diesen Code nicht mehr ganz durchblicke (lach), möchte ich noch folgendes dazu fragen:
- Ist es möglich, dass Du die Stellen markierst, die ich noch an meine Datei anpassen muss...? ;-)
- Meinst Du, Du bekommst auch noch das mit dem VBA-Code rein (s. die Punkte unten) ?
VG und einfach nochmal danke für alles - ist auch nicht für mich, sondern für einen gemeinnützigen Verein, hast also echt was Gutes damit getan... :-)
Micha

Habe eine Datei "Tagungsorga" mit einem Blatt "BE".

Beim Speichern der Datei soll folgendes geschehen:
1) Ausblenden/ Verstecken des Reiters "BE" und Speichern der Datei unter aktuellem Dateipfad u. -name (je nach User).
2) Erstellen einer Kopie der Datei mit dem Titel "Kopie-Tagungsorga_ohne-BE"
3) Löschen des Reiters "BE" und (!) des VBA-Codes in der Kopie und Speichern am gleichen "Ort" wie die Hauptdatei
Habe mich dazu an einem VBA-Code versucht (s.u.), an dem ich leider kläglich gescheitert bin... :-(
Hoffe, jemand von Euch weiss Rat...! :-)

Anzeige
AW: Das ist doch klar, ...
02.06.2007 21:44:09
Matthias
Hallo Micha,
1) Ausblenden/ Verstecken des Reiters "BE" und Speichern der Datei unter aktuellem Dateipfad u. -name (je nach User).
Das ist ja schon erledigt - was meinst du aber mit "je nach User"?
2) Erstellen einer Kopie der Datei mit dem Titel "Kopie-Tagungsorga_ohne-BE"
Im gleichen Verzeichnis wie die Mappe?
3) Löschen des Reiters "BE" und (!) des VBA-Codes in der Kopie und Speichern am gleichen "Ort" wie die Hauptdatei
Und unter welchem Dateinamen?
Irgendwie hab ich insgesamt nicht verstanden, was du damit erreichen willst.
Gruß Matthias

Anzeige
AW: Das ist doch klar, ...
02.06.2007 21:50:00
KiaOra
Hi Matthias,
sorry!
zu 1) Ist mit Deinem Code erledigt
zu 2) Ja, im gleichen Verzeichnis, wie die Ursprungsdatei
zu 3) Unter dem Namen "Kopie-Tagungsorga_ohne-BE" (s. Punkt 2)
Hintergrund ist, dass die Datei per Email zur weiteren Bearbeitung gegeben wird und die Empfänger (die bekommen die Kopie) keinen Zugriff auf die vertraulichen Daten im Reiter "BE" haben sollen (deswegen soll der gelöscht werden).
Gleiches gilt für den VBA-Code in der Kopie, der dort auch nicht mehr nötig ist... ;-)
Hoffe, jetzt konnt ichs besser erklären.
VG, Micha

Anzeige
AW: Das ist doch klar, ...
02.06.2007 21:55:19
Matthias
Hallo Micha,
zusammengefasst also braucht du zusätzlich bei jedem Speichern eine Kopie der Datei, die alle Blätter der Ursprungsdatei enthält bis auf das Blatt "BE" (und den VBA-Code). Haben denn die Tabellenblätter eigenen Code (also im Tabellenmodul)?
Gruß Matthias

AW: Das ist doch klar, ...
02.06.2007 21:59:00
KiaOra
...ja, genau. :-)
Die Blätter haben unterschiedlichen Code, der jedoch in keinem der Blätter der Kopie benötigt wird.
Die Empfänger der Kopie müssen diese eigentlich nur noch nach Bedarf filtern, ggf. sortieren u. drucken - dafür ist nirgends Code hinterlegt (der betrifft nur die Dateneingabe)...
VG,
Micha

Anzeige
AW: Das ist doch klar, ...
02.06.2007 22:48:00
Matthias
Hi Micha,
also, alles in "DieseArbeitsmappe" (der alte Code ist (leicht abgewandelt) mit dabei, also ersetzen:

Option Explicit
Const Blattname = "BE" ' b.B. anpassen
Private Sub KopieSpeichern()
Dim fn As String, i As Integer
On Error GoTo Fehler
'Dateinamen der Kopie ermitteln
fn = ThisWorkbook.Name
If UCase(Right(fn, 4)) = ".XLS" Then fn = Left(fn, Len(fn) - 4)
fn = ThisWorkbook.Path & "\Kopie-" & fn & "_ohne-BE.xls"
Application.EnableEvents = False
'Blätter in neue Mappe kopieren
ThisWorkbook.Worksheets.Copy
'keine Warnung beim Löschen des Blattes
Application.DisplayAlerts = False
'Blatt "BE" löschen (falls vorhanden)
On Error Resume Next
With ActiveWorkbook.Sheets(Blattname)
.Visible = True
.Delete
End With
On Error GoTo Fehler
'Code löschen
Code_loeschen
'Mappe sichern
With ActiveWorkbook
.SaveAs Filename:=fn
.Close
End With
Fehler:
Application.EnableEvents = True
Application.DisplayAlerts = True
If Err.Number > 0 Then MsgBox Err.Description, vbCritical, "Fehler " & Err.Number
End Sub
Private Sub Code_loeschen()
'Gesamten Code und Module löschen
'von K.Rola
Dim myVBComponents As Object
If ActiveWorkbook.Name = ThisWorkbook.Name Then Exit Sub
'sicherheits-check um nicht sich selbst zu löschen
With ActiveWorkbook.VBProject
For Each myVBComponents In .VBComponents
Select Case myVBComponents.Type
Case 1, 2, 3
.VBComponents.Remove .VBComponents(myVBComponents.Name)
Case 100
With myVBComponents.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End Sub
Private Sub MappeSpeichern(Optional fn)
Dim vis As Long
Dim sh As Worksheet
On Error GoTo Fehler
Set sh = ActiveSheet
Application.ScreenUpdating = False
Application.EnableEvents = False
' ### Status merken: ###
vis = Worksheets(Blattname).Visible
' ### Blatt verstecken: ###
Worksheets(Blattname).Visible = xlSheetVeryHidden
If IsMissing(fn) Then
Application.StatusBar = "Speichert '" & ThisWorkbook.Name & "'..."
ThisWorkbook.Save
Else
Application.StatusBar = "Speichert '" & fn & "'..."
ThisWorkbook.SaveAs fn
End If
KopieSpeichern ' 0 Then MsgBox Err.Description, vbCritical, "Fehler " & Err.Number
Application.StatusBar = False
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim aw
If Not ThisWorkbook.Saved Then
aw = MsgBox("Sollen ihre Änderungen in '" & ThisWorkbook.Name & "' gespeichert werden?",  _
vbYesNoCancel + vbExclamation)
If aw = vbYes Then
MappeSpeichern
ElseIf aw = vbNo Then
ThisWorkbook.Saved = True
Else 'Abbrechen
Cancel = True
End If
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim fn
Cancel = True
If SaveAsUI Then
fn = Application.GetSaveAsFilename(ThisWorkbook.Name, "Excel-Dateien (*.xls), *.xls", , " _
Datei speichern")
If fn = False Then Exit Sub
MappeSpeichern fn
Else
MappeSpeichern
End If
End Sub


Gruß Matthias

Anzeige
AW: Das ist doch klar, ...
03.06.2007 08:30:00
KiaOra
Hi Matthias,
das Makro läuft, wenn ich jedoch auf Speichern klicke, geschieht folgendes:
- der Reiter "BE" wird in der Original-Datei gelöscht !
- es wird keine Kopie erstellt...
Muss ich hier noch etwas anpassen ?
VG u danke Dir,
Micha

AW: Das ist doch klar, ...
03.06.2007 12:43:00
Matthias
Hallo Micha,
also bei mir läuft es.
Bist du sicher, dass das Blatt "BE" im Original gelöscht wird? Die .Visible-Eigenschaft wird auf xlSheetVeryHidden gesetzt, so dass man es über Format, Blatt, Einblenden nicht einblenden kann, sondern nur über VBA: Sheets("BE").visible = True.
Gruß Matthias

Anzeige
AW: Das ist doch klar, ...
03.06.2007 13:05:16
KiaOra
Hi Matthias,
ok, das mit dem Reiter "BE" hab ich verstanden - aber eine Kopie wurde auch bei Änderungen nicht erzeugt (zumindest nicht im gleichen Verzeichnis wie die Originaldatei)...hm, grübl...
VG,
Micha

AW: Das ist doch klar, ...
03.06.2007 13:08:00
Matthias
Hallo Micha,
hast Du den Code genau so übernommen? Wichtig ist der Aufruf von "KopieSpeichern" in der Prozedur "MappeSpeichern" (siehe unten).

Private Sub MappeSpeichern(Optional fn)
Dim vis As Long
Dim sh As Worksheet
On Error GoTo Fehler
Set sh = ActiveSheet
Application.ScreenUpdating = False
Application.EnableEvents = False
' ### Status merken: ###
vis = Worksheets(Blattname).Visible
' ### Blatt verstecken: ###
Worksheets(Blattname).Visible = xlSheetVeryHidden
If IsMissing(fn) Then
Application.StatusBar = "Speichert '" & ThisWorkbook.Name & "'..."
ThisWorkbook.Save
Else
Application.StatusBar = "Speichert '" & fn & "'..."
ThisWorkbook.SaveAs fn
End If
KopieSpeichern ' 0 Then MsgBox Err.Description, vbCritical, "Fehler " & Err.Number
Application.StatusBar = False
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub


Gruß Matthias

AW: Das ist doch klar, ...
03.06.2007 13:28:54
KiaOra
...ja, habs nur mit rechter Maus kopiert u. bei mir unverändert eingefügt... ;-)
VG,
Micha

AW: Das ist doch klar, ...
03.06.2007 13:58:00
KiaOra
Hi Matthias,
...drei Zeilen, die tödlich waren... ;-)
Hatte vor Deinem Code noch das folgende Mini-Sub stehen - das hab ich jetzt rausgenommen u. Dein Code läuft wie geschmiert! Klasse !!!
Weisst Du, wie ich meinen Code da noch irgendwie unterbringe? Wollte damit eigentlich nur sicher stellen, dass beim Schließen der Original-Datei dort der Reiter "BE" autom. ausgeblendet wird...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("BE").Visible = False
End Sub


Bin Dir echt dankbar für Deine Hilfe u. freu mich riesig, dass es so genial läuft - mit dem Mini-Sub wärs absolut perfekt...! ;-)
VG u. machs gut,
Micha

AW: Das ist doch klar, ...
03.06.2007 14:02:44
Matthias
Hallo Micha,
Wollte damit eigentlich nur sicher stellen, dass beim Schließen der Original-Datei dort der Reiter "BE" autom. ausgeblendet wird...
Wird sie doch. Nicht beim Schließen, aber vor dem Speichern, und das ist ja das entscheidende, damit sie nach dem Öffnen erstmal ausgeblendet ist.
Gruß Matthias

AW: Das ist doch klar, ...
03.06.2007 14:08:47
KiaOra
...ja, jetzt hab ichs auch verstanden...sorry! ;-)
Nochmals ganz herzlichen Dank für alles - läuft 1a und war eine riesen Hilfe, ehrlich!
VG u machs gut,
Micha

AW: Fehler bei Auto-Makro
02.06.2007 18:29:41
Matthias
Hallo Micha,
mein Vorschlag:
In DieseArbeitsmappe:

Option Explicit
Const Blattname = "BE" ' b.B. anpassen
Private Sub MappeSpeichern(Optional fn)
Dim vis As Long
Dim sh As Worksheet
On Error GoTo Fehler
Set sh = ActiveSheet
Application.ScreenUpdating = False
Application.EnableEvents = False
' ### Status merken: ###
vis = Worksheets(Blattname).Visible
' ### Blatt verstecken: ###
Worksheets(Blattname).Visible = xlSheetVeryHidden
If IsMissing(fn) Then
Application.StatusBar = "Speichert '" & ThisWorkbook.Name & "'..."
ThisWorkbook.Save
Else
Application.StatusBar = "Speichert '" & fn & "'..."
ThisWorkbook.SaveAs fn
End If
' ### Status wiederherstellen: ###
Worksheets(Blattname).Visible = vis
sh.Activate
ThisWorkbook.Saved = True
Fehler:
If Err.Number > 0 Then MsgBox Err.Description, vbCritical, "Fehler " & Err.Number
Application.StatusBar = False
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim aw
If Not ThisWorkbook.Saved Then
aw = MsgBox("Sollen ihre Änderungen in '" & ThisWorkbook.Name & "' gespeichert werden?",  _
vbYesNoCancel + vbExclamation)
If aw = vbYes Then
MappeSpeichern
ElseIf aw = vbNo Then
ThisWorkbook.Saved = True
Else 'Abbrechen
Cancel = True
End If
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim fn
Cancel = True
If SaveAsUI Then
fn = Application.GetSaveAsFilename(ThisWorkbook.Name, "Excel-Dateien (*.xls), *.xls", , " _
Datei speichern")
If fn = False Then Exit Sub
MappeSpeichern fn
Else
MappeSpeichern
End If
End Sub


Gruß Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige