注册 登录
编程论坛 VB6论坛

把VBA代码移植到VB6.0中,运行很慢是什么原因?有没有什么好的解决方案?

duzihanghai 发布于 2021-09-29 17:19, 2069 次点击
自己用VBA做了一个产品选型程序,在VBA中运行很快,但数据保存在十几张工作表中,数据安全不好保证。现在想移植到VB中去,需要用VB调用excel查询数据,但刚刚做了一个简单测试,运行速度特别慢,请问哪位老师知道这个是什么原因?有没有什么更好的解决方案?
[code]Private Sub Command1_Click()
Application.ScreenUpdating = False '关闭屏幕刷新
Dim rng As Range
Dim xlApp As Excel.Application '声明对象变量
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim i
Dim Temp() As Byte

Temp = LoadResData(101, "CUSTOM")
Open "C:\Program Files (x86)\sldata.xlsx" For Binary Access Write As #1
Put #1, , Temp()
Close #1
Set xlApp = Excel.Application '实例化对象
Set xlBook = xlApp.Workbooks.Open("C:\Program Files (x86)\sldata.xlsx")
Set xlSheet = xlBook.Worksheets("WO")
xlApp.Visible = False '使Excel隐藏不可见
i = xlSheet.Range("A2:A1236").Find(Text1.Text).Row
Label1.Caption = xlSheet.Cells(i, 2)


xlApp.DisplayAlerts = False '不提示是否覆盖
xlBook.Close (False) '关闭工作簿
xlApp.Visible = False
xlApp.Quit '结束EXCEL对象

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing '释放xlApp对象
End Sub
只有本站会员才能查看附件,请 登录
6 回复
#2
约定的童话2021-09-29 19:26
Temp = LoadResData(101, "CUSTOM")
Open "C:\Program Files (x86)\sldata.xlsx" For Binary Access Write As #1
Put #1, , Temp()
Close #1
这几步耗费时间
#3
duzihanghai2021-09-29 22:13
回复 2楼 约定的童话
刚才试了一下,注释掉释放文件的这部分语句,直接查找的话初次运行依然很慢,我自己推断是打开excel进程时耗费比较多的时间,因为一旦程序启动运行完第一次后,后续再进行筛选速度明显加快。感谢您的帮助!
#4
约定的童话2021-09-30 07:03
回复 3楼 duzihanghai
你可以加一个分段计时比较下,打开要多久,读取要多久,就一目了然了
#5
风吹过b2021-09-30 18:58
VB6 操作 Excel 是跨进程操作,自然慢。
而vba 是内置到 excel中执行,在本进程中操作,这种情况下自然比VB6的跨进程操作要快。

操作 excel要快的话,只有把 excel 当作数据库,使用 odbc 等方式进行查询 才会快。
#6
asad2022-01-09 17:47
学习了,谢谢
#7
yuma2022-01-10 17:43
二进制读写本身就慢。
1