Frage nach "Kopie erstellen?"

Bild

Betrifft: Frage nach "Kopie erstellen?"
von: paula
Geschrieben am: 08.04.2005 22:08:53
Hallo Excel-Gemeinschaft
Wie könnte ich veranlassen, daß Excel bei jeder Arbeitsmappe,die geschlossen wird, zuerst fragt, ob von der zu schließenden Arbeitsmappe eine Kopie erstellt werden soll? Genauer gesagt, wo soll das Makro hin? In der Arbeitsmappe selbst soll es nicht hin
Ich vermute doch in der Persönl.xls,wo ich es schon versucht habe, ich Snob.
Das Makro könnte ich selbst schreiben,nur wohin damit!
Über eine Idee würde mich im Voraus sehr freuen
Paula

Bild

Betrifft: AW: Frage nach "Kopie erstellen?"
von: K.Rola
Geschrieben am: 08.04.2005 22:15:07
Hallo,
wenn du das in der PERSONL.XLS haben willst, brauchst du ein Klassenmodul, das Ereignisse
auf Application-Ebene verarbeiten kann.
Das Ereignis wäre dann:
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
Gruß K.Rola
Bild

Betrifft: AW: Frage nach "Kopie erstellen?"
von: paula
Geschrieben am: 08.04.2005 22:23:02
Hallo K.Rola
Bist klasse, du. Denke, ab jetzt komme ich selbst weiter
Danke Danke
Paula
Bild

Betrifft: AW: Frage nach "Kopie erstellen?"
von: paula
Geschrieben am: 08.04.2005 23:20:53
Hallo K.Rola
Von wegen,ab jetzt komme ich selbst weiter...
Es klappt nicht, muß ich noch etwas beachten?
Mein Makro:
Sub WB_Close()
Dim WB_Name As String
Dim Kopie_Pfad As String
'
Kopie_Pfad = "J:\Eigene Dateien (Backup)\Excel\Kopien\"
WB_Name = Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1)
'ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:=WB_Name & "_Kopie"
End Sub
Mein Klassenmodul:

Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
Call WB_Close
End Sub

Bitte hilf mir weiter
Paula
Bild

Betrifft: AW: K.Rola, bitte melden, es klappt irgendwas nich
von: paula
Geschrieben am: 08.04.2005 23:28:15
Hallo K.Rola
Von wegen,ab jetzt komme ich selbst weiter...
Es klappt nicht, muß ich noch etwas beachten?
Mein Makro:
Sub WB_Close()
Dim WB_Name As String
Dim Kopie_Pfad As String
'
Kopie_Pfad = "J:\Eigene Dateien (Backup)\Excel\Kopien\"
WB_Name = Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1)
'ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:=WB_Name & "_Kopie"
End Sub
Mein Klassenmodul:


Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
Call WB_Close
End Sub


Bitte hilf mir weiter
Paula
Bild

Betrifft: Hast du mal auf die Uhr geschaut ... ;-)
von: Ramses
Geschrieben am: 08.04.2005 23:38:06
Hallo
... Die Antworter im Forum werden nicht bezahlt und sind freiwillig hier.
Von warten hat niemand was gesagt ;-)
Zudem wäre schon noch interessant zu wissen, was nicht klappt.
Die Glaskugel wird ab 18:00 Uhr abgestellt ;-)

Sub WB_Close()
Dim WB_Name As String
Dim Kopie_Pfad As String
Kopie_Pfad = "J:\Eigene Dateien (Backup)\Excel\Kopien\"
activeworkbook.SaveCopyAs kopie_pfad & thisworkbook.Name & "_Kopie.xls"
End Sub


Gruss Rainer
Bild

Betrifft: AW: Hast du mal auf die Uhr geschaut ... ;-)
von: paula
Geschrieben am: 08.04.2005 23:46:08
hallo rainer
Weiß, es sit nicht selbstverständlich, daß jetzt noch einer antwortet
Bab bitte Nachsicht mit mir, sonst werd ich heute nicht schlafen.
Zur Glaskugel hast Recht, deshalb nochmal dsa Prob
Excel soll fragen, wenn da eine Arbeitsmappe geschlossen wird,ob eine gesonderte Kopie
erstellt werden soll.
K.Rola sagte, ein Klassenmodul müsste her. Hab ich gemacht, doch Excel merkt nicht,daß eine Arbeitsmappe geschlossen wird
Mein Makro:
Sub WB_Close()
Dim WB_Name As String
Dim Kopie_Pfad As String
'
Kopie_Pfad = "J:\Eigene Dateien (Backup)\Excel\Kopien\"
WB_Name = Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1)
'ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:=WB_Name & "_Kopie"
End Sub
Mein Klassenmodul:


Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
Call WB_Close
End Sub


Danke für deine Hilfe im voraus
Bild

Betrifft: Da musst du wohl noch ein wenig warten...
von: Ramses
Geschrieben am: 09.04.2005 00:11:59
Hallo
Klassenmodule sind nicht unbedingt meine Spezialität,... aber es fällt mir schwer zu glauben, dass ein Klassenmodul das öffnen und schliessen von anderen Mappen überwachen kann.
... aber mit VBA ist fast nichts unmöglich :-)
Vielleicht hat K.Rola noch ein oder zwei diskrete Codezeilen :-)
Gruss Rainer
Bild

Betrifft: AW: Dann werd ich mal warten...Dank dir totzdem oT
von: paula
Geschrieben am: 09.04.2005 00:21:36
Dank dir
Gruss Paula
Bild

