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

Forumthread: XLSX ohne Makros speichern

XLSX ohne Makros speichern
18.12.2017 23:07:56
Sabrina
Hallo liebes Forum,
vor vielen Jahren habe ich Dank dieses Forums ein gut funktionierendes Projekt erstellenh können. Die Version war Excel 2003 = xlt
Rechnungsvorlage ist xlt, per Button wird diese als xls geöffnet. Beim Drucken wird eine fortlaufende Rechnungsnummer vergeben und relevante Daten werden in eine separate Tabelle untereinander geschrieben. Funktioniert einwandfrei.
Nun muss ich diese Vorlage als .xlsm abspeichern. Das Öffnen als .xlsx kriege ich per Makro noch hin (aufgezeichnet) aber beim Speichern erscheint die Meldung "... Die folgenden Features können in Arbeitsmappen ohne Makros nicht gespeichert werden:
• VB Projekt ..."
Ich habe versucht, die Meldung mit: Application.DisplayAlerts = False zu unterdrücken, aber es funktioniert einfach nicht.
Ich weiß einfach nicht, wie ich den Code ändern muss. Könnt ihr mir bitte helfen?
Vielen Dank schon mal
VG Sabrina
Option Explicit
Private Sub Workbook_Open() 'Rechnung
ChDir "C:\Vorlagen"
Workbooks.Open FileName:="C:\Vorlagen\Tabelle.xls"
Windows(1).Activate
Dim myWorksheet As Worksheet 'Passwort aufheben und Formatierungen zulassen
For Each myWorksheet In ThisWorkbook.Worksheets
myWorksheet.Protect Password:="meier", UserInterFaceOnly:=True, DrawingObjects:=True,  _
Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowInsertingRows:=True, AllowDeletingRows _
:=True
ActiveSheet.EnableSelection = xlUnlockedCells
Next
Dim Datum As String
Datum = Format(Now, "dd.mm.yyyy")
Range("F12") = Datum
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
On Error GoTo R_Error
Dim newNr As Variant, oldNr As Variant
Dim FileName As String
FileName = "C:\Rechnung.ini"
If Range("B14")  "" Then Exit Sub
Close #1
restart:
Open FileName For Input As #1
Line Input #1, oldNr
Close #1
newNr = oldNr + 1
Open FileName For Output As #1
Write #1, newNr
Close #1
Select Case Len(newNr)
Case 1
newNr = "000" & newNr
Case 2
newNr = "00" & newNr
Case 3
newNr = "0" & newNr
Case 4
newNr = newNr
Case 5
MsgBox "Zahlenlimit überschritten"
Exit Sub
End Select
Range("B14") = newNr & "-17 A"
R_Exit:
Exit Sub
R_Error:
Select Case Err
Case 53
Open FileName For Output As #1
Close #1
Open FileName For Output As #1
Write #1, 0
Close #1
Err.Clear
Resume restart
Case 54
Close #1
Resume restart
Case Else
MsgBox Err & ": " & Err.Description
Resume R_Exit
End Select
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbooks("Tabelle.xls").Activate
ActiveWorkbook.Worksheets("Tabelle1").Unprotect "mueller"
Windows(1).Activate
If Range("B14")  "" Then
Dim wksSource As Worksheet, wksTarget As Worksheet
Dim iRow As Integer
Dim chkStr As String
Set wksSource = Worksheets("Rechnung")
Set wksTarget = Workbooks("Tabelle.xls").Worksheets(1)
chkStr = wksSource.Range("A11").Value
iRow = wksTarget.Cells(Rows.Count, 1).End(xlUp).Row + 1
wksTarget.Cells(iRow, 1).Value = wksSource.Range("B14").Value
wksTarget.Cells(iRow, 2).Value = wksSource.Range("F12").Value
wksTarget.Cells(iRow, 5).Value = wksSource.Range("B18").Value
wksTarget.Cells(iRow, 6).Value = wksSource.Range("B17").Value
wksTarget.Cells(iRow, 7).Value = wksSource.Range("F18").Value
wksTarget.Cells(iRow, 8).Value = wksSource.Range("F30").Value
wksTarget.Cells(iRow, 9).Value = wksSource.Range("F13").Value
wksTarget.Cells(iRow, 3).Value = Left(chkStr, InStr(1, chkStr, Chr$(10)) - 1)
chkStr = Right(chkStr, Len(chkStr) - InStr(1, chkStr, Chr$(10)))
wksTarget.Cells(iRow, 4).Value = Left(chkStr, InStr(1, chkStr, Chr$(10)) - 1)
End If
Workbooks("Tabelle.xls").Activate
ActiveWorkbook.Worksheets("Tabelle1").Protect "mueller"
ActiveWorkbook.Close SaveChanges:=True
If ThisWorkbook.Name = "Rechnung.xlt" Then
Exit Sub
Else
Dim vbc As Object
With ActiveWorkbook.VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
Case 100
With vbc.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End If
End Sub

Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
einfach als .xltm speichern
19.12.2017 01:10:44
guenni
.. das neue Vorlagenformat mit Makros
AW: einfach als .xltm speichern
19.12.2017 09:44:46
Sabrina
Hallo Guenni,
auch wenn ich die Vorlage als XLTM-Datei speicher, erscheint die Meldung bzgl. des "VB Projekt..."
VG
Sabrina
AW: einfach als .xltm speichern
19.12.2017 09:57:17
guenni
Dann benutzt Du nicht das Pulldown für die Dateitypen, sondern gibst Die Endung ins Dateinamenfeld ein!
Anzeige
AW: einfach als .xltm speichern
19.12.2017 10:10:23
Sabrina
Hallo Guenni,
die ehemalige XLT-Datei hatte ich geöffnet und mit Speichern unter als XLTM oder XLSM (beides ausprobiert) gespeichert.
Über NEU öffnet er XLSX und die Vorgabe beim Speichern ist entsprechend auch XLSX, allerdings mit Abfrage bzgl. der Makros.
VG
Sabrina
AW: einfach als .xltm speichern
19.12.2017 12:04:33
Sabrina
Hallo Günther,
ich möchte OHNE Makros, und zwar als XLSX speichern.
Dennoch, danke für deine Mühe.
VG
Sabrina
.....und wieso....
19.12.2017 20:20:18
STeve
...speicherst du es nicht als xlsx ohne Makros ab? .... VBA Editor öffnen alle Module und Codes löschen, dann abspeichern. ....oder steh ich auf dem Schlauch?..... STeve
Anzeige
AW: .....und wieso....
19.12.2017 21:46:21
Sabrina
Hallo Steve,
wenn die Vorlage als XLSX geöffnet wird, sind die Makros vorhanden, um z.B. Rechnungsnr. etc. einzufügen. Wenn die Rechnung gespeichert wird, kommt natürlich die Meldung bzgl. Makros gehen verloren ...
Ich kann meinen Mädels nicht zumuten, dass sie jedesmal die Meldung mit JA bestätigen bzw. die Makros von Hand löschen.
Am Tag werden viele kleine Rechnungen von verschiedenen Mitarbeiterinnen geschrieben und deswegen möchte ich gerne, dass Excel die Makros automatisch löscht, wenn die Rechnung geschlossen wird.
In der alten Version klappte das ja.
VG
Sabrina
Anzeige
Dieses Update wird nicht spurlos an Dir voübergehn
20.12.2017 10:24:05
guenni
Das klappte wohl kaum.
In der alten Version hast Du mit an Sicherheit grenzender Wahrscheinlichkeit incl. Makros gespeichert.
Nur dass die Unterscheidung in mit/ohne Makros nicht an der Dateiendung ersichtlich war.
Würde den Code in ein Add-in auslagern
Da nun mal diese strikte Unterscheidung mit/ohne Makros eingeführt ist, macht man das Beste draus.
m.E. hast Du die Wahl zwischen
- Einstieg in AddIn-Programmierung
- Den Mitarbeiterinnen die Dialogbox zumuten
- Vorlage als xlsm schreibgeschützt bereitstellen und Weiterverarbeitung als xlsm
Anzeige
versuche mal Screenupdating und DisplayAlerts -
20.12.2017 15:29:30
STeve

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbooks("Tabelle.xls").Activate
ActiveWorkbook.Worksheets("Tabelle1").Unprotect "mueller"
Windows(1).Activate
If Range("B14")  "" Then
Dim wksSource As Worksheet, wksTarget As Worksheet
Dim iRow As Integer
Dim chkStr As String
Set wksSource = Worksheets("Rechnung")
Set wksTarget = Workbooks("Tabelle.xls").Worksheets(1)
chkStr = wksSource.Range("A11").Value
iRow = wksTarget.Cells(Rows.Count, 1).End(xlUp).Row + 1
wksTarget.Cells(iRow, 1).Value = wksSource.Range("B14").Value
wksTarget.Cells(iRow, 2).Value = wksSource.Range("F12").Value
wksTarget.Cells(iRow, 5).Value = wksSource.Range("B18").Value
wksTarget.Cells(iRow, 6).Value = wksSource.Range("B17").Value
wksTarget.Cells(iRow, 7).Value = wksSource.Range("F18").Value
wksTarget.Cells(iRow, 8).Value = wksSource.Range("F30").Value
wksTarget.Cells(iRow, 9).Value = wksSource.Range("F13").Value
wksTarget.Cells(iRow, 3).Value = Left(chkStr, InStr(1, chkStr, Chr$(10)) - 1)
chkStr = Right(chkStr, Len(chkStr) - InStr(1, chkStr, Chr$(10)))
wksTarget.Cells(iRow, 4).Value = Left(chkStr, InStr(1, chkStr, Chr$(10)) - 1)
End If
Workbooks("Tabelle.xls").Activate
ActiveWorkbook.Worksheets("Tabelle1").Protect "mueller"
ActiveWorkbook.Close SaveChanges:=True
If ThisWorkbook.Name = "Rechnung.xlt" Then
Exit Sub
Else
          Rem Bildschirmmeldung deaktivieren
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Dim vbc As Object
With ActiveWorkbook.VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
Case 100
With vbc.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End If
                      With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With

