Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
716to720
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
716to720
716to720
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Abgespeckte Sicherheitskopie via Makro erzeugen...

Abgespeckte Sicherheitskopie via Makro erzeugen...
13.01.2006 12:51:53
Thomas
Hallo!
Ich möchte gerne via Makro eine Sicherheitskopie meiner Excel-Mappe anlegen.
Dabei sollen nur die ersten 4 Tabellenblätter berücksichtigt werden, der Rest kann aus Platzgründen gelöscht werden. Ebenfalls kann (in der Sicherheitskopie) das Makro welches die Sicherheitskopie veranlasste gelöscht werden, andere sollen erhalten bleiben.
Die Sicherheitskopie soll den Namen der Mappe inkl dem Wort Sicherheitskopie tragen und im selben Pfad abgelegt werden in der sich die Originalmappe befindet, allerdings in einem eigens dafür angelegten Ordner("Sicherheitskopien").
Eine MessageBox soll nun den Anwender zeigen wo diese Kopie gesichert wurde.
Die Originalmappe soll dabei nicht geschlossen werden.
Über eine Lösung würde ich mich freuen.
Vielen Dank!
Gruß
Thomas

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
13.01.2006 14:11:45
Heiko
Hallo Thomas,
das könnte in etwa so aussehen:

Sub Sicherheitskopie()
Dim wks1 As Worksheet
Dim strPfad As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
strPfad = ThisWorkbook.Path & "\Sicherheitskopie\" & _
Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & "Sicherheitskopie.xls"
ThisWorkbook.SaveCopyAs strPfad
Workbooks.Open strPfad
' *** WICHTIG ***  Hier die vier Namen der Blätter anpassen die nicht gelöscht werden sollen !
For Each wks1 In ActiveWorkbook.Worksheets
If wks1.Name <> "Tabelle1" And wks1.Name <> "Tabelle2" And wks1.Name <> "Tabelle3" And _
wks1.Name <> "Tabelle4" Then wks1.Delete
Next wks1
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents("Modul1")
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Die Sicherheitskopie wurde in " & vbCr & vbCr & strPfad & " abgelegt !", _
vbInformation, " Sicherheitskopie"
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
16.01.2006 08:50:59
Thomas
Hallo Heiko,
sorry für die späte Rückmeldung bin jetzt erst wieder dazu gekommen mich damit zu beschäftigen.
Habe deine Lösung versucht zu implementieren. Leider funktioniert es aus irgend einem Grund nicht. Die If-Passage ist komplett rot, wenn ich das Makro starten will kommet sie Meldung: "Fehler beim kompilieren: Syntaxfehler".
Was kann das sein?
Grüße
Thomas
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
16.01.2006 09:16:34
Heiko
Moin Thomas,
zeig mal deinen Code den du nun hast, oder hast du die Tabellenblatt-Namen noch garnicht angepasst.
Gruß Heiko
PS: Rückmeldung wäre nett !
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
16.01.2006 09:26:13
Thomas
Hallo Heiko,
Der Code ist nicht viel anders, bis eben auf die Tabellenblattnamen.
Danke für die Blitzrückmeldung.
Gruß
Thomas

Sub Sicherheitskopie()
Dim wks1 As Worksheet
Dim strPfad As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
strPfad = ThisWorkbook.Path & "\Sicherheitskopie\" & _
Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) &
"Sicherheitskopie.xls"
ThisWorkbook.SaveCopyAs strPfad
Workbooks.Open strPfad
' *** WICHTIG ***  Hier die vier Namen der Blätter anpassen die nicht
gelöscht werden sollen !
For Each wks1 In ActiveWorkbook.Worksheets
If wks1.Name <> "DRG02" And wks1.Name <> "DRG03" And wks1.Name <>
"ACTUAL_DRG02" And _
wks1.Name <> "ACTUAL_DRG03" Then wks1.Delete
Next wks1
ActiveWorkbook.VBProject.VBComponents.Remove
ActiveWorkbook.VBProject.VBComponents("Modul1")
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Die Sicherheitskopie wurde in " & vbCr & vbCr & strPfad & " abgelegt
!", _
vbInformation, " Sicherheitskopie"
End Sub

Anzeige
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
16.01.2006 09:34:32
Heiko
Hallo Thomas,
da hast du ein Probem mit den zeilenumbrüchen im VBA Editor:
Versuche es mal so, ohne Zeilenumbrüche.

