Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1708to1712
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
Inhaltsverzeichnis

Sicherungskopie II Frage an Kalr-Heinz

Sicherungskopie II Frage an Kalr-Heinz
18.08.2019 18:38:22
Stephan
Hallo Karl-Heinz,
das Makro läuft super. Zwei Dinge, die mir noch aufgefallen sind:
Ich habe in meiner Datei beim öffnen einen Makro, der fragt, ob die Makros aktiviert sind. Diese Abfrage kommt auch in der Sicherungskopie, da es ja kein Modul ist. Kann man das umgehen? Wenn ich die Sicherung öffne, ist das ganze Tabellenblatt ausgewählt. Ich löse das immer, in dem ich eine Zelle A2 oder so anspreche. Vielleicht gibt es noch einen eleganteren Weg. Unten der tolle Makro.
Grüße
Stephan
Sub Erstelle_Sicherungskopie()
'Sicherungskopie anlegen
Dim WkB As Workbook, WSh As Worksheet, DateiPfad As String, VBComp As Object
'Datei unter anderem Namen kopieren
DateiPfad = ThisWorkbook.Path & "\" & "Dateiname" & Format(Now, "YY.MM.DD_HH-MM-SS") & "Backup. _
xlsm"
ThisWorkbook.SaveCopyAs Filename:=DateiPfad
Workbooks.Open Filename:=DateiPfad
Set WkB = ActiveWorkbook
'Zu löschende Blätter hier kommagetrennt auflisten
WegBlatt = "ISP,Mehrfach"
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
End With
For Each WSh In WkB.Worksheets
If InStr("," & WegBlatt & ",", "," & WSh.Name & ",") > 0 Then
WSh.Delete                                  'Blatt löschen
Else
WSh.Cells.Copy
WSh.Cells.PasteSpecial Paste:=xlPasteValues 'Formeln entfernen
End If
Next WSh
'Jetzt die Module weg
For Each VBComp In WkB.VBProject.VBComponents
If VBComp.Type = 1 Then
With VBComp.CodeModule
.DeleteLines StartLine:=1, Count:=.CountOfLines      'code entfernen
End With
End If
Next VBComp
WkB.Save
WkB.Close
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.EnableEvents = True
End With
MsgBox "Bin fertig!", vbOKOnly Or vbInformation, "Sicherungskopie anlegen"
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sicherungskopie II Frage an Kalr-Heinz
18.08.2019 19:53:48
onur
"Ich habe in meiner Datei beim öffnen einen Makro, der fragt, ob die Makros aktiviert sind" - WOZU?
Wenn die Makros NICHT aktiviert wären, könnte das Makro doch nicht laufen und die Frage stellen - oder?
...
For Each WSh In WkB.Worksheets
If InStr("," & WegBlatt & ",", "," & WSh.Name & ",") > 0 Then
WSh.Delete                                  'Blatt löschen
Else
WSh.Cells.Copy
WSh.Cells.PasteSpecial Paste:=xlPasteValues 'Formeln entfernen
End If
WSh.Range("A1").Select
Next WSh
....

AW: Sicherungskopie II Frage an Kalr-Heinz
18.08.2019 20:13:12
volti
Hallo Stephan,
schau mal, ob es damit besser ist:
Sub Erstelle_Sicherungskopie()
'Sicherungskopie anlegen
 Dim WkB As Workbook, WSh As Worksheet, DateiPfad As String, VBComp As Object
'Datei unter anderem Namen kopieren
 DateiPfad = ThisWorkbook.Path & "\" & "Dateiname" & Format(Now, "YY.MM.DD_HH-MM-SS") & "Backup.xlsb"
 ThisWorkbook.SaveCopyAs Filename:=DateiPfad
 Workbooks.Open Filename:=DateiPfad
 Set WkB = ActiveWorkbook
'Zu löschende Blätter hier kommagetrennt auflisten
 WegBlatt = "ISP,Mehrfach"
 
 With Application
  .ScreenUpdating = False
  .DisplayAlerts = False
  .EnableEvents = False
 End With
 For Each WSh In WkB.Worksheets
  If InStr("," & WegBlatt & ",", "," & WSh.Name & ",") > 0 Then
     WSh.Delete                                  'Blatt löschen
  Else
     WSh.Cells.Copy
     WSh.Cells.PasteSpecial Paste:=xlPasteValues 'Formeln entfernen
     WSh.Activate
     WSh.Range("$A$1").Select
  End If
 Next WSh
 
 
'Jetzt die Module weg
 For Each VBComp In WkB.VBProject.VBComponents
     If VBComp.Type = 1 Then
Rem       With VBComp.CodeModule
Rem         .DeleteLines StartLine:=1, Count:=.CountOfLines     'Nur code entfernen
Rem       End With
       With WkB.VBProject
          .VBComponents.Remove .VBComponents(VBComp.Name)       'Ganzes Modul entfernen
       End With
     End If
 Next VBComp
 
 WkB.Save
 WkB.Close
 With Application
  .ScreenUpdating = True
  .DisplayAlerts = True
  .EnableEvents = True
 End With
 MsgBox "Bin fertig!", vbOKOnly Or vbInformation, "Sicherungskopie anlegen"
End Sub

viele Grüße
Karl-Heinz
Anzeige
AW: Sicherungskopie II Frage an Kalr-Heinz
18.08.2019 21:34:49
Luschi
Hallo Karl-Heinz,
mit ThisWorkbook.SaveCopyAs kann man aus einer xlsm-Datei keine xlsb-Datei machen.
Zwar wird die Sicherungskopie erstell mit dem geänderten Dateityp, aber eben nur dem Namen nach aber nicht dem Exceltyp entsprechend; man kann nämlich diese neue Datei nicht mit Excel öffnen, es kommt folgende Fehlermeldung:
Userbild
Ich würde die Sicherungskopie einfach als xlsx-Datei speichern, da fliegen die ganzen Vba-Sachen sowieso von alleine raus und eventuelle Objekte (Buttons usw.) auf den Tabellenblättern kann man immer noch entfernen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Sicherungskopie II Frage an Kalr-Heinz
19.08.2019 09:38:54
volti
Hallo Luschi,
vielen Dank für Deine Ausführungen.
Diese sind mir bekannt.
Einmal arbeite ich selbst fast nur noch mit xlsb, und auch Stephan hatte in seinem letzten Post von xlsb geschrieben, aber offensichtlich hier das alte, erste Makro mit xlsm gepostet.
Zum zweiten war es m.E. nicht die Anforderung, eine andere Version zu nehmen. (xlsx)
Aber wenn er möchte, kann er ja Deinem Vorschlag folgen und die Kopie als makrolose xlsx speichern...
Dann entfiele der Part 'Jetzt die Module weg und der Copy-Befehl müsste entsprechend verändert werden.
Allerdings kann dann wohl nicht mehr mit der o.a. SaveCopyAs-Funktion gearbeitet werden, die m.W. keine Formatumwandlung bietet und damit wieder Dein o.a. beschriebenes Problem auftritt.
viele Grüße
Karl-Heinz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige