使用VBA的大文件大小复制范围

时间:2015-12-04 01:20:25

标签: excel vba excel-vba excel-2007

我有一个例程,通过生成对旧工作表的单元格引用来复制工作表。我的问题是,当我在一个大小为280KB的工作簿中的三张纸上运行这个例程时,它会膨胀到80MB。如果我复制并粘贴工作表值以删除公式,工作簿保持相同的大小。如果我删除了工作表并保存,则返回原始尺寸。在VBA处理导致此问题的内存的方式中,我是否遗漏了一些东西?我已经尝试在例行程序结束时将所有变量设置为空。

Public Sub CopySheetFormulas(inputSheet As Worksheet, outputSheet As Worksheet)
Dim rowCounter As Long
Dim columnCounter As Long
Dim maxRow As Long
Dim maxColumn As Long

maxColumn = inputSheet.Cells.Find(What:="*", After:=inputSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column

Debug.Print "Max Column: " & maxColumn

maxRow = inputSheet.Cells.Find(What:="*", After:=inputSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row

Debug.Print "Max Row: " & maxRow

inputSheet.Range("A1").Resize(maxRow, maxColumn).Copy

With outputSheet
    .Activate
    .Range("A1").Select
    .Paste Link:=True
End With

End Sub

2 个答案:

答案 0 :(得分:2)

如果要减小文件大小,则需要从工作表中删除其他行或列, 然后保存它。文件大小将减少。

例如下面的快照,以前我有22条记录,虽然我已经删除了一些记录,但空单元格仍然贡献了文件大小。 如何知道它,CTRL + End,它停止的单元格会告诉你。

删除那些空行或列将减小文件大小。

enter image description here

答案 1 :(得分:1)

XLSX文件将单元格内容存储为字符串。但他们自己不善于清理。因此,如果删除某些内容,则不会总是减小文件大小。

如果您只是复制表单,它不应该像您生成所有单元格的链接一样大。那是因为每个链接都存储为一个单独的字符串。

http://www.ozgrid.com/Excel/ExcelProblems.htm

原始工作表很可能会有一些修改到达最后一行。然后,当你将它复制为链接时,它会发疯,因为它会产生数百万个链接。检查maxColumns和maxRows的值。

相关问题