VBA中Sheets(String)和Sheets(Long)的速度

概述

Sheets(String)Sheets(Long)這兩種調用方法,都可以從Sheets集合中返回一個工作表。既然這兩個功能相同,那麼速度就成爲了選擇的關鍵。

測試速度的代碼

Private Declare Function QueryPerformanceCounter Lib "KERNEL32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "KERNEL32" (lpFrequency As Currency) As Long

Private m_Frequency   As Currency
Private m_Start       As Currency
Private m_Now         As Currency
Private m_Available   As Boolean

Sub TestSpeet()

m_Available = (QueryPerformanceFrequency(m_Frequency) <> 0)
If Not m_Available Then
Debug.Print "Performance Counter not available"
End If

Dim i As Long
Dim a As String

Cells.NumberFormatLocal = "@"
For i = 1 To 100000 Step 1
    Cells(i, 1) = CStr(i)
Next i

QueryPerformanceCounter m_Start

For i = 1 To 100000 Step 1
    ' 下面兩句中選一句執行
    a = Sheets(1).Cells(i, 1)        ' Sheets(Long)
    a = Sheets("Sheet1").Cells(i, 1) ' Sheets(String)
Next i

QueryPerformanceCounter m_Now

Elapsed = 1000 * (m_Now - m_Start) / m_Frequency
Debug.Print Format(Elapsed, "#.0000")
End Sub

測試結果

測試結果的時間單位是毫秒。

第幾次測試 Sheets(Long) Sheets(String)
1 609.5660 748.9382
2 611.6371 748.7220
3 611.5759 750.5656
4 611.3749 749.9504
5 609.5672 747.9031
6 611.0058 750.5208
7 610.2335 746.6654
8 611.2921 750.4843
9 609.6433 745.1653
10 612.6212 748.4685

結論

使用Sheets(String)Sheets(Long)要慢。

所以應該優先使用Sheets(Long)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章