VBA 的大文件大小复制范围
Large File Size Copy Ranges with VBA
我有一个例程,它通过生成对旧 sheet 的单元格引用来复制 sheet。我的问题是,当我 运行 在一个大小为 280KB 的工作簿中的三个 sheet 上执行此例程时,它会膨胀到 80MB。如果我复制并粘贴 sheet 值以删除公式,工作簿将保持相同大小。如果我删除 sheets 并保存它 returns 到它的原始大小。 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
XLSX 文件将单元格内容存储为字符串。但是他们不会很好地清理自己。因此,如果您删除某些内容,它并不总是会减小文件大小。
如果您只是复制 sheet,它不会变得像您为所有单元格生成 link 一样大。那是因为每个 link 都存储为一个单独的字符串。
http://www.ozgrid.com/Excel/ExcelProblems.htm
很可能原始 sheet 有一些修改,直到最后一行。然后,当您将其复制为 links 时,它会变得疯狂,因为它会生成数百万个 links。检查 maxColumns 和 maxRows 的值。
如果要减小文件大小,需要从 sheet 中删除额外的行或列,
然后保存它。文件大小将减少。
例如下面的快照,之前我有 22 条记录,虽然我删除了一些记录,但空单元格仍然影响文件大小。
怎么知道呢,CTRL+End,它停的单元格会告诉你。
删除那些空行或列将减小文件大小。
我有一个例程,它通过生成对旧 sheet 的单元格引用来复制 sheet。我的问题是,当我 运行 在一个大小为 280KB 的工作簿中的三个 sheet 上执行此例程时,它会膨胀到 80MB。如果我复制并粘贴 sheet 值以删除公式,工作簿将保持相同大小。如果我删除 sheets 并保存它 returns 到它的原始大小。 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
XLSX 文件将单元格内容存储为字符串。但是他们不会很好地清理自己。因此,如果您删除某些内容,它并不总是会减小文件大小。
如果您只是复制 sheet,它不会变得像您为所有单元格生成 link 一样大。那是因为每个 link 都存储为一个单独的字符串。
http://www.ozgrid.com/Excel/ExcelProblems.htm
很可能原始 sheet 有一些修改,直到最后一行。然后,当您将其复制为 links 时,它会变得疯狂,因为它会生成数百万个 links。检查 maxColumns 和 maxRows 的值。
如果要减小文件大小,需要从 sheet 中删除额外的行或列, 然后保存它。文件大小将减少。
例如下面的快照,之前我有 22 条记录,虽然我删除了一些记录,但空单元格仍然影响文件大小。 怎么知道呢,CTRL+End,它停的单元格会告诉你。
删除那些空行或列将减小文件大小。