1.8k Aufrufe
Gefragt in Tabellenkalkulation von johannes94 Mitglied (429 Punkte)
Hallo,
In einem Makro soll eine Datei mit dem Namen der aktuellen Arbeitsmappe und der Erweiterung "_backup.xls", also etwa "Mappe1_backup.xls" geladen werden. Optimal wäre, wenn Ecxel diese Datei dann noch ohne die Erwiterung, also wieder als "Mappe1.xls" ohne Rückfrage speichert und damit die Originaldatei überschreibt.
Die Dateien befinden sich im gleichen Ordner.
Im Internet fand ich keinen Code dazu.
Grüße,
Johannes

8 Antworten

0 Punkte
Beantwortet von
Hallo Johannnes
Backup Datei öffnen:

Sub Backup_auf()
Application.DisplayAlerts = False
Dim FName As String

FName = Left(ActiveWorkbook.Name, _
InStr(ActiveWorkbook.Name, ".")) & _
"backup.xls"
Workbooks.Open Filename:="C:\Dokumente und Einstellungen\Admin\Desktop\" & FName
End Sub

Gruß
fedjo
0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo Johannes....

der Ablauf wie ich ihn verstehe:

Eine <Mappe1> ist geöffnet...

Ein Makro in der Mappe1 öffnet die Datei <Mappe1_Backup>...

Nun soll die <Mappe1> mit der >Mappe1_Backup> überschrieben werden...

Ich fürchte, das das so nicht geht, weil <Mappe1> ja noch geöffnet ist.

Oder hab ich da etwas missverstanden?

Gruß
Kauz
0 Punkte
Beantwortet von johannes94 Mitglied (429 Punkte)
@ kauz,
stimmt, zuerst müsste Mappe1 noch geschlossen werden. Da hast du recht.
@fedjo,
das probiere ich jetzt mal aus.
grüße,
Johannes
0 Punkte
Beantwortet von johannes94 Mitglied (429 Punkte)
Also,
fedjos Makro habe ich etwas verändert, damit es bei mir einwandfrei funktionierte:
Sub Rückgängig()
Application.DisplayAlerts = False
Dim str3 As String
str3 = ActiveWorkbook.Name
Dim str4 As String
str4 = Replace(str3, ".xls", "_")
str3 = str4 & "backup.xls"
Workbooks.Open Filename:="C:\Users\Johannes\Documents\Pläne\" & str3
End Sub

Allerdings öffnet Excel zwar die Mappe1_backup.xls, aber kauz hat das Problem erkannt: Mappe1 muss geschhlossen werden, und die Backupmappe muss in den normalen Namen umbenannt werden und die "alte" Mappe dann überschrieben werden.
Vielen Dank für eure Mühen,
Johannes
0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo Johannes....

Hier ein Codevorschlag:

Einfügen in der Mappe: <Mappe1_Backup.xls>
unter <DieseArbeitsmappe> - <BeforeClose>
Static str3 As String
MsgBox "W" ' Haltepunkt zum debuggen...(Einzelschritt)
' wenn es läuft löschen
Application.DisplayAlerts = False
str3 = ActiveWorkbook.Name
' Wenn die Mappe <Mappe1_Backup.xls> geschlossen wird.... dann!
If str3 = "Mappe1_Backup.xls" Then
Workbooks("Mappe1").Close
ActiveWorkbook.SaveAs ("Mappe1")
End If
Application.DisplayAlerts = True


Viel Erfolg ...

Kauz
0 Punkte
Beantwortet von johannes94 Mitglied (429 Punkte)
Hallo Kauz,

bei mir gibt es keine Option <BeforeClose>. Oder muss ich den Code woanders einfügen?
Außerdem dient das Makro sozusagen einer "Rückgängig"-Funktion für andere Makros.
Die anderen Makros machen nämlich, bevor sie etwas anderes tun, ein Backup, und das Rückgängig Makro lädt soll dann das Backup laden, umbenennen und wie beschrieben speichern.
Grüße,
Johannes
0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo Johannes..
wenn ich es richtig verstehe....

dann soll das Speichern der <Mappe1_Backup> als <Mappe1> kontrolliert geschehen.. also nicht generell.

In Diesem Fall muß dieser Code z.B. einer Schaltfläche zugeordnet werden.

So wie ich es gepostet hab, geschieht dies immer, wenn <Mappe1_Backup> geschlossen wird.

Wenn die Backup-Mappe irgendwann als Mappe1 gespeichert wird, oder die Mappe1 als Backup-Mappe, so haben beide Mappen den gleichen Code.
Ich wollte in der Hauptsache mit dem <If-Teil> darauf hinaus, das wenn durch ein Ereigniss (Button; Mappe-schließen; .. oder Ähnliches) dieses Überspeichern ausgelöst wird, darauf zu achten ist, das es nicht aus der Mappe1 heraus abgearbeitet wird.

Zu BeforeClose:
Im VBA-Editor den Project-Explorer mit dem Menue-Punkt <Ansicht < Project-Explorer> sichtbar machen.

Dort auf <DieseArbeitsmappe> doppelclicken.

Dann im rechten Fenster oben bei <Allgemein> <Workbook> auswählen.

Dann rechts bei <Open> <BeforeClose> auswählen.

Hoffe es hilft...

Gruß
Kauz
0 Punkte
Beantwortet von johannes94 Mitglied (429 Punkte)
Hallo Kauz,
ich werde das alles in Ruhe ausprobieren und sicher eine Lösung finden, danke für die Tipps.
Allerdings habe ich heute keine Zeit mehr dazu,
deswegen kann es mit einer erneuten Rückmeldung noch dauern.
Viele Grüße,
Johannes
...