Hallo,
mit einem Makro (aus einem Internetforum) speichere ich alle Registerblätter einer Tabelle als neue Tabellen, die den Namen des jeweiligen Registerblattes erhalten. Dies hat mit Excel 2003 ohne Probleme funktioniert, jetzt bei Excel 2010 kommt beim Öffnen der neuen Tabellen immer die Fehlermeldung:
„Sie versuchen eine Datei zu öffnen, test.xsl, deren Format von dem der Dateierweiterung angegebenen abweicht. Stellen Sie sicher, dass die Datei nicht beschädigt ist und aus einer vertrauenswürdigen Quelle stammt, bevor Sie die Datei öffnen. Wollen Sie die Datei jetzt öffnen?“
Kann man den VBA-Code an Excel 2010 anpassen, oder sonst etwas ändern um die nervige Meldung weg zu bekommen?
Der Code:
Sub einzelne_Tabs_Speichern()
'speichert die Register als Tabellen in gleichen Pfad
Dim wks As Worksheet, Pfad As String
Pfad = ThisWorkbook.Path & „“
For Each wks In ThisWorkbook.Worksheets
wks.Copy
ActiveWorkbook.SaveAs Pfad & wks.Name & „.xls“
ActiveWorkbook.Close
Next wks
End Sub
Gruß Harald
Hallo Harald,
an der Stelle, wo das Makro „.XLS“ an den Dateinamen anhängt, musst Du nur „.XLSX“ im Makro angeben. Das ist die neue Erweiterung ab EXCEL 2007.
Danach sollte es ohne Fehlermeldung gehen.
Probiere das mal mit einer Sicherheitskopie aus.
Viel Erfolg
Ullrich Sander
Hallo,
mit der Endung klappt es ohne die Fehlermeldung!
Aber das Makro selbst funktioniert nicht mehr, kann es sein, dass daran liegen, dass ich heute das Modul in meine persönliche Makromappe (*.xlsb) gesteckt hatte?
Jetzt sind alle neuen Tabellen leer und im Ordner des *.xlsb (START) gespeichert.
Vorher waren die im Ordner der urspünglichen Tabelle abgelegt
Gruß Harald
Hallo Harald,
mit der Endung klappt es ohne die Fehlermeldung!
ist noch zu prüfen was da geschieht.
In der Meldung stand doch was von „öffnen“? Wieso steht das
da wenn du eine Mappe speichern willst ist eine Frage.
Vor 2007 reichte die Angabe von xls im Code.
Ab 2007 muß man auch dabei den Typ(e) angeben.
Kein 100 %iges Wissen von mir mangels diesbezüglichen
Versuchen, aber glaub mir es lohnt sich da mal gezielt
nachzuforschen.
Aber das Makro selbst funktioniert nicht mehr, kann es sein,
dass daran liegen, dass ich heute das Modul in meine
persönliche Makromappe (*.xlsb) gesteckt hatte?
Jetzt sind alle neuen Tabellen leer und im Ordner des *.xlsb
(START) gespeichert.
Vorher waren die im Ordner der urspünglichen Tabelle abgelegt
Wieso funktioniert das Makro nicht mehr? Natürlich funktioniert
es irgendwie sonst gäbe es die neuen Tabellen nicht.
Das Problem ist z.B. diese Codezeile:
For Each wks In ThisWorkbook.Worksheets
Was ist wohl Thisworkbook wenn der Code in person(a)l.* steht?
Ich hoffe das reicht als Hilfe, wenn nicht, kein Akt, frag gerne
nach.
Gruß
Reinhard
Hallo Reinhard,
nach einiger Zeit überlegen:
Ich vermute, dass das Makro direkt in der *.xlsb ausgeführt wird, auch wenn ich dieses von einer anderen Tabelle aufgerufen wird.
Auch die einzelnen Tabellen werden im Ordner XLSTART ausgeführt.
Kann man dies beim „Dim“ steuern?
Gruß Harald
Hallo Harald,
Ich vermute, dass das Makro direkt in der *.xlsb ausgeführt
wird, auch wenn ich dieses von einer anderen Mappe
aufgerufen wird.
ja, die Bezugsbasis für den Code ist immer das Modul
wodrin er steht.
Darauf bezieht sich z.B. ThisWorkbook
Kann man dies beim „Dim“ steuern?
Nein, Dim hat da nix mit zu tun, s. nachfolgende Codes.
Gruß
Reinhard
Option Explicit
Sub einzelne\_Tabs\_Speichern\_als\_XLSX()
'speichert die Register als xlsx-Mappen in gleichen Pfad
Dim wks As Worksheet, Pfad As String
Pfad = ActiveWorkbook.Path & "\"
For Each wks In ActiveWorkbook.Worksheets
wks.SaveAs Pfad & wks.Name & ".xlsx", xlOpenXMLWorkbook
Next wks
ActiveWorkbook.Close
End Sub
Sub einzelne\_Tabs\_Speichern\_als\_XLS()
'speichert die Register als xls-Mappen in gleichen Pfad
Dim wks As Worksheet, Pfad As String
Pfad = ActiveWorkbook.Path & "\"
For Each wks In ActiveWorkbook.Worksheets
wks.SaveAs Pfad & wks.Name & ".xls", xlExcel8
Next wks
ActiveWorkbook.Close
End Sub
Danke Reinhard,
das Makro klappt!
Problem ist, dass nicht nur ein Registerblatt in der jeweiligen Tabelle gespeichert ist, sondern es ist eine Kopie (mit allen Registern) vom Original mit den Namen der jeweiligen Registerblätter.
Kannst Du das Modul so ändern, dass jeweils nur das eine Register zur jeweiligen Tabelle gespeichert wird?
Danke Harald
Problem ist, dass nicht nur ein Registerblatt in der
jeweiligen Tabelle gespeichert ist, sondern es ist eine Kopie
(mit allen Registern) vom Original mit den Namen der
jeweiligen Registerblätter.
Kannst Du das Modul so ändern, dass jeweils nur das eine
Register zur jeweiligen Tabelle gespeichert wird?
Hallo Harald,
gut, mein Fehler, Workheet.SaveAs habe ich mal benutzt da
ich vom Namen her dachte …, naja, ging schief 
Also doch wieder Workbook.SaveAs 
Mach die Hochkommas weg wenn auch die aktive Mappe geschlossen
werden soll.
Gruß
Reinhard
Option Explicit
Sub einzelne\_Tabs\_Speichern\_als\_XLSX()
'speichert die Register als xlsx-Mappen in gleichen Pfad
Dim wks As Worksheet, Pfad As String
Pfad = ActiveWorkbook.Path & "\"
For Each wks In ActiveWorkbook.Worksheets
wks.Copy
ActiveWorkbook.SaveAs Pfad & wks.Name & ".xlsx", xlOpenXMLWorkbook
ActiveWorkbook.Close
Next wks
'ActiveWorkbook.Close
End Sub
Sub einzelne\_Tabs\_Speichern\_als\_XLS()
'speichert die Register als xls-Mappen in gleichen Pfad
Dim wks As Worksheet, Pfad As String
Pfad = ActiveWorkbook.Path & "\"
For Each wks In ActiveWorkbook.Worksheets
wks.Copy
ActiveWorkbook.SaveAs Pfad & wks.Name & ".xls", xlExcel8
ActiveWorkbook.Close
Next wks
'ActiveWorkbook.Close
End Sub
Danke Reinhard,
jetzt klappt es wunderbar!
Harald