明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 605|回复: 9

求高手改进程序

[复制链接]
发表于 2016-4-4 09:08 | 显示全部楼层 |阅读模式
Sub 材料汇总()
Dim wb As Workbook, myfile$, s&
Dim i As Integer
Dim k As Integer
Application.ScreenUpdating = False
myfile = Dir(ThisWorkbook.Path & "\决算\*.xls")
s = 4
Do While myfile <> ""
    If ThisWorkbook.Name <> myfile Then
        s = s + 1
        Set wb = GetObject(ThisWorkbook.Path & "\决算" & "\" & myfile)
        With wb.Sheets(1)
           For i = 2 To 496
           Cells(1, s) = wb.Sheets("封面").Cells(3, 3)
           Cells(i, s) = wb.Sheets("新材料表").Cells(i + 5, 5)
           Next i

   End With
        wb.Close False
    End If
    myfile = Dir
Loop
Application.ScreenUpdating = True

End Sub


这是一个汇总材料的宏程序,但运行比较慢,求高手改进(用数组怎么改进啊)




发表于 2016-4-4 09:28 | 显示全部楼层
本帖最后由 Real_King 于 2016-4-4 09:31 编辑

给我的感觉。。。VBA OLE运行效率确实不高吧,你这个遍历单元格可以尝试缩小范围,也可以采用数据库访问形式比较快,具体看格式了,大概看了眼你的行是从第二行起读的,可以采取这种方式
 楼主| 发表于 2016-4-4 16:59 | 显示全部楼层
Real_King 发表于 2016-4-4 09:28
给我的感觉。。。VBA OLE运行效率确实不高吧,你这个遍历单元格可以尝试缩小范围,也可以采用数据库访问形式 ...

我想采用数组进行读写操作,总是失败,前辈能帮帮我吗
发表于 2016-4-4 21:17 | 显示全部楼层
906379829 发表于 2016-4-4 16:59
我想采用数组进行读写操作,总是失败,前辈能帮帮我吗

我用的是C#,不过你提到的数组,完全可以以dataset的形式啊,读写比你以遍历单元格形式快得多
 楼主| 发表于 2016-4-4 22:48 | 显示全部楼层
Real_King 发表于 2016-4-4 21:17
我用的是C#,不过你提到的数组,完全可以以dataset的形式啊,读写比你以遍历单元格形式快得多

Sub 预算材料汇总()

Dim wb As Workbook, wk As Workbook, myfile$, s&
Dim i As Integer
Dim k As Integer
Dim arr
Application.ScreenUpdating = False
myfile = Dir(ThisWorkbook.Path & "\预算\*.xls")
s = 2
Do While myfile <> ""
    If ThisWorkbook.Name <> myfile Then
        s = s + 1
        Set wb = Workbooks.Open(ThisWorkbook.Path & "\预算" & "\" & myfile)
        Set wk = GetObject(ThisWorkbook.Path & "\预算" & "\" & myfile)
        With wb.Sheets(1)
          arr = wb.Sheets("主材清单").Range(Cells(7, 5), Cells(299, 5))
           Cells(1, s) = wb.Sheets("封面").Cells(3, 1)
           Range(Cells(2, s), Cells(297, s)).Value = arr
           

   End With
    ActiveWorkbook.CheckCompatibility = False
        wb.Close False
        
    End If
    myfile = Dir
Loop
Application.ScreenUpdating = True


End Sub
 楼主| 发表于 2016-4-4 22:50 | 显示全部楼层
上述程序是我采用数组编的,红色部分调试不成功,不知道哪里出问题了
发表于 2016-4-5 00:08 | 显示全部楼层
本帖最后由 Real_King 于 2016-4-5 00:11 编辑
906379829 发表于 2016-4-4 22:50
上述程序是我采用数组编的,红色部分调试不成功,不知道哪里出问题了

如你所见,arr是 Excel Range 对象,你理解的数组不是这样,声明arrDim arr as Excel.Application.Range,不知道VB是不是这样你试试
发表于 2016-4-5 13:07 | 显示全部楼层
这段代码应该慢不到哪去,看看是不是打开各个xls文件比较花时间。楼主可以在各个不同阶段输出下时间,看看最慢在哪里。
发表于 2016-4-25 14:36 来自手机 | 显示全部楼层
对于excel的工作表单元格的操作,肯定是用数组计算比直接访问单元格快多了来自: Android客户端
发表于 2016-4-25 21:40 | 显示全部楼层
来学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 10:05 , Processed in 2.026747 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表