Excel-Datei als vollständige Kopie speichern

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von cry.baby.

    Excel-Datei als vollständige Kopie speichern

    Hallo zusammen

    Wie mein Name schon sagt - ich bin absoluter Neuling was VBA anbelangt. Um so glücklicher war ich, als ich diese Seite sowie diesen Threat gefunden habe. Nur leider klappts bei mir nicht. :-/

    Ich habe eine Excel-Datei mit 5 Sheets. Auf Sheet 1 befinden sich Rohdaten auf welche in Sheet 2, 3, 4 und 5 in Form von Formeln zugegriffen werden. Die Datei ist riesig und ich sollte diese an jeweilige Vertriebsparnter verschicken können. Es handelt sich bereits um eine ".xlsx" -Datei
    Nun würde ich gerne, wie meine Vorredner, diese Datei, nochmals, praktisch als eine Kopie von sich selbst speichern inkl. aller Tabellenblätter und Formatierungen sowie Grafiken (Ich habe zwei Sheets mit Diagrammen, welche es mir absolut GAR NICHT übernimmt....)
    1.) alle Felder sollen ausschließlich nur Werte enthalten
    2.) Die Datei soll auch als ."xlsx" gespeichert werden jedoch als "Newsflash VP nur Werte"
    3.) Nebst der Formatierung und den Werten sollen auch die Diagramme (Liniendiagramme) in der Kopie abgebildet werden.

    Momentan siehts bei mir so aus:
    Sub CopyNewsFlashonlydata()
    Dim wb As Workbook, ws As Worksheet, sh As Shape
    Set wb = Workbooks.Add(xlWBATWorksheet)
    wb.Sheets(1).Name = "deleteMe"
    For Each ws In ThisWorkbook.Worksheets
    ws.Copy After:=wb.Sheets(wb.Sheets.Count)
    Next
    For Each ws In wb.Worksheets
    UsedRange.Formula = UsedRange.Value
    For Each sh In ws.Shapes
    sh.Delete
    Next
    Next
    For Each Link In wb.LinkSources(xlLinkTypeExcelLinks)
    wb.BreakLink Name:=Link, Type:=xlLinkTypeExcelLinks
    Next
    Application.DisplayAlerts = False
    wb.Sheets("deleteMe").Delete
    wb.SaveAs Replace(ThisWorkbook.FullName, ".xlsx", "_" & Format(Date, "yyyymmdd") & ".xlsx"), xlOpenXMLWorkbook
    Application.DisplayAlerts = True
    wb.Close False
    End Sub

    Nun erhalte ich immer den Fehler: Laufzeitfehler '424'

    Objekt erforderlich

    Auch zeigt es mir einen Fehler in der Zeile:
    UsedRange.Formula = UsedRange.Value

    Kann mir evt. jemand weiterhelfen?

    Vielen lieben Dank
    Lena

    Bitte keine fremden Threads für eigene Fragen kapern! Wenn schon auf das Original verlinken. In neues Thema verschoben. ~fufu

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „fufu“ ()

    VBA-Greenhorn schrieb:



    Nun erhalte ich immer den Fehler: Laufzeitfehler '424'

    Objekt erforderlich

    Auch zeigt es mir einen Fehler in der Zeile:
    UsedRange.Formula = UsedRange.Value

    Kann mir evt. jemand weiterhelfen?

    Vielen lieben Dank
    Lena


    Hi Lena,

    was mir auf Anhieb auffällt:

    Visual Basic-Quellcode

    1. For Each ws In wb.Worksheets
    2. ws.UsedRange.Formula = ws.UsedRange.Value
    3. For Each sh In ws.Shapes
    4. sh.Delete
    5. Next
    6. Next


    Visual Basic-Quellcode

    1. Dim Link as LinkFormat
    2. If Not Link Is Nothing Then
    3. For Each Link In wb.LinkSources(xlLinkTypeExcelLinks)
    4. wb.BreakLink Name:=Link, Type:=xlLinkTypeExcelLinks
    5. Next
    6. End If

    VBA-Greenhorn schrieb:

    Es handelt sich bereits um eine ".xlsx" -Datei
    Mit Code???

    Du kannst übrigens auch komprimiert abspeichern als ".xlsb".
    Teste mal, was du da sparst.

    VBA-Greenhorn schrieb:

    Nun erhalte ich immer den Fehler: Laufzeitfehler '424'
    Objekt erforderlich
    Auch zeigt es mir einen Fehler in der Zeile: UsedRange.Formula = UsedRange.Value
    Wenn der Code ausserhalb des Worksheets läuft, benötigst du für die sheet-internen Objekte die notwendige Referenz.
    Vergleiche Posts #18-#19


    cry.baby schrieb:

    was mir auf Anhieb auffällt:
    Ich verstehe nicht, was du uns damit sagen möchtest.

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    cry.baby schrieb:

    was mir auf Anhieb auffällt:
    Ich verstehe nicht, was du uns damit sagen möchtest.



    Der Code kann so nicht laufen ohne Bezug auf die UsedRange. Außerdem ist der Link nicht deklariert. Besser wäre so:

    Visual Basic-Quellcode

    1. Dim vLinks As Variant
    2. Dim lLink As Long
    3. vLinks = wb.LinkSources(xlLinkTypeExcelLinks)
    4. If Not IsEmpty(vLinks) Then
    5. For lLink = LBound(vLinks) To UBound(vLinks)
    6. wb.BreakLink _
    7. Name:=vLinks(lLink), _
    8. Type:=xlLinkTypeExcelLinks
    9. Next lLink
    10. End If

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „cry.baby“ ()