我们有一个大型Excel应用程序,它使用VBA,命名范围,ADODB。它的主要功能是连接到Oracle,将数据集加载到Excel中,允许用户编辑它并将其保存回Oracle。该应用程序在Excel 2003中,但我们有意义升级到Excel 2007一段时间。在粘贴到Excel 2003应用程序时,我们现在面临“格式太多”的错误,这是升级的一个很好的理由。
将Excel 2003保存为Excel 2007并运行Oracle加载VBA后,数据加载大约需要两倍的时间。我们实际上可以看到正在加载的记录,而在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
答案 0 :(得分:0)
内置CopyFromRecordset
方法往往比手动填充单元格快得多。用法示例:
Worksheets("Sheet1").Cells(2, 1).CopyFromRecordSet RECSET
将数据复制到工作表后,可能会修复日期/日期时间格式问题。
有关此方法的更多详细信息,请here
答案 1 :(得分:0)
首先尝试在填充工作表时关闭屏幕更新并将计算设置为手动。
我猜你现在没有这样做,因为你提到看着记录逐行填充。