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

Forumthread: *xltm-Datei: nach öffnen als *.xlsm abspeichern

*xltm-Datei: nach öffnen als *.xlsm abspeichern
Peter
Guten Tag
Ich habe eine Excel-Datei mit Makros als Vorlage *.xltm abgespeichert. Wenn ich die Datei öffne, und unter einem anderen Namen abspeichern will, wird mir die Erweiterung *.xlsx vorgeschlagen. Kann ich mittels VBA steuern, dass als Dateityp automatisch *.xlsm vorgeschlagen wird?
Danke für eine Antwort und Gruss, Peter
Anzeige
AW: *xltm-Datei: nach öffnen als *.xlsm abspeichern
01.09.2011 23:08:57
fcs
Hallo Peter,
zum Beispiel so:
Gruß
Franz

Sub SaveAs_xlsm()
'Dialog anzeigen, voreingestellt auf Arbeitsmappe mit Makros
With Application.FileDialog(msoFileDialogSaveAs)
.InitialView = msoFileDialogViewDetails
.FilterIndex = 2 'Standardmäßig xlsm  unter Excel 2007
If .Show  False Then
.Execute
End If
End With
End Sub
Sub SaveAs_xlsm_01()
'wenn der Dateiname schon bekann ist dann so
Dim sFilename As String
sFilename = "ABC_Test"
Application.ActiveWorkbook.SaveAs Filename:=sFilename, FileFormat:=52, addtomru:=True
End Sub

Anzeige
AW: *xltm-Datei: nach öffnen als *.xlsm abspeichern
02.09.2011 09:31:31
Peter
Hallo Franz
Vielen Dank für deine Antwort.
Gibt es eine Möglichkeit, dass beim Anwählen von "Speichern" oder "Speichern unter" direkt der Sub SaveAs_xlsm() aufgerufen wird? Wenn ja, sollte dies allerdings nur geschehen, wenn
1. die Datei mit Excel 2007 oder 2010 geöffnet wird (ansonsten gibt es ja xlsm nicht)
2. beim erstmaligen Speichern, wenn die Vorlage geöffnet wurde
Zu 1. nehme ich an, dass eine Versionsabfrage erfolgen kann
Zu 2. Dieser Punkt ist erfüllt, wenn der Dateiname noch keine Erweiterung hat
?thisworkbook.Name
Template_TEST1 'wenn Template_TEST.xltm geöffnet wurde und noch keine Speicherung erfolgt ist
Bin gespannt, ob es eine Lösung gibt.
Gruss, Peter
Anzeige
Sicher! Zu 1. Ja! Zu 2. empfehle ich ...
02.09.2011 15:31:05
Luc:-?
Speichern unter…, Peter;
das (beides) kann man in der Ereignisprozedur _BeforeSave (SaveAsUI=True) abfangen, den im Dialog angegebenen Namen (Endung) auswerten und alles Weitere davon abhängig machen (ggf Cancel = True setzen zur Speicherungs­unterdrückung).
Gruß Luc :-?
Anzeige
AW: Sicher! Zu 1. Ja! Zu 2. empfehle ich ...
02.09.2011 15:50:11
Peter
Hallo Luc
Danke für die Antwort.
Könntest du mir eine solche Ereignisprozedur schreiben?
Mir ist nicht ganz klar, wie so etwas aussieht.
Gruss, Peter
Auf die Schnelle mal Folgendes, ...
02.09.2011 23:27:06
Luc:-?
…Peter:
VBEditor-Hilfe, Stichwort Ereignisse der Arbeitsmappe. Im Dokument-Klassenmodul DieseArbeitsmappe im Kopf des Codefensters links Workbook und dann rechts BeforeSave auswählen. Der Prozedurrahmen wird dabei automatisch angelegt und darf nicht verändert wdn. Die Leerzeile wird anschließend durch den auszuführenden Code ersetzt, den ich ggf irgendwann am WE liefern kann → ein schönes solches!
Gruß Luc :-?
Anzeige
AW: Sicher! Zu 1. Ja! Zu 2. empfehle ich ...
03.09.2011 08:11:52
fcs
Hallo Peter,
ein entsprechendes Makro unter DieseArbeitsmappe der Excel-Vorlagedatei muss etwa so aussehen.
Gruß
Franz

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'  MsgBox "Datei-Format: " & Me.FileFormat   ' Testzeile
Dim iFilterIndex As Integer
If Me.Path = "" Then 'Prüfen, ob Datei schon gespeichert wurde
Application.EnableEvents = False
Cancel = True
If Val(Left(Application.Version, 2)) >= 12 Then 'Excel-Versionsprüfung
'Excelversion 2007 und neuer
Select Case Me.FileFormat
Case 52             'xlOpenXMLWorkbookMacroEnabled - Excel 2007 mit Makros
iFilterIndex = 2  'Standardmäßig xlsm  unter Excel 2007
Case 56             'xlExcel8  - Excel 98 bis 2003
iFilterIndex = 4  'Standardmäßig xls  unter Excel 2007
Case Else
iFilterIndex = 1  'Standardmäßig xlsx  unter Excel 2007
End Select
'Speichern unter Dialog anzeigen
With Application.FileDialog(2)  '2 = msoFileDialogSaveAs
.InitialView = 2              '2 = msoFileDialogViewDetails
.FilterIndex = iFilterIndex
If .Show  False Then
.Execute
End If
End With
Else
'Ältere Excelversionnen - SaveAs Dialog anzeigen
Application.Dialogs(5).Show     '5 = xlDialogSaveAs
End If
Application.EnableEvents = True
End If
End Sub

