excel工作簿的大小是否影响运行vba代码?

excel工作簿的大小是否影响运行vba代码?,excel,vba,Excel,Vba,excel工作簿的大小是否影响VBA代码的运行?我已将VBA代码写入大小为200 MB的excel工作簿。excel工作簿具有“浏览”按钮,这些“浏览”按钮会选择另一个excel文件并执行操作,并将部分所需内容写回大小为200 MB的文件。但是这些操作太慢了,需要8到13分钟。这些excel工作簿包含图表、图表和更多模块,16张工作表和透视表很多东西。(这些会影响vba代码的运行吗?) 但我在另一个新的excel工作簿上写的代码是一样的,它的大小是200KB,有相同的浏览按钮和所有这些东西,在这

excel工作簿的大小是否影响VBA代码的运行?我已将VBA代码写入大小为200 MB的excel工作簿。excel工作簿具有“浏览”按钮,这些“浏览”按钮会选择另一个excel文件并执行操作,并将部分所需内容写回大小为200 MB的文件。但是这些操作太慢了,需要8到13分钟。这些excel工作簿包含图表、图表和更多模块,16张工作表和透视表很多东西。(这些会影响vba代码的运行吗?)


但我在另一个新的excel工作簿上写的代码是一样的,它的大小是200KB,有相同的浏览按钮和所有这些东西,在这里,它花了4秒钟完成。我想知道出了什么问题。使用for循环对大文件是有害的,但我无法在代码中使用没有循环的情况下执行操作。如果for循环是有害的,那么它甚至会影响200KB的大小,但没有危险!现在我必须做什么?

在这样大的文件中,即使只是读取和/或写入文件的操作也需要大量时间,许多中间操作也可能会受到影响。

在这样大的文件中,即使是读取和/或写入文件的操作也需要大量时间,许多中间操作也可能受到影响。

确保在写入工作簿的代码之前使用了
应用程序。屏幕更新=False
应用程序。计算=xlManual
。(然后在末尾重置它们)

此外,对一个范围的每次读写都会有很大的开销,因此将一大块数据读入变量通常要快得多

Dim vArr as Variant
vArr=Worksheets("Sheet1").Range("A1:Z9999").Value2

'Manipulate the resulting array.
For j = LBound(vArr) To UBound(vArr)
   For k = LBound(vArr,2) To UBound(vArr,2)
      vArr(j,k)=vArr(j,k)*2
   Next k
Next j

'And then write it back to its destination.
Worksheets("Sheet2").Range("A1:Z9999")=vArr

确保在写入工作簿的代码之前使用了
Application.screenUpdate=False
Application.Calculation=xlManual
。(然后在末尾重置它们)

此外,对一个范围的每次读写都会有很大的开销,因此将一大块数据读入变量通常要快得多

Dim vArr as Variant
vArr=Worksheets("Sheet1").Range("A1:Z9999").Value2

'Manipulate the resulting array.
For j = LBound(vArr) To UBound(vArr)
   For k = LBound(vArr,2) To UBound(vArr,2)
      vArr(j,k)=vArr(j,k)*2
   Next k
Next j

'And then write it back to its destination.
Worksheets("Sheet2").Range("A1:Z9999")=vArr

独立于宏,一个巨大的文件需要时间来加载和保存!这很明显。这难道不能证明时间差的合理性吗?你的代码有可能被加速吗?可能值得发布花费时间最多的代码部分。您还可以尝试从excel工作簿中删除不必要的格式:删除显然未使用的行和列等。您可能会感到惊讶。我最近用它把一个30MB的文件压缩到200KB。独立于宏,一个巨大的文件需要时间来加载和保存!这很明显。这难道不能证明时间差的合理性吗?你的代码有可能被加速吗?可能值得发布花费时间最多的代码部分。您还可以尝试从excel工作簿中删除不必要的格式:删除显然未使用的行和列等。您可能会感到惊讶。我最近用它把一个30MB的文件压缩到200KB。