【发布时间】:2016-02-22 09:26:59
【问题描述】:
我一直试图在 VBA 中遍历一堆大的 .csv 文件。它们中的每一个大约为 50MB。在每次迭代中,我都会打开一个新的 CSV 来操作数据,但是当 .csv 打开时,会出现一条下载消息,指出文件正在打开,并且进度条总是在 VBA 等待完成时卡住。
实际上 .csv 是打开的,因为如果我在进度条上单击“取消”,代码会继续运行良好,但我必须在每次迭代时执行手动操作。
我的猜测是 VBA 在文件未打开或类似的情况下进入下一步,所以如果我执行睡眠或类似的操作,它可能会起作用,但我尝试的方法现在不起作用。 (我已经尝试过 Application.EnableEvents = False)。这是我的代码:
Sub GetOptions()
Application.DisplayAlerts = False
Application.EnableEvents = False
Set Dates = Sheets("Dates")
Set Res = Sheets("Options")
Dim dateToday As Date
ETF = "SPY"
nrows = Dates.Cells(Rows.Count, 1).End(xlUp).Row
For i = 708 To nrows
If Dates.Cells(i, 2).Value = "B" Then
dateToday = Dates.Cells(i, 1).Value
dateYear = Year(dateToday)
stringOpening = "P:\Options Database\CSV\" & dateYear & "\bb_" & dateYear & "_" & GetMonth(dateToday) & "\bb_options_" & Format(dateToday, "yyyymmdd") & ".csv"
Workbooks.Open stringOpening, UpdateLinks:=0, ReadOnly:=True
Set Options = Workbooks("bb_options_" & Format(dateToday, "yyyymmdd")).Sheets(1)
Do things...
Workbooks("bb_options_" & Format(dateToday, "yyyymmdd")).Close SaveChanges:=False
End If
Next i
End Sub
【问题讨论】:
-
我建议你先用小文件测试和完成你的代码。让您的代码在一组小(或中等)文件上正确运行并适应它,然后才转移到大文件,这将更容易评估问题。
-
Thx 但我已经在较小的文件上尝试过它并且它可以正常工作,它只会在大文件(> 30-40MB)时卡住
-
你的P盘映射到什么地方?网络文件夹,还是别的什么?