End Sub

..in fett.....Bildschirmupdating und DisplayAlerts - deaktivieren und ganz unten wieder aktivieren.
mfg STeve
Anzeige
AW: versuche mal Screenupdating und DisplayAlerts -
20.12.2017 15:34:20
STeve
.........unten natürlich auf True stellen.......

With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With

mfg STeve
Versuch passt perfekt!
20.12.2017 23:16:44
Sabrina
Hallo STeve,
ich habe die "Application" Zuhause an meiner Testdatei eingefügt und es funktioniert. Bin überglücklich.
Morgen dann an die "Echtdaten", denke aber, auch dort wird es funktionieren.
Ich danke euch Zwei ganz herzlich für die Mühe und die Zeit.
Wünsche euch und allen anderen Foristen ein schönes Weihnachtsfest.
VG
Sabrina
Anzeige
Fein und...
21.12.2017 09:28:33
STeve
..hoffe klappt auch bei den Echtdaten. Danke und dir auch schöne Weihnachten. Mfg STeve
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

XLSX ohne Makros speichern


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei: Stelle sicher, dass du die Datei im richtigen Format öffnest. Wenn du eine Vorlage mit Makros hast, öffne sie als .xlsm oder .xltm.

  2. Verwende den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen. Hier kannst du die Makros sehen und bearbeiten.

  3. Lösche die Makros: Gehe zu jedem Modul und lösche den Code. Dadurch kannst du die Datei ohne Makros speichern.

    For Each vbc In ThisWorkbook.VBProject.VBComponents
       If vbc.Type = 1 Or vbc.Type = 2 Or vbc.Type = 3 Then
           ThisWorkbook.VBProject.VBComponents.Remove vbc
       End If
    Next vbc
  4. Speichere die Datei: Gehe zu DateiSpeichern unter und wähle das Format .xlsx oder .xls. Achte darauf, dass du die Datei ohne Makros speicherst.

  5. Bestätige die Abfragen: Wenn Excel fragt, ob du die Makros speichern möchtest, bestätige mit „Nein“. Wenn du die oben genannten Schritte befolgst, sollte die Meldung nicht mehr erscheinen.


