簡體   English   中英

Access VBA-在較大范圍內更改Excel單元格值的更快方法?

[英]Access VBA - faster way to change Excel cell values across a large range?

我在Access中有一些VBA代碼,可以從Excel工作表中獲取一系列單元格,然后將它們從數字轉換為日期。 例如,范圍為H1:Y25000

Public Sub FixDates(theRange as Range)

Dim RangeCell as Range

For Each RangeCell In theRange
    If IsNumeric(RangeCell.Value) And RangeCell.Value > 0 And Not IsEmpty(RangeCell.Value) Then
        lngDate = CLng(RangeCell.Value)
        RangeCell.Value = DateAdd("d", lngDate -1, "1/1/1968")
    End If
Next RangeCell

End Sub

該代碼似乎可以正常工作,但是要花很長時間。 可以這樣寫以更快地運行嗎? 我正在閱讀有關使用Variant而不是Range的信息,但我無法弄清楚。

哦,給Sub打電話的時候,我使用了類似的方法

path = "C:\myfile.xlsx"
Set xlApp = CreateObject("Excel.Application")
Set xlWbk = xlApp.Workbooks.Open(path)
Set xlWks = xlWbk.Worksheets(1)
lastRow = xlWks.Range("A1").End(xlDown).Row
FixDates (xlWks.Range("H1:Y" & lastRow))

謝謝!

您可以簡單地將范圍分配給一個變量,該變量將創建一個數組-看起來像下面的代碼-您應該添加適當的錯誤處理:

Public Sub FixDates(theRange as Range)

    Dim data as Variant
    Dim i as Long
    Dim j as Long
    Dim lngDate as Long

    data = theRange

    For i = LBound(data, 1) to UBound(data, 1)
        For j = LBound(data, 2) to UBound(data, 2)
            If IsNumeric(data(i, j)) Then
                If data(i, j) > 0 Then
                    lngDate = CLng(data(i, j))
                    data(i, j) = DateAdd("d", lngDate - 1, "1/1/1968")
                End If
            End If
        Next j
    Next i

    theRange = data

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM