13.07.2016, 19:16 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2016, 16:41 von Glausius.)
Hallo,
aus einer umfangreichen Arbeitsmappe eines Abrechnungsprogrammes sollen bestimmte Tabellenblätter ohne die Formeln und den hinterlegten VBA-Code als einzelnen Datei mit einem neuen Namen abgespeichert werden. Da es sich dab ei ua. um Formulare handelt und diese verbundene Zellen beinhalten, die nicht geändert werden können (sollen), "stirbt" mein Code immer bei der Zeile .Cells(1).PasteSpecial xlValue mit dem Hinweis, das verbundene Zellen die gleiche Größe haben müssen, ab. Was muss ich ändern / beachten oder ist der Code völlig falsch und muss ganz anders aussehen:
Code:
Sub Tabelle_aus_Mappe_kopieren() Dim wsQuelle As Worksheet Dim WbZiel As Workbook
Dim LW As String Dim Info As Date Dim Beleg As String LW = "I" Info = Date Beleg = "Abrechnung"
Set wsQuelle = ActiveSheet Application.SheetsInNewWorkbook = 1 Set wbZiel = Workbooks.Add wsQuelle.Copy With wbZiel.Sheets(1) .Name = wsQuelle.Name ' .Cells(1).PasteSpecial xlFormats ' .Cells(1).PasteSpecial xlValues .Cells(1).Select End With Set wbZiel = ActiveWorkbook wbZiel.Close True, LW & ":\" & Info & "-" & Beleg & ".xls" If wbZiel Is ActiveWorkbook Then wbZiel.Close False End Sup
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
da ich die Datei nicht nachbauen kann, hier nur eine Überlegung
In den Sheets, die separat gespeichert werden sollen, alles markieren, copy/paste value, danach mit Sheets(i).copy dieses Sheet in eine neue Datei bringen und dort abspeichern. Die Ursprungsdatei OHNE speichern schließen.
Das kann man von Hand testen und wenn es klappt auch mit einem einfachen vba-Code erledigen.
Hallo Günter, Bin nur am Smartphone, daher auch nur Theorie. Ich würde mit savecopyas oder ähnlicher Verfahrensweise den Code entfernen und mit cells.value=cells.value dann die Formeln.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
genau was du überlegt hast, macht eigentlich der von mir vorgestellte (und oft benutzte) Code, nur in diesem Projekt scheitert er (angeblich) an den verbundenen Zellen. Einach it Copy und Paste zu arbeiten geht nicht, weil dann der hinterlegte VBA-Code mit übernommen wird und da der ein Activate-Ereignis hat, welches dann keine Bezüge aus dem Tabellenblatt zur Hauptdatei findet, endet das Ganze im Chaos!
Hallo André,
leider geht das auch nicht so einfach, den es werden eine Reihe von Abrechnungs- und Nachwiestabellenblätter im Laufe des Projektes erstellt, die jeweils gesondert ausgedruckt und auf einem nur einmal beschreibbarem Speichermedium abgespeichert werden müssen (will das Finanzamt so!).
Vielleicht hat mein Code zu diesem Zweck nur einen kleinen "Haken" und ich finde den nur nicht?
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
In der angehängten Datei sind verbundene Zellen und Formeln enthalten.
Der folgende Code in einem anderer Sheet erfüllt m.E. die Anforderungen (c:\temp muss existieren und "Glaudius Bsp.xlsx" geöffnet sein)
Code:
Sub Glaudius() Dim WB As Workbook Set WB = Workbooks("Glaudius Bsp.xlsx") With WB.Sheets("QWE") .UsedRange.Value = .UsedRange.Value .SaveAs "c:\temp\Glaudius.xlsx" End With WB.Close 0 End Sub
Falls es Makros in der Originaldatei gibt, werden diese automatisch durch das Format "*.xlsx" entfernt. mfg
Zitat:aus einer umfangreichen Arbeitsmappe eines Abrechnungsprogrammes sollen bestimmte Tabellenblätter ohne die Formeln und den hinterlegten VBA-Code als einzelnen Datei mit einem neuen Namen abgespeichert werden.
musst du das als .xls abspeichern oder kannst du auch das PDF-Format benutzen? Falls das zweite zutrifft, musst du nur das entsprechende Blatt aktivieren und unter "Datei==> Speichern unter" einen neuen Namen vergeben und als Dateityp PDF angeben. Es wird nur das aktive Blatt abgespeichert.
Gruß Günter Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen. angebl. von Georg Christoph Lichtenberg (1742-1799)
14.07.2016, 19:39 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2016, 19:39 von schauan.)
Hallo Günter, Eventuell geht wbziel.sheets(1).cells.value=wsquelle.cells.value? Eventuell auch auf den benutzten Bereich beschränkt. Oder vor dem Kopieren die verbundene(n) Zelle(n) auflösen und hinterher wieder setzen. @all das mit dem Format xlsx / xls würde auch gehen, wenn man 2x speichert. Z.B. erst die xlsx ins temp und diese dann als xls an den Zielort. Anschließend die xlsx löschen. Aber das ist ja inzwischen ot.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)