Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 3799|回復(fù): 6
打印 上一主題 下一主題

[窗體] 一樣的代碼在不同的環(huán)境下快慢差異太大

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2020-4-18 11:31:14 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
目的:
從Access中復(fù)制數(shù)據(jù)到Excel中,
并設(shè)置單元格字體格式
(同一個(gè)單元格中部分字符,不同字體,本例中是單元格中第7,第8兩個(gè)字體設(shè)為7號(hào)楷體)
如果直接在Access中操作,需要8秒中(僅設(shè)置格式部分),
而同樣(幾乎一致)的代碼,在Excel中運(yùn)行,則只需1秒,甚至不到1秒.
我想Access中的代碼應(yīng)該是寫的不合理,
大家指點(diǎn)一下,如何優(yōu)化代碼?


Excel中的代碼(只需1秒)
  1. Private Sub CommandButton1_Click()
  2.     Dim R As Long, C As Long, I As Long, J As Long
  3.     Dim t As Date
  4. t = Now
  5.     R = Rcount
  6.     C = Ccount
  7.     Application.ScreenUpdating = False
  8.     For I = 4 To R
  9.         For J = 1 To C
  10.             With Sheets("A").Cells(I, J).Characters(7, 2).Font
  11.                 .Name = "楷體"
  12.                 .FontStyle = "常規(guī)"
  13.                 .Size = 6
  14.             End With
  15.         Next
  16.     Next
  17.     Application.ScreenUpdating = True
  18.     t = t - Now
  19.     MsgBox t
  20. End Sub
復(fù)制代碼

Access中的代碼(需要8秒-10秒)
  1. Private Sub Command0_Click()
  2.     Dim XLA As New Excel.Application
  3.     Dim rs As New ADODB.Recordset
  4.     Dim XLB As Workbook
  5.     Dim XLS As Worksheet
  6.     Dim I As Integer, J As Integer
  7.     Dim R As Long, C As Long
  8.     Dim t As Date
  9.     Set XLB = Nothing
  10.     Set XLS = Nothing
  11.     Set XLB = XLA.Workbooks().Open(CurrentProject.Path & "\Try.xlsb", , True)
  12.     XLB.SaveAs CurrentProject.Path & "" & Format(Now, "yyyy-mm-dd hh nn ss") & ".xlsb"   '另存為不同的文件名"
  13.     '---------------
  14.     '導(dǎo)出Excel
  15.     '---------------
  16.     rs.Open "B", CurrentProject.Connection, adOpenKeyset, adLockReadOnly
  17.     Set XLS = XLB.Worksheets("A")
  18.     XLS.Activate
  19.     For I = 0 To rs.Fields.Count - 1
  20.         XLS.Cells(3, 1 + I) = rs.Fields(I).Name
  21.     Next
  22.     XLS.Range("A4").CopyFromRecordset rs
  23.     XLS.Range(XLS.Cells(3, 1), XLS.Cells(rs.RecordCount + 3, rs.Fields.Count)).Borders.LineStyle = xlContinuous
  24.     R = rs.RecordCount + 3
  25.     C = rs.Fields.Count
  26.     rs.Close
  27.     t = Now
  28.     XLA.ScreenUpdating = False
  29.     For I = 4 To R
  30.         For J = 1 To C
  31.             With XLS.Cells(I, J).Characters(7, 2).Font
  32.                 .Name = "楷體"
  33.                 .FontStyle = "常規(guī)"
  34.                 .Size = 7
  35.             End With
  36.         Next
  37.     Next
  38.     XLA.ScreenUpdating = True
  39.     t = t - Now
  40.     MsgBox t
  41.     XLB.Save
  42.     XLA.Visible = True
  43.     XLA.WindowState = xlMaximized
  44.     Set rs = Nothing
  45.     Set XLS = Nothing
  46.     Set XLB = Nothing
  47.     Set XLA = Nothing
  48. End Sub
復(fù)制代碼
另外以前感覺Excel打開并在屏幕上可見才需要XLA.ScreenUpdating = False
現(xiàn)在發(fā)現(xiàn),即便Excel在內(nèi)存里打開,并沒有顯示在屏幕上,如果不加XLA.ScreenUpdating = False
更慢,而且是非常慢,大家可以試試.

附上附件,請(qǐng)大家?guī)兔?yōu)化優(yōu)化.






本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號(hào)?注冊(cè)

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2020-4-18 14:08:47 | 只看該作者
建議你可在每個(gè)重要的計(jì)算前面加處 Timer -dblStartTime
來(lái)計(jì)算一下這些代碼所花的時(shí)間,從而知道哪一句占時(shí)最長(zhǎng)?杀A粜(shù)位,這樣時(shí)間更精確
3#
 樓主| 發(fā)表于 2020-4-18 14:59:26 | 只看該作者
主要是設(shè)置字體這一部分的對(duì)比

點(diǎn)擊這里給我發(fā)消息

4#
發(fā)表于 2020-4-19 09:40:28 | 只看該作者
會(huì)不會(huì)是因?yàn)樵O(shè)置字體 需要將excel顯示出來(lái)?
5#
 樓主| 發(fā)表于 2020-4-19 21:00:01 | 只看該作者
可能,否則關(guān)閉屏幕刷新作用不可能這么大
6#
發(fā)表于 2020-4-19 22:11:40 | 只看該作者
需要格式化輸出Excel時(shí),我通常是預(yù)設(shè)好格式,然后導(dǎo)出數(shù)據(jù),再引用即可。
不過(guò)你這個(gè)代碼里有個(gè)地方比較麻煩,就是每個(gè)單元格的某2個(gè)字符改為楷體。預(yù)設(shè)格式不太好處理這部分。
7#
 樓主| 發(fā)表于 2020-4-19 23:33:58 | 只看該作者
roych 發(fā)表于 2020-4-19 22:11
需要格式化輸出Excel時(shí),我通常是預(yù)設(shè)好格式,然后導(dǎo)出數(shù)據(jù),再引用即可。
不過(guò)你這個(gè)代碼里有個(gè)地方比較 ...

是的,沒辦法預(yù)設(shè)
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 06:21 , Processed in 0.119795 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表