Sub Sicherheitskopie()
Dim wks1 As Worksheet
Dim strPfad As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
strPfad = ThisWorkbook.Path & "\Sicherheitskopie\" & Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & "Sicherheitskopie.xls"
ThisWorkbook.SaveCopyAs strPfad
Workbooks.Open strPfad
' *** WICHTIG ***  Hier die vier Namen der Blätter anpassen die nicht gelöscht werden sollen !
For Each wks1 In ActiveWorkbook.Worksheets
If wks1.Name <> "DRG02" And wks1.Name <> "DRG03" And wks1.Name <> "ACTUAL_DRG02" And wks1.Name <> "ACTUAL_DRG03" Then wks1.Delete
Next wks1
ActiveWorkbook.VBProject.VBComponents.Remove
ActiveWorkbook.VBProject.VBComponents ("Modul1")
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Die Sicherheitskopie wurde in " & vbCr & vbCr & strPfad & " abgelegt !", vbInformation, " Sicherheitskopie"
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
16.01.2006 09:31:33
Thomas
...habe einen Fehler gerade selbst bemerkt. Die Next-Anweisung stand bei mir nicht separat. Sorry dummer Fehler.
Jetzt kommt allerdings die Fehlermeldung auf die Datei kann nicht zugegriffen werden und die Zeile - This Workbook.SaveCopyAs strPfad - ist markiert!?
Gruß
Thomas
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
16.01.2006 09:37:07
Heiko
Hallo Thomas,
hast du denn deine eigenen Vorgaben auch erfüllt ?!
Zitat:
"Die Sicherheitskopie soll den Namen der Mappe inkl dem Wort Sicherheitskopie tragen und im selben Pfad abgelegt werden in der sich die Originalmappe befindet, allerdings in einem eigens dafür angelegten Ordner("Sicherheitskopien")."
Also gibt es den Unterordner "Sicherheitskopie" in dem Ordner in dem die Datei steht ?!
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
Ordner "Sicherheitskopien"
16.01.2006 09:42:55
Heiko
Hallo Thomas,
meinte natürlich den Ordner "Sicherheitskopien" und darum meine Programmzeile bitte so anpassen.
strPfad = ThisWorkbook.Path & "\Sicherheitskopien\" & _
Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & "Sicherheitskopie.xls"
Gruß Heiko
PS: Rückmeldung wäre nett !
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
16.01.2006 09:58:58
Thomas
Hallo Heiko,
habe auch nochmal alles nochmal überprüft. Der Fehler lag tatsächlich lediglich an der Schreibweise. Dieses Problem wäre behoben.
Jetzt meckert er nur noch bei den VBA-Modulen. Hier heißt es in der Zeile: >ActiveWorkbook.VBProject.VBComponents.Remove Muss ich in der nächsten Zeile in der du ("Modul1") reingeschrieben hast evtl. auch was anpassen? Insgesamt sind in der Mappe 13 Module vorhanden welchen ich allen Namen gegeben habe, eins evtl. auch zwei davon können bei der Sicherehitskopie abgeängt werden.
Nehme an Modul1 soll das sein was abgehängt werden sollte, habe mal "Modul1" mit dem tatsächlichen Namen getauscht, hat aber auch nichts genützt.
Gruß
Thomas
Anzeige
AW: Abgespeckte Sicherheitskopie via Makro erzeugen...
16.01.2006 10:17:24
Heiko
Hallo Thomas,
versuche mal diese Version, damit wird alles was VBA ist gelöscht:

