VBA程序运行太慢怎么解决?

以下是我的一段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或者复制等

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网