通过VBA提高获取或设置单元格中的值的性能

我设法连接到一个Web服务和检索数据,最后将其插入到工作表中。

看起来像当我执行这个最后的操作时,表单得到焦点,屏幕一直闪烁,直到结束,这对用户来说有点尴尬,而且会损耗性能。 我们正在谈论的是,插入大约1000行与4个不同的parsing列持续约5秒钟。

有没有办法做到这一点“的背景”? 我注意到,基本上我所做的每一个动作(比如读取值或设置它们)都要求将焦点放在具体的表格上,所以我基本上将焦点返回到一旦一切都结束就调用过程的表单。

我的代码如下:

For i = 3 To UBound(Data) - 1 If (IsNullOrWhiteSpace(Data(i))) Then Exit Sub End If splitted = Split(Data(i), ";") For j = 0 To UBound(splitted) Cells(i - 1, j + 1).Value = splitted(j) Next Next 

非常感谢,我是这个VBA世界的新手。

对于初学者来说,地点:

 Application.Calculation = xlCalculationManual 

在你的Sub的开头,

 Application.Calculation =xlCalculationAutomatic 

End Sub之前

那么让我们来看看更进一步的三个步骤:


第一步可能会取代:

 For j = 0 To UBound(splitted) Cells(i - 1, j + 1).Value = splitted(j) Next 

有:

 Cells(i - 1, 1).Resize(, UBound(splitted) + 1).Value = Application.Transpose(Application.Transpose(splitted)) 

让你一笔一笔地写完整行


第二步可能是使用数组并将二维数组的内容写入一次:

 Dim Data As Variant Dim nRows As Long, nCols As Long, i As Long, j As Long ' >>>> here your code code to fill 'Data' variant array <<<< ReDim notNullData(1 To UBound(Data) - 3) As Variant '<--| size 'notNullData' 1D Variant array to the maximum possible rows For i = 3 To UBound(Data) - 1 If IsNullOrWhiteSpace(Data(i)) Then Exit For '<--| exit loop at the first null or empty 'Data' value nRows = nRows + 1 '<--| update valid rows counter notNullData(nRows) = Split(Data(i), ";") '<--| fill 'notNullData' array with an array from current 'Data' row content If UBound(notNullData(nRows)) > nCols Then nCols = UBound(notNullData(nRows)) '<--| update maximum n° of columns to be written Next ReDim dataToWrite(1 To nRows, 1 To nCols + 1) As Variant '<--| size 'dataToWrite' 2D Variant array to 'Data' array valid rows number and calculated maximum nr of columns 'fill 2D 'dataToWrite' array processing 'notNullData' 1D array For i = 1 To nRows For j = 0 To UBound(notNullData(i)) dataToWrite(i, j + 1) = notNullData(i)(j) Next Next 'write 2D 'dataToWrite' array in one shoit Cells(1, 1).Resize(nRows, nCols + 1).Value = dataToWrite 

第三步将涉及IsNullOrWhiteSpace()函数