Häufige Fehler und Lösungen

  • Fehler: "Die folgenden Features können in Arbeitsmappen ohne Makros nicht gespeichert werden: VB Projekt..."

    • Lösung: Stelle sicher, dass du alle Makros im VBA-Editor gelöscht hast. Wenn du die Datei als .xlsx speichern möchtest, dürfen keine VB-Projekte vorhanden sein.
  • Fehler: Du kannst die Excel-Datei nicht ohne Makros speichern.

    • Lösung: Überprüfe, ob du alle Module und Codes im VBA-Editor entfernt hast. Wenn du die Datei immer noch nicht speichern kannst, versuche, die Datei neu zu erstellen.

Alternative Methoden

  • Speichern als .xltm: Wenn du die Vorlage mit Makros verwenden möchtest, speichere sie als .xltm. Dies ermöglicht dir, die Makros zu nutzen, ohne sie jedes Mal zu löschen.

  • Verwendung eines Add-Ins: Du kannst auch versuchen, die Makros in ein Add-In auszulagern. So bleibt die Hauptdatei ohne Makros, während die Funktionalitäten über das Add-In bereitgestellt werden.


Praktische Beispiele

  1. Speichern als .xlsx: Wenn du eine Rechnungsvorlage hast, die fortlaufende Rechnungsnummern generiert, aber keine Makros speichern möchtest, gehe wie folgt vor:

    • Öffne die Vorlage, lösche die Makros und speichere die Datei anschließend als .xlsx.
  2. Automatisches Löschen von Makros: Wenn du die Datei schließt, nutze den folgenden Code, um die Makros automatisch zu löschen:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       Dim vbc As Object
       With ThisWorkbook.VBProject
           For Each vbc In .VBComponents
               If vbc.Type = 1 Or vbc.Type = 2 Or vbc.Type = 3 Then
                   .VBComponents.Remove vbc
               End If
           Next vbc
       End With
    End Sub

Tipps für Profis

  • Bildschirmaktualisierung und Warnmeldungen deaktivieren: Um das Speichern zu beschleunigen und Warnmeldungen zu vermeiden, kannst du Application.DisplayAlerts = False und Application.ScreenUpdating = False verwenden. Vergiss nicht, sie am Ende des Codes wieder zu aktivieren.

  • Regelmäßige Sicherung: Erstelle regelmäßig Backups deiner Arbeitsmappen, besonders wenn du mit Makros arbeitest.


FAQ: Häufige Fragen

1. Wie speichere ich eine Excel-Datei ohne Makros?
Du musst alle Makros im VBA-Editor löschen, bevor du die Datei speicherst. Speichere sie dann als .xlsx oder .xls.

2. Was passiert mit meinen Daten, wenn ich die Makros lösche?
Die Daten bleiben erhalten, aber die automatisierten Funktionen, die von den Makros bereitgestellt wurden, gehen verloren. Stelle sicher, dass du die erforderlichen Funktionen manuell umsetzt, wenn nötig.

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