以下是我的一段VBA程序, 我先做了个验证结果是可行的, 但是当我放到一个大文件中的时候,运行速度慢的很,像卡住了一样, 请帮忙看一下如何提高运行速度, 是否要用arr()?谢谢!
Sub Stock()
Application.ScreenUpdating = False
Dim c, d, e
c = "\\wux-file01\Public\ERP_Report\WXI\Logistic" '网盘路径
With Worksheets("Stock")
If Dir(c & "\ABC - Onhand for WXI.csv") <> "" Then
Set d = Workbooks.Open(c & "\Finisar - Onhand for WXI.csv")
d.Sheets("ABC - Onhand for WXI").Range("A1:AH60000").Copy .Range("A1") '将网盘上的文件中A1:AH60000单元格内容复制到本地的文件中
d.Close False
Else
MsgBox "请检查文件是否存在"
End If
.Range("A1").AutoFilter field:=27, Criteria1:="N"
.Range("A2:A" & .UsedRange.Rows.Count).EntireRow.SpecialCells(xlVisible).Delete '将筛选出的内容删除
.AutoFilterMode = False
e = .Range("A1048576").End(xlUp).Row
For i = e To 2 Step -1
If Left(.Cells(i, 5), 3) = "HWI" Then '符合此条件的行删除
.Rows(i).Delete
End If
Next
End With
Application.ScreenUpdating = True
End Sub
1、你采用的是先复制再筛选最后删除,可以改为在网盘上筛选出自己要的数据,读取到数组中,然后写入到表内。
2、判断符合条件的行整行的删除,其实在第一步就能合并解决。
这样运行速度会比你的快一些。追问
我按照你的意见修改了, next之前运行都是OK的, 但运行到next之后就报错了"type mismatch",请帮忙看下
arr = d.Worksheets("Finisar - Onhand for WXI").Range("A1:AH50000") '将网盘上筛选出的数据放到数组中
ThisWorkbook.Worksheets("Stock").Range("A1") = arr
ThisWorkbook.Worksheets("Stock").Range("A1") = arr
这句有问题,数组输入到表中需要用一定方法的,或者循环或者RESIZE或者复制等