|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 kohaddf 于 2015-11-28 11:30 编辑
各位大神,因为工作上要处理的数据的太多,用EXCEL处理太慢。自己在网上找了参照的教程弄了一个功能,主要是将一些固定的工作薄数据导入到ACCESS中,然后再进行操作。但是发现导入的速度太慢了,一万多条数据,耗时28分钟。。。至少都要有十几万的数据。。在这里求大神看看,是我的程序有哪些需要改进的地方,或者有没有其他可以提高速度的方式,前提是可以减少人工操作。
下面操作是打开指定文件,将数据库里面不存在的运单编号存入,有运单编号的查看扫描时间,取扫描时间比较大的数据。
For Each selectfiles In fd.SelectedItems
Workbooks.Open selectfiles
arr0 = ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
head = WorksheetFunction.Index(arr0, 1, 0)
With rs
For i = 2 To UBound(arr0, 1) Step 1
arr1 = WorksheetFunction.Index(arr0, i, 0)
Set rs = New ADODB.Recordset
sql = "select * from " & djb & " where 运单编号=""" & arr1(1) & """"
rs.Open sql, cnn, adOpenKeyset, adLockOptimistic
If IsNumeric(arr1(1)) = False Or arr1(1) = "" Then
Exit For
ElseIf rs.RecordCount = 0 Then
rs.AddNew head, arr1
allcount = allcount + 1
ElseIf rs.RecordCount > 0 Then
If Format(rs.Fields(4), "yyyy-mm-dd hh:mm:ss") < Format(arr1(5), "yyyy-mm-dd hh:mm:ss") Then
For j = 1 To rs.Fields.Count
rs.Fields(j - 1) = arr1(j)
Next j
rs.Update
allcount = allcount + 1
End If
Else
End If
progressbar i, UBound(arr0, 1), ActiveWorkbook.Name
DoEvents
Next
End With
ActiveWorkbook.Close
Next selectfiles
'Set the object variable to Nothing.
tim = Timer - tim
MsgBox "导入完成,共导入" & allcount & "行数据,耗时" & Int(tim \ 3600) & "小时" & Int(tim Mod 3600) \ 60 & "分" & Int(tim Mod 60) & "秒"
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
Set fd = Nothing
|
|