Sub Sicherheitskopie()
Dim wks1 As Worksheet
Dim strPfad As String
Dim vbc As Object
Application.ScreenUpdating = False
Application.DisplayAlerts = False
strPfad = ThisWorkbook.Path & "\Sicherheitskopien\" & Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & "Sicherheitskopie.xls"
ThisWorkbook.SaveCopyAs strPfad
Workbooks.Open strPfad
' *** WICHTIG ***  Hier die vier Namen der Blätter anpassen die nicht gelöscht werden sollen !
For Each wks1 In ActiveWorkbook.Worksheets
If wks1.Name <> "Tabelle1" And wks1.Name <> "Tabelle2" And wks1.Name <> "Tabelle3" And wks1.Name <> "Tabelle4" Then wks1.Delete
Next wks1
With ActiveWorkbook.VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
Case 1, 2, 3
.VBComponents.Remove .VBComponents(vbc.Name)
Case 100
With .VBComponents(vbc.Name).CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
MsgBox "Unbekannter VBA Type !", vbCritical
End Select
Next vbc
End With
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Die Sicherheitskopie wurde in " & vbCr & vbCr & strPfad & " abgelegt !", _
vbInformation, " Sicherheitskopie"
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
Fehler erkannt !!!
16.01.2006 10:22:40
Heiko
Hallo Thomas,
ActiveWorkbook.VBProject.VBComponents.Remove
ActiveWorkbook.VBProject.VBComponents ("Modul1")
muss in eine Zeile:
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents ("Modul1")
Und dann Modul1 anpassen an das was du löschen willst. Wenn es mehrere Module sind dann halt die Zeile mit den anderen Namen wiederholen.
Wenn du alles (VBA) löschen willst siehe meine 2. Antwort.
Gruß Heiko
PS: Rückmeldung wäre nett !
AW: Fehler erkannt !!!
16.01.2006 10:33:56
Thomas
Hallo Heiko,
hab ich jetzt entsprechend angepasst, stoppt jedoch wieder in der Zeile:
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents _("Uploader")
Folgende Fehlermeldung erscheint:
Laufzeitfehler '1004': Der programmatische Zugriff auf das Visual Basic-Project ist nicht sicher
Gruß
Thomas
Anzeige
AW: Fehler erkannt !!!
16.01.2006 10:37:35
Heiko
Hallo THomas,
EXTRAS - MAKRO - SICHERHEIT - Reiter "Vertraueswürdige Quellen" - "Zugriff auf Visual Basic ... " aktivieren, Fertig.
Gruß Heiko
PS: Rückmeldung wäre nett !
AW: Fehler erkannt !!!
16.01.2006 11:23:34
Thomas
Hallo Heiko,
funktioniert!!!
Da gibts aber noch die Sache mit den Tabellenblättern. Diese sollen individuell benannt werden können. Gibt es daher eine Möglichkeit statt den Tabellennamen im Code die Tabellenblattnummer anzugeben? Tabelle1, "Tabelle1", (Tabelle1) oder Sheets(1) funktioniert alles leider nicht.
Kennst du einen anderen Weg?
Gruß
Thomas
AW: Fehler erkannt !!!
16.01.2006 11:33:23
Heiko
Hallo Thomas,
da gibt es bestimmt was, aber da ich nicht weis wie und wann deine Blätter erstellt und umbenannt werden kann ich da nicht weiterhelfen.
Stichworte dazu sind:
Codename des Blattes, der ändert sich nicht bei Änderung des Tabellennames.
Sheets(1) ... Sheets(4), wären die ersten vier Sheets in der Mappe.
Einmalige / besondere Einträge in den vier Tabellen die man zur Prüfung heranziehen könnte.
Ein Auswahlfenster in dem man auswählen kann was nicht gelöscht werden soll.
.
.
.
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Fehler erkannt !!!
16.01.2006 12:21:37
Thomas
Hallo Heiko,
was kann man denn statt >wks1.name Vielen Dank für deine Hilfe!
Gruß
Thomas
AW: Fehler erkannt !!!
16.01.2006 12:29:05
Thomas
Hallo Heiko,
was kann man denn statt >wks1.name Vielen Dank für deine Hilfe!
Gruß
Thomas
AW: Fehler erkannt !!!
16.01.2006 12:38:11
Heiko
Hallo Thomas,
wo ist denn nun genau das Problem ?
Du hast eine Mappe in der eine Anzahl von Tabellen vorhanden ist in der bis auf vier Tabellen alle gelöscht werden sollen !
Wie und woran erkennt man das eine Tabelle zu diesen vier gehört:
z.B. am Tabellenblattnamen, das geht ja wohl nicht weil, wie du sagst, dieser Name veränderbar sein soll.
Also wie stellst du dir vor, soll ein VBA Code erkennen welche vier er überlassen soll, wenn du keine eindeutigen Kennzeichen hast.
Eindeutige Kennzeichen wären halt:
Blattname
Codename
Eindeutige Einträge irgendwo in der Tabelle.
Position der Tabelle in der Sheetsauflistung
usw. usw. usw.
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Fehler erkannt !!!
16.01.2006 12:51:56
Thomas
Hallo Heiko,
die Tabellenblätter die erhalten bleiben sollen sind Tabelle101, Tabelle102, Tabelle201 und Tabelle202.
Es dreht sich immer um diese Tabellenblätter egal welchen Namen sie haben.
Wenn ich aber statt
If wks1.Name "DRG02" And wks1.Name ...
If wks1.Name Sheets(101) And wks1.Name ...
oder
If wks1 Sheets(101) And wks1 ...
oder
If wks1.Name Tabelle101 And wks1.Name ...
usw.
eingebe klappt es leider nicht.
Gruß
Thomas
Dann so
16.01.2006 12:58:35
Heiko
Hallo Thomas,
versuche es mal so, wenn es nicht hilft bitte mal genauer beschreiben wo du Tabelle101 ... ausgelesen hast.
If wks1.CodeName "Tabelle101" And wks1.CodeName ...
usw.
Gruß Heiko
PS: Rückmeldung wäre nett !
AW: Dann so
16.01.2006 13:12:48
Thomas
Hallo Heiko,
klappt nun alles bestens.
Vielen vielen Dank!!!
Gruß Thomas

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige