2011-09-19 133 views
0

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

但是我写的另一个新的excel工作簿的代码是大小200KB与相同的浏览按钮和所有的东西,这里需要4秒完成。我不知道怎么回事。使用for循环对于大文件是有害的,但是我无法在我的代码中没有循环的情况下执行我的操作。如果for循环有害,那么它甚至应该影响200KB的大小,但没有危险!我现在必须做什么?

+1

独立于宏观的,一个巨大的文件需要时间来加载和保存!这很明显。这不正是时间差异的理由吗? –

+1

您的代码可能会加速吗?可能值得张贴花费时间最多的代码部分。 – Fionnuala

+0

你也可以尝试从你的excel工作簿中删除不必要的格式:删除显然未使用的行和列等...你可能会感到惊讶。我最近用一个30MB的文件减少到200KB。 –

回答

2

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

另外,每次读取和写入Range都有很大的开销,所以通常读取一大块数据到一个变量的速度要快得多。

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 
1

即使仅仅读取和/或写入文件的操作在如此大的文件中花费大量时间,许多中间操作也可能受到影响。

相关问题