Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: xlsm per Makro als xls abspeichern und dabei alle Makros entfernen

xlsm per Makro als xls abspeichern und dabei alle Makros entfernen
17.12.2019 10:48:38
Tobias
Hallo,
ich suche eine Möglichkeit, mittels eines Makros folgenden Speichervorgang auszulösen:
· es wird der Speicherort abgefragt und ein Pfad bereits vorgelegt: "D:\Projekte"
· der Dateiname wird aus Zelle A2 des aktiven Tabellenblatts und dem Namen des Tabellenblatts erzeugt – in etwa: .Range("A2").Value & "_" & ActiveSheet.Name & ".xls"
· alle vorhandenen Makros (insgesamt 7 Stück) werden gelöscht
· die Datei wird als xls abgespeichert
Rumprobiert habe ich schon mit Abspeichern als xls (in der Hoffnung, dass dann die Makros automatisch verschwinden), dann kommt beim Öffnen aber die Fehlermeldung, dass Dateiformat und Dateierweiterung nicht zusammenpassen und die Makros sind auch noch da.
Danke und Grüße,
Tobias
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: xlsm per Makro als xls abspeichern und dabei alle Makros entfernen
17.12.2019 10:51:38
Hajo_Zi
Halo Tobias,
benutze den Makrorecorder.

AW: xlsm per Makro als xls abspeichern und dabei alle Makros entfernen
17.12.2019 11:01:27
peterk
Hallo
Mit diesem kleine Makro speicherst Du Deine Datei als Kopie in XLS (Makros werde automatisch entfernt)

Option Explicit
Sub Sa()
ActiveWorkbook.Sheets.Copy  ' ein neues Workbook wird erzeugt und ist sofort aktiv
ActiveWorkbook.SaveAs Filename:="C:\Users\...\SaveCopyAs.xlsx", FileFormat:=51
ActiveWorkbook.Close
End Sub

Anzeige
DAS ist...
17.12.2019 11:12:15
Oberschlumpf
Hi,
...natürlich noch einfacher!
Aber....die Kopie als xlsX speichern, NICHT als XLS!
Ciao
Thorsten
AW: DAS ist...
17.12.2019 12:02:27
Oberschlumpf
Hi,
ich bezog meinen Hinweis auf deinen Text nach dem Hallo:
Mit diesem kleine Makro speicherst Du Deine Datei als Kopie in XLS (Makros werde automatisch entfernt)
Wenn im 1. Speichervorgang als xls gespeichert wird, bleiben die Makros erhalten.
in deinem Code-Bsp steht zwar xlsx, aber eben in deinem Erklär-Text steht nur XLS.
Nur darauf hatte ich hingewiesen
So ein Erklär-Wirrwar muss nicht unbedingt hilfreich sein.
Anzeige
AW: DAS ist...
18.12.2019 10:25:32
Tobias
Hallo,
erstmal 1000 x sorry, das mit xls und xlsx war unüberlegt von mir, ich meinte nur xlsx ... Hauptsache, die Makros sind weg :-/
Vermutlich habe ich für diesen Thread jetzt eh zu lange gebraucht ... aber anhand meines bisherigen Makros und den vorgeschlagenen Ansätzen, habe ich jetzt das hier zusammengebastelt – von der Struktur her:
die Schritte um Makro:
Schritt 1) die xlsm-Datei wird zuerst gespeichert (etwaige manuelle Änderungen vor dem Ausführen des Makros also gesichert)
Schritt 2) ... (diverse Befehel zum Löschen von Tabellenblättern, formatieren von Tabellen, etc.)

Schritt 3)
es wird eine Kopie der Datei erstellt
Schritt 4) für diese Kopie wird eine Aufforderung zum Speichern als xlsx-Datei generiert. Es wird dabei bereits ein Pfad vorgeschlagen und der Dateiname wird automatisch erzeugt
Schritt 5) die so abgespeicherte xlsx-Datei bleibt offen. Die xlsm-Datei wird geschlossen und zwar mit dem zu Beginn des Makros gesicherten Standes, eine Warnung zum Abspeichern der Änderungen müsste also unterdrückt werden
die Makro-Elemente dafür, soweit ich sie zusammenhabe:
Schritt 1)