Betrifft: AW: Dann werd ich mal warten...Dank dir totzdem oT
von: Nepumuk
Geschrieben am: 09.04.2005 05:51:23
Hallo Paula,
eine Mustermappe: https://www.herber.de/bbs/user/20905.xls
Beachte den Code im Modul "DieseArbeitsmappe". Dort wird der Verweis auf die Klasse gesetzt.
Gruß
Nepumuk
Bild

Betrifft: AW: Dann werd ich mal warten...Dank dir totzdem oT
von: Ramses
Geschrieben am: 09.04.2005 07:50:31
Hallo Nepumuk
Das Klassenmodul hatte ich auch soweit, aber das "initialisieren" der Klasse verstehe ich irgendwie nicht.
Schritt 1:
Option Explicit

Private Sub Workbook_Open()
    Set myXL_Application.myApplication = Application
End Sub

Schritt 2:
Public myXL_Application As New clsApp

Schritt 3:
Option Explicit
Public WithEvents myApplication As Excel.Application

Private Sub myApplication_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)....
Könntest du bitte mal versuchen, mir die verschiedenen Schritte zu erklären, ...speziell Schritt 1, warum das hier nötig ist. Irgendwie krieg ich das nicht auf die Reihe.
Gruss Rainer

Bild

Betrifft: AW: Dann werd ich mal warten...Dank dir totzdem oT
von: Nepumuk
Geschrieben am: 09.04.2005 11:57:39
Hi Rainer,
du machst in Gedanken der zweiten vor dem ersten Schritt. Wenn nach dem aktivieren der Makros der Interpreter die Module durchläuft, wird die Variable "myXL_Application" angelegt. Erst dann wird das Open - Ereignis ausgeführt. Alle nicht in Prozeduren gekapselten Variablen, sind in dem Moment schon angelegt. Das ist wie in einer "normalen" Sub. Egal wo ich die DIM - Anweisung hinschreibe, die Variablen werden angelegt, bevor die erste Codezeile ausgeführt wird. Es gibt also keine bedingte Dimensionierung. Darum sind solche Konstrukte völlig unsinnig, da die Variable a auf alle Fälle angelegt wird, auch wenn A1 nicht leer ist.


Public Sub test1()
    If Cells(1, 1).Value = "" Then
        Dim As Integer
        a = 1
    End If
End Sub


Starte das Makro mal mit F8 und schau in das Lokalfenster. Die Variable a wird angelegt, wenn das Makro aufgerufen wird (Die Zeile Public Sub test1() ist gelb unterlegt)
Der Interpreter meckert nur, wenn eine Variable schon angesprochen wird, bevor sie dimensioniert wurde, da er das Makro Zeile für Zeile von oben nach unten in den Maschinencode übersetzt. Also, das:


Public Sub test2()
    a = 1
    Dim As Integer
End Sub


geht nicht.
Gruß
Nepumuk
Bild

Betrifft: AW: Dann werd ich mal warten...Dank dir totzdem oT
von: Ramses
Geschrieben am: 09.04.2005 12:34:25
Hallo Nepumuk
DAS ist mir schon klar,... wo ich nicht durchsteige sind die beiden Anweisungen
Set myXL_Application.myApplication = Application
und
Public WithEvents myApplication As Excel.Application
Wieso muss zweimal eine Zuweisung auf Application und EXCEL.Application gemacht werden ?

Das glaube ich verstanden zu haben
Public myXL_Application As New clsApp
Weist EXCEL bei allen Aufrufen die "myXL_Application" betreffen auf das Klassenmodul "clsAPP" zu verweisen und dort das jeweilige Ereignis zu suchen.
Gruss Rainer
Bild

Betrifft: AW: Dann werd ich mal warten...Dank dir totzdem oT
von: Nepumuk
Geschrieben am: 09.04.2005 12:53:19
Hi Rainer,
mit
Public WithEvents myApplication As Excel.Application
legst du nur eine leere Objektvariable an. In der Set - Anweisung verweist du dann das Application - Objekt das diese Variable.
Jetzt klarer?
Gruß
Nepumuk
Bild

Betrifft: Merci,... eigentlich klar :-) o.T.
von: Ramses
Geschrieben am: 09.04.2005 13:22:57
...
Bild

Betrifft: AW: Hab nicht gewartet, ich war fleißig ;-)
von: paula
Geschrieben am: 09.04.2005 13:32:56
Hallo Rainer,hallo Neptumuk,
Vielen vielen Dank für euer Geistiges.Genau das hatte ich nicht verstanden.
Hab nicht geschlafen, sondern überall nach Hinweisen auf Klassenmodulen gesucht, wo ich konnte.Heute Morgen um 6:Uhr hatte ich dann eine fertige Datei als Addin gebastelt.Hab bis jetzt geschlafen, kein Wunder.Deshalb melde ich mich erst jetzt.
Dieses Addin überwacht jegliches Schließen von Dateien mit .xls-Endung, AUSSCHLIESSLICH der Personl.xls (Beim Schließen von Excel wird diese auch geschlossen, soll aber aus der Überprüfung ausgeschlossen werden).Eure Denkansätze haben mich in meiner Arbeit bestärkt.
So konnten wir alle heute etwas lernen. Danke vielmals für euer Hilfe
Wenn ihr sehen möchtet, wie sie geworden ist, seht mal hier nach
https://www.herber.de/bbs/user/20908.xla
 Bild

Beiträge aus den Excel-Beispielen zum Thema "feld nur bis zu einem bestimmten wert auslesen?"