Anzeige
AW: Sicher! Zu 1. Ja! Zu 2. empfehle ich ...
05.09.2011 13:23:01
Peter
Hallo Franz
Vielen Dank. Das klappt!
Gruss, Peter
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

xltm-Datei nach Öffnen als *.xlsm abspeichern


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineArbeitsmappe)" und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub SaveAs_xlsm()
       'Dialog anzeigen, voreingestellt auf Arbeitsmappe mit Makros
       With Application.FileDialog(msoFileDialogSaveAs)
           .InitialView = msoFileDialogViewDetails
           .FilterIndex = 2 'Standardmäßig xlsm unter Excel 2007
           If .Show <> False Then
               .Execute
           End If
       End With
    End Sub
  4. Ereignisprozedur erstellen: Um die Datei beim Speichern gleich im .xlsm-Format zu speichern, füge folgenden Code in das DieseArbeitsmappe-Modul ein:

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
       Dim iFilterIndex As Integer
       If Me.Path = "" Then 'Prüfen, ob Datei schon gespeichert wurde
           Application.EnableEvents = False
           Cancel = True
           If Val(Left(Application.Version, 2)) >= 12 Then 'Excel-Versionsprüfung
               Select Case Me.FileFormat
                   Case 52 'xlOpenXMLWorkbookMacroEnabled - Excel 2007 mit Makros
                       iFilterIndex = 2 'Standardmäßig xlsm
                   Case Else
                       iFilterIndex = 1 'Standardmäßig xlsx
               End Select
               With Application.FileDialog(2) 'msoFileDialogSaveAs
                   .InitialView = 2
                   .FilterIndex = iFilterIndex
                   If .Show <> False Then
                       .Execute
                   End If
               End With
           Else
               Application.Dialogs(5).Show 'Ältere Excelversion
           End If
           Application.EnableEvents = True
       End If
    End Sub
  5. Speichern und testen: Speichere die Datei und teste die Funktionalität, indem du die .xltm-Vorlage öffnest und versuchst, sie zu speichern.


Häufige Fehler und Lösungen

  • Fehler: Die Datei wird als .xlsx gespeichert.

    • Lösung: Überprüfe den Filterindex im VBA-Code. Stelle sicher, dass iFilterIndex auf 2 gesetzt ist.
  • Fehler: Der Speicherdialog öffnet sich nicht.

    • Lösung: Stelle sicher, dass Application.EnableEvents auf True gesetzt ist, um eventuelle Blockaden zu vermeiden.

Alternative Methoden

  1. Manuelles Speichern: Du kannst die Datei auch manuell über Datei > Speichern unter auswählen und .xlsm als Format wählen.
  2. Makro zur Konvertierung: Erstelle ein Makro, das die .xlsm-Datei direkt in eine .pdf-Datei konvertiert, wenn es gespeichert wird:

    Sub ExportToPDF()
       Dim pdfPath As String
       pdfPath = ThisWorkbook.Path & "\" & ThisWorkbook.Name & ".pdf"
       ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
    End Sub

Praktische Beispiele

  • Beispiel 1: Wenn du eine Excel-Vorlage mit Makros (.xltm) öffnest und sicherstellen möchtest, dass die Datei beim Speichern als .xlsm gespeichert wird, nutze die oben genannten Schritte.
  • Beispiel 2: Um automatisierte Berichte in .xlsm zu erstellen, kannst du den VBA-Code so anpassen, dass er die Datei beim Öffnen automatisch speichert.

Tipps für Profis

  • Versionen prüfen: Achte darauf, dass dein VBA-Code mit verschiedenen Excel-Versionen kompatibel ist, insbesondere bei der Verwendung von .xlsm.
  • Fehlerbehandlung einbauen: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme zu adressieren.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen .xltm und .xlsm? Die .xltm-Datei ist eine Excel-Vorlage mit Makros, während .xlsm eine Arbeitsmappe mit aktivierten Makros ist.

2. Wie öffne ich eine .xlsm Datei? Du kannst eine .xlsm Datei einfach durch Doppelklick darauf öffnen, solange du Excel installiert hast. Achte darauf, dass Makros aktiviert sind, um volle Funktionalität zu gewährleisten.

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