ActiveWorkbook.Save
Schritt 2) [...] diverse Befehel zum Löschen von Tabellenblättern, formatieren von Tabellen, etc.
Schritt 3)
ActiveWorkbook.Sheets.Copy
Schritt 4)
Dim Ordner
Dim strPath As String
Dim FN As String
Dim fDialog
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
With fDialog
.Title = "Bitte das entsprechende Unterverzeichnis auswählen!"
.InitialFileName = "D:\Projekte\Auswertungen"
If .Show = -1 Then
For Each Ordner In .SelectedItems
strPath = Ordner
Next
Else
Exit Sub
End If
End With
With ActiveSheet
FN = .Range("A2").Value & "_Änderungen.xlsx"
End With
If Right(strPath, 1) "\" Then strPath = strPath & "\"
ActiveWorkbook.SaveAs Filename:=strPath & FN
Schritt 5)
ThisWorkbook.Close savechanges:=False
Es funktioniert nun alles, bis auf Schritt 4), die automatische Namenserzeugung. Hier soll eigentlich der Name des (übriggebliebenen - alle anderen werden gelöscht) Tabellenblattes integriert werden. Der Name besteht dann aus Inhalt der Zelle A2, Unterstrich und dem Namen des Tabellenblatts/-reiters: [Inhalt Zelle A2]_[Name Tabellenblatt].xlsx
Ich habe an der Zeile
FN = .Range("A2").Value & "_Änderungen.xlsx"
mit ActiveSheet.Name herumprobiert aber es funktioniert nicht ...
Falls hier noch jemand eine Idee hat, wäre das super!
Danke,
Tobias
Anzeige
AW: DAS ist...
18.12.2019 10:49:04
Werni
Hallo Tobias
Warum Tabellen löschen und anschliessend Copy?
Du kannst die Blätter die du brauchst selektieren und anschliessend Verschieben\kopieren
Bsp:
Sheets(Array("Tabelle1", "Tabelle3", "Tabelle5", "Tabelle7")).Copy

Damit bleibt die *.xlsm bestehen.
Für deine weiter Frage hab ich bisher noch keine Antwort.
Gruss Werni
Anzeige
AW: DAS ist...
18.12.2019 10:55:51
Tobias
Hallo,
habe es hinbekommen:
FN = .Range("A2").Value & "_" & ActiveSheet.Name & ".xlsx"
Danke an alle nochmal!
Tobiads
AW: xlsm per Makro als xls abspeichern und dabei alle Makros entfernen
17.12.2019 11:03:01
Werni
Hallo Tobias
Warum denn unbedingt als *.xls ?
Dann speichere die Datei als *.xlsx oder *.pdf
Gruss Werni
AW: xlsm per Makro als xls abspeichern und dabei alle Makros entfernen
17.12.2019 11:03:29
Daniel
Hi
wenn du in einem anderen Format speichern willst, reicht es nicht, die Dateierweiterung im Dateinamen zu ändern. Du musst dann schon beim SaveAs den Parameter FileFormat richtig einstellen.
beim Dateinamen solltest du die Dateierweiterung sogar weglassen, denn dann wird diese passend zum verwendeten Format automatisch ergänzt.
allerdings enthalten die alten xls-Formate ebenfalls Makros, denn xls entspricht dem neuen xlsb.
nur im xlsx-Format verschwinden die Makros.
Beachte weiterhin, dass das löschen der Makros nur in der auf dem Verzeichnis gespeicherten Version passiert und nicht in der Datei im Hauptspeicher. Diese behält weiterhin die Makros.
um die Makros verschwinden zu lassen, müsstest du so vorgehen:
- Datei als xlsx-Datei speichern
- Datei schließen
- xlsx-Datei öffnen
- xlsx-Datei als xls-Datei speichern
- xlsx-Datei löschen
Gruß Daniel
Gruß Daniel
Anzeige
AW: xlsm per Makro als xls abspeichern und dabei alle Makros entfernen
17.12.2019 11:04:01
Oberschlumpf
Hi Tobias,
die einfachste Variante (mit meinem Wissen! ;-) ) ist das hier:
1. erstell eine neue Datei, ich nenne sie mal XXX, die NUR das Makro enthält, mit dem du aus deiner Datei mit Makro eine Datei ohne Makro machst. Deine Datei nenne ich mitMakro
2. in XXX wird per Makro zuerst wieder eine neue Datei erstellt. Diese Datei nenne ich mal ohneMakro
3. So, nun werden nacheinander nur die Daten (Werte) aus allen Tabellenblätter aus mitMakro kopiert und in ein jeweils eigenes Tabellenblatt in ohneMakro eingefügt. Alle Werte mit allen Formaten mit allen Formeln, aber alles ohne Makros!
4. Jetzt noch die Datei ohneMakro irgendwo speichern - fertig
Und erst ab jetzt wird HaJo's Vorschlag hilfreich!
Die Schritte 1 - 4 kannst du wirklich mit dem Makrorecorder durchführen.
Hilft mein Ansatz?
(wenns beim 1. Versuch nicht klappt, probier es immer und immer wieder...Fahrradfahren konntest du auch nicht gleich beim 1. Mal, oder?! :-) )
Ciao
Thorsten
Anzeige
AW: xlsm per Makro als xls abspeichern und dabei alle Makros entfernen
17.12.2019 11:12:45
Piet
Hallo Tobias
du findest im Internet in mehreren Foren, auch bei Herbers, Makros zum "Löschen von Modulen"!
Ich habe mal einige runtergeladen, aber nich alle funktionieren. Einfach mal schauen was klappt.
https://www.herber.de/bbs/user/133828.xlsm
mfg Piet
Anzeige
AW: xlsm per Makro als xls abspeichern und dabei alle Makros entfernen
17.12.2019 11:22:59
Tobias
Also erstmal danke an alle für die Hinweise! Da bin ich eine Weile beschäftigt ...
(der Vorschlag von perterk funktioniert schonmal, allerdings halt ohne die Aufforderung, den Speicherort auszuwählen und ohne die automatische dynamische Namensvergabe)
Viele Grüße,
Tobias
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

