访问VBA – 在更大范围内更快地更改Excel单元格值?

我有一些Access中的VBA代码,从Excel工作表中获取一系列单元格,然后将它们从一个数字转换为一个date。 例如,范围将是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)) 

谢谢!

您可以简单地将范围分配给一个variables,这将创build一个数组 – 它看起来像下面的代码 – 您应该添加适当的error handling:

 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