我们有一个使用 VBA、命名范围、ADODB 的大型 Excel 应用程序。它的主要功能是连接到 Oracle,将数据集加载到 Excel 中,允许用户对其进行编辑并将其保存回 Oracle。该应用程序在 Excel 2003 中,但我们一直想升级到 Excel 2007。我们现在在粘贴到 Excel 2003 应用程序时遇到“格式太多”错误,这是升级的一个很好的理由。
将 Excel 2003 保存为 Excel 2007 并运行 Oracle 加载 VBA 后,加载数据大约需要两倍的时间。我们实际上可以看到正在加载的记录,而在 Excel 2003 版本中,工作表中的记录只是压缩了页面。
所以我的第一个目标是提高这个性能。有两种方法可以做到这一点:
- 找出 Excel 2007 比 Excel 2003 慢的原因并修复它
- 改进数据加载例程
关于第 1 项,我对其他任何人都感兴趣,他们可以阐明为什么在 2007 年与 2003 年相比,这样做需要更长的时间
在第 2 项上,我正在考虑使用 GetString 将记录集转换为字符串并将其粘贴到工作表上(而不是一次添加一个单元格)。我也对以前做过这件事的人感兴趣。
从 ADODB 转移到 Excel 工作表代码的一些经过清理的代码如下:
While Not RECSET.EOF
' loop thru columns returned in sql row
sExtractRec = ""
For i = 1 To Column_Names.Count
vColumnName = Column_Names(i)
vItem = RECSET(vColumnName)
vItem = formatIfDate(vItem, vColumnName) ' format if a date or datetime
currCell.Value = vItem
Set currCell = currCell.Offset(0, 1)
If Not isNull(vItem) Then
vItem = IIf(vItem = "", "", Replace(vItem, ";", " "))
End If
sExtractRec = sExtractRec & vItem & ";"
Next i
Set currCell = currCell.Offset(1, 0 - Column_Names.Count) ' goto first cell next row
iRowCnt = iRowCnt + 1
RECSET.MoveNext
If bWriteExtractFile Then
Print #iExtractFile, sExtractRec
End If
Wend