使用VBA的大文件大小复制范围
我有一个例程,通过生成对旧工作表的单元格引用来复制工作表。我的问题是,当我在一个280KB大小的工作簿中的三张纸上运行这个例程时,它会膨胀到80MB。如果复制并粘贴工作表值以删除公式,工作簿的大小将保持不变。如果我删除图纸并保存,它将恢复为原始大小。VBA处理内存的方式中是否缺少导致此问题的内容?我已经尝试在例程结束时将所有变量设置为零使用VBA的大文件大小复制范围,vba,excel,excel-2007,Vba,Excel,Excel 2007,我有一个例程,通过生成对旧工作表的单元格引用来复制工作表。我的问题是,当我在一个280KB大小的工作簿中的三张纸上运行这个例程时,它会膨胀到80MB。如果复制并粘贴工作表值以删除公式,工作簿的大小将保持不变。如果我删除图纸并保存,它将恢复为原始大小。VBA处理内存的方式中是否缺少导致此问题的内容?我已经尝试在例程结束时将所有变量设置为零 Public Sub CopySheetFormulas(inputSheet As Worksheet, outputSheet As Worksheet)
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文件将单元格内容存储为字符串。但是他们自己打扫得不好。因此,如果删除某些内容,它并不总是会减小文件大小 如果只是复制工作表,它就不会像生成指向所有单元格的链接那样大。这是因为每个链接都存储为单独的字符串
很可能原始工作表的某些修改一直延伸到最后一行。然后,当你把它复制成链接时,它会变得疯狂,因为它正在生成数以百万计的链接。检查maxColumns和maxRows的值。如果要减小文件大小,需要从工作表中删除额外的行或列, 然后保存它。文件大小将减小 例如,在快照下面,以前我有22条记录,虽然我删除了一些记录,但空单元格仍然影响文件大小。 如何知道它,CTRL+End,它停止的单元格会告诉你 删除这些空行或空列将减少文件大小
尝试此
outputSheet.Range(“A1”).Resize(maxRow,maxColumn)。Value=inputSheet.Range(“A1”).Resize(maxRow,maxColumn)
,以代替代码的最后6行。maxColumn和maxRow的值是什么?它们是您期望的值吗?文件为二进制格式。我来看看那个链接,明白了!原始文件有4 x 10000个单元格中的数据,但工作表认为有10000 x 10000中的数据。但很奇怪,空单元格会占用这么多内存。每个被修改的单元格都必须在文件结构中描述;这会使文件变大。但是当你生成一个链接到每个单元格时,每个链接都会占用更多的空间。所以你得到了一个膨胀的文件。