VBA清除模板不删除所有内容?

时间:2016-04-20 15:07:57

标签: excel vba excel-vba macros

我写了一个宏来清除我每天使用的excel模板的数据。我将复制的图像和文本放入模板中,保存,然后第二天使用宏清除它并重复该过程。我已经注意到一两个月之后文件已经变得非常大了。它大约是50KB,现在是18,317KB,数据量相同。这种增长是渐进的,而不是立即的。可能每天几百KB。

我已经检查了单元格中是否有任何格式,并且没有。我认为我的代码会删除每个工作表中除最后一个(包含非常少的数据)之外的所有单元格,但我不确定它是否正常工作。

ArrayList<Stop>

我的宏在某种程度上不会删除我模板的所有内容吗?或者它可能与电子表格的设置有关吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

尝试一下,让我知道它是否有帮助:

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

除了一些代码优化之外,上述代码与您之间的主要区别在于删除了最后一行之后的“看似”空行。我遇到的问题是:如果正在使用一行,然后清除内容,那么(有时)Excel仍会“保留”保存文件中的空行。在上面的代码中,我删除了所有这些行,并且(在我的情况下)因此能够大大减少我的一些旧文件。

答案 1 :(得分:0)

我发现当我将文件类型从.xls切换到.xlsm时,文件大小立即缩小并保持较小。从帖子中我读到.xls文件有时会有数据泄漏。我想这正是导致文件大小稳步增长的原因。我并行使用了.xls和.xlsm文件,并测量了6天的文件大小。回归如下:

这是.xlsm的回归:

enter image description here

这是.xls的回归:

enter image description here

正如您所看到的,.xls文件每天增加760 KB,具有非常高的重要性。

我的结论是它不是代码本身,而是基于文件保存的类型