2016-04-20 10 views
0

Ich habe ein Makro geschrieben, um die Daten einer Excel-Vorlage zu löschen, die ich jeden Tag verwende. Ich kopiere Bilder und Text in die Vorlage, speichere sie und verwende am nächsten Tag das Makro, um es zu löschen und den Vorgang zu wiederholen. Ich habe bemerkt, dass die Datei nach ein oder zwei Monaten extrem groß geworden ist. Es war ungefähr 50 KB und ist jetzt 18.317 KB mit ungefähr der gleichen Menge an Daten. Der Anstieg erfolgte schrittweise, nicht unmittelbar. Wahrscheinlich ein paar hundert KB pro Tag.VBA zu löschen Vorlage nicht alles löschen?

Ich habe überprüft, ob es irgendwelche Formatierung in den Zellen gibt, und es gibt keine. Ich denke, mein Code löscht alle Zellen in jedem Blatt mit Ausnahme der letzten (die sehr wenig Daten enthält), aber ich bin mir nicht sicher, ob es funktioniert.

Sub Reset_Template() 
    Dim WS_Count As Integer 
    Dim I As Integer 
    WS_Count = ActiveWorkbook.Worksheets.Count - 1 

    For I = 1 To WS_Count 
    Sheets(I).Select 
    If ActiveSheet.AutoFilterMode Then 
    Cells.AutoFilter 
    End If 
    Sheets(I).Select 
    ActiveSheet.DrawingObjects.Select 
    Selection.Delete 
    Cells.Select 
    Range("C67").Activate 
    Selection.Delete Shift:=xlUp 
    Cells.Select 

    Next I 

    Sheets(1).Select 
    Cells.Select  
End Sub 

Löscht mein Makro irgendwie nicht alle Inhalte meiner Vorlage? Oder könnte es etwas mit den Einstellungen der Tabelle zu tun haben?

Vielen Dank.

+2

gespeichert Wäre es nicht einfacher, die Vorlage als ‚Read Only‘ zu speichern Datei, so dass Sie don 't Speichere jeden Tag darüber, aber speichere stattdessen eine Kopie davon mit den kopierten Bildern/Texten, und wenn du die Tabelle dann erneut eingibst, musst du sie nicht mehr zurücksetzen, da sie sich in dem Zustand befinden, in dem du sie verlassen hast. – Jordan

+0

Das ist eine gute Idee. Leider muss ich aufgrund unserer Prozesse in meiner Geschäftseinheit jeden Tag über dieselbe Datei speichern. – Jarom

Antwort

0

Ich fand, dass, wenn ich den Dateityp von .xls auf .xlsm umgeschaltete die Dateigröße sofort geschrumpft und klein blieb. Von einem Posting habe ich gelesen, dass .xls Dateien manchmal Datenlecks haben. Ich stelle mir vor, dass dies zu der stetig wachsenden Dateigröße beigetragen hat. Ich habe die .xls- und .xlsm-Dateien parallel verwendet und die Dateigröße für 6 Tage gemessen. Die Regressionen sind unten:

Dies ist die Regression für XLSM ist:

enter image description here

Dies ist die Regression für .xls:

enter image description here

So wie Sie sehen können, die Die .xls-Datei erhöht sich um 760 KB pro Tag mit einer sehr hohen Signifikanz.

Meine Schlussfolgerung ist, dass es nicht der Code selbst, sondern auf der Art aus, dass die Datei als

0

Geben Sie diesem einen Versuch und lassen Sie mich wissen, wenn es hilft:

Option Explicit 

Sub Reset_Template() 

Dim I As Integer 
Dim WS_Count As Integer 
Dim lngLastRow As Long 
Dim lngLastColumn As Long 

WS_Count = ThisWorkbook.Worksheets.Count - 1 

For I = 1 To WS_Count 
    lngLastRow = 0: lngLastColumn = 0 
    With ThisWorkbook.Worksheets(I) 
     If .AutoFilterMode Then .AutoFilter 
     .DrawingObjects.Delete 
     .Range("C67").Delete Shift:=xlUp 
     On Error Resume Next 
     lngLastRow = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
     lngLastColumn = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 
     On Error GoTo 0 
     .Rows(lngLastRow + 1 & ":" & .Rows.Count).EntireRow.Delete 
     .Columns(lngLastColumn + 1 & ":" & .Columns.Count).EntireColumn.Delete 
    End With 
Next I 

ThisWorkbook.Worksheets(1).Activate 
ThisWorkbook.Worksheets(1).Cells.Select 

End Sub 

Neben einigen Code der Hauptunterschied zwischen dem obigen Code-Optimierungen und dein ist, dass „scheinbar“ leere Zeilen nach dem letzten sind gelöscht werden. Das Problem, auf das ich gestoßen bin, ist Folgendes: Wenn eine Zeile verwendet wird und der Inhalt dann gelöscht wird, "behält" Excel (manchmal) die leere Zeile in der Sicherungsdatei. Im obigen Code lösche ich alle diese Zeilen und konnte (in meinem Fall) einige meiner älteren Dateien drastisch reduzieren.

+0

Das macht Sinn. Ich habe es auf meiner derzeit großen Datei ausgeführt und es hat es nicht kleiner gemacht. Vielleicht wird dadurch eine bereits große Datei nicht kleiner, aber wird eine kleine Datei davon abgehalten, groß zu werden? In diesem Fall kann ich eine neue Vorlage erstellen und dieses Makro täglich ausführen. – Jarom

+0

Ich habe nur einen Code hinzugefügt, um veraltete Spalten zu entfernen. Wenn das nicht hilft, dann sollten Sie dies versuchen: http://stackoverflow.com/questions/17527917/how-to-reduce-a-huge-excel-file. Um Ihre Frage zu beantworten: Der obige Code kann die Dateigröße reduzieren, wenn ungenutzter Speicherplatz reserviert ist. Dies sollte für kleine Dateien (um sie klein zu halten) und große Dateien (um sie kleiner zu machen) gleich funktionieren.Aber wenn dieser Code nicht hilft, dann gibt es vielleicht andere Ursachen. – Ralph