xlsm als xlsx speichern und alle Makros entfernen


Schritt-für-Schritt-Anleitung

Um eine .xlsm-Datei in eine .xlsx-Datei zu speichern und dabei alle Makros zu entfernen, kannst Du folgendes VBA-Makro verwenden:

Option Explicit

Sub SpeichereOhneMakros()
    Dim Ordner As Variant
    Dim strPath As String
    Dim FN As String
    Dim fDialog As FileDialog

    ' Schritt 1: Aktuelle Datei speichern
    ActiveWorkbook.Save

    ' Schritt 2: Speicherort auswählen
    Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
    With fDialog
        .Title = "Bitte das entsprechende Unterverzeichnis auswählen!"
        .InitialFileName = "D:\Projekte\Auswertungen"
        If .Show = -1 Then
            For Each Ordner In .SelectedItems
                strPath = Ordner
            Next
        Else
            Exit Sub
        End If
    End With

    ' Schritt 3: Dateinamen generieren
    With ActiveSheet
        FN = .Range("A2").Value & "_" & ActiveSheet.Name & ".xlsx"
    End With

    ' Schritt 4: Datei als xlsx speichern
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    ActiveWorkbook.Sheets.Copy
    ActiveWorkbook.SaveAs Filename:=strPath & FN, FileFormat:=51
    ActiveWorkbook.Close

    ' Schritt 5: Ursprüngliche Datei schließen ohne Änderungen
    ThisWorkbook.Close savechanges:=False
End Sub

Dieses Makro führt die notwendigen Schritte aus, um Deine .xlsm-Datei in eine .xlsx-Datei zu speichern, während alle Makros entfernt werden.


Häufige Fehler und Lösungen

  • Fehler: Beim Speichern als .xls bleibt das Makro erhalten.

    • Lösung: Stelle sicher, dass Du die Datei als .xlsx speicherst, da nur in diesem Format die Makros entfernt werden.
  • Fehler: Fehlermeldung beim Öffnen der Datei, dass das Dateiformat nicht mit der Dateierweiterung übereinstimmt.

    • Lösung: Verwende die richtige FileFormat-Einstellung im SaveAs-Befehl.

Alternative Methoden

  1. Makrorecorder verwenden: Du kannst den Makrorecorder aktivieren, um die Schritte zum Speichern ohne Makros aufzuzeichnen.
  2. Manuelles Kopieren: Kopiere die Daten manuell in eine neue .xlsx-Datei und speichere sie dort. Dies funktioniert, wenn Du keine großen Datenmengen hast.

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du das Makro anpassen kannst:

  • Beispiel 1: Du möchtest nur bestimmte Tabellen speichern. Ändere den Code in der Zeile, die die Blätter kopiert:
Sheets(Array("Tabelle1", "Tabelle3")).Copy
  • Beispiel 2: Um eine .xlsm-Datei in eine .pdf-Datei zu konvertieren, kannst Du den ExportAsFixedFormat-Befehl verwenden.

Tipps für Profis

  • Verwende Application.DisplayAlerts = False, um Warnmeldungen beim Schließen von Dateien zu unterdrücken.
  • Nutze Debug.Print im Code, um den Fortschritt oder mögliche Fehler zu verfolgen.

FAQ: Häufige Fragen

1. Wie entferne ich alle Makros aus einer Excel-Datei? Du kannst alle Makros entfernen, indem Du die Datei im .xlsx-Format speicherst, da in diesem Format keine Makros unterstützt werden.

2. Kann ich .xlsm-Dateien direkt als .xls speichern? Ja, aber sei vorsichtig, da die .xls-Dateien ebenfalls Makros unterstützen. Am besten speichere sie als .xlsx, um sicherzustellen, dass die Makros entfernt werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige