我們有一個使用VBA的大型Excel應用程序,命名範圍爲ADODB。它的主要功能是連接到Oracle,將數據集加載到Excel中,允許用戶編輯它並將其保存回Oracle。該應用程序在Excel 2003中,但我們有意將其升級到Excel 2007一段時間。當粘貼到Excel 2003應用程序中時,我們現在面臨着「格式太多」的錯誤,這是任何升級的好理由。通過ADODB將數據從Oracle加載到Excel中 - 性能問題
將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
您是否嘗試關閉screenupdating並在填充工作表時將claration設置爲手動?我猜你沒有提到看過記錄是逐行填充的。 – 2013-03-06 01:36:07
這似乎加快了相當多,謝謝!我假設原作者已經想到了這個東西。現在我遇到的問題是,下拉列表中填充了空格。我需要進一步研究,如果沒有問題,我可以在此主題中發佈進一步的問題。 – 2013-03-06 02:13:22
@蒂姆威廉斯,如果您發表評論作爲答案,我會接受它,因爲它解決了我的直接問題。 – 2013-03-12 01:16:53