Clever-Excel-Forum

Normale Version: Tabellenblatt aus einer Arbeitsmappe speichern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
Hallo,

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.

mfg
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.
Hallo Fennek,

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?
Hallo,

hier noch einmal eine getestete (Teil-)Version.

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
Hallo,
(14.07.2016, 16:19)Fennek schrieb: [ -> ]Falls es Makros in der Originaldatei gibt, werden diese automatisch durch das Format "*.xlsx" entfernt.

Günter möchte aber als .xls abspeichern. Wink

Gruß Uwe
Hi Günter,


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.
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.