首页 文章

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

提问于
浏览
3

我有一个例程,通过生成旧工作表的单元格引用来复制工作表 . 我的问题是,当我在一个大小为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 回答

  • 1

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

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

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

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

  • 2

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

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

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

    enter image description here

相关问题