Excel 中vab代码执行速度非常慢,不知道哪里需要改进呢

centryjie 2013-07-11 11:02:27
代码 实现功能,根据第一张sheet中客户编号数据从另一个sheet中匹配到客户详细信息后,把客户信息提取复制到第一个sheet中客户编号后,这个过程速度非常慢,不知道哪里有问题

Private Sub cbAddCIS_Click()

Dim pvtTable As PivotTable
Dim oListObj As ListObject, oLO As ListObject
Dim f_rng As Range
Dim oNewRow As ListRow
Dim f_rowno As Long, f_colno As Long, t_colno As Long, r_pos As Long,
c_pos As Long
Dim lookup_value As String, lookup_col_name As String, result_col_name As
String
Dim found As Boolean

On Error Resume Next

Set pvtTable = ActiveSheet.PivotTables("客户资产汇总表")
Set f_rng = pvtTable.RowRange
Set oListObj = Worksheets("客户资产汇总").ListObjects("附加客户信息")
Set oLO = Worksheets("客户信息").ListObjects("客户信息表")

Call cbDelCIS_Click '先清除附加的客户信息

For f_rowno = 2 To f_rng.Rows.Count - 1 '处理每个行数据(去除标题行和汇总
行)
'插入一空行
Set oNewRow = oListObj.ListRows.Add

'用非空的查找要素(客户号、身份证或姓名)去查找客户信息
found = False
For f_colno = 1 To f_rng.Columns.Count

lookup_value = f_rng.Cells(f_rowno, f_colno)
lookup_col_name = f_rng.Cells(1, f_colno)

If (lookup_value <> "" And lookup_value <> "(空白)") Then

r_pos = 0
r_pos = WorksheetFunction.Match(lookup_value, oLO.ListColumns
(lookup_col_name).DataBodyRange, 0)
If r_pos > 0 Then
found = True
Exit For
End If

End If

Next

If found Then '找到的话,逐一添加客户信息各要素
For t_colno = 1 To oListObj.ListColumns.Count
result_col_name = oListObj.ListColumns(t_colno).Name

c_pos = 0
c_pos = WorksheetFunction.Match(result_col_name,
oLO.HeaderRowRange, 0)
If c_pos > 0 Then
oNewRow.Range.Cells(1, t_colno) = oLO.DataBodyRange.Cells(r_pos,
c_pos)
End If

Next
End If

Next

End Sub


Private Sub cbDelCIS_Click()
Dim rng As Range

Set rng = Worksheets("客户资产汇总").ListObjects("附加客户信息
").DataBodyRange

If rng Is Nothing Then
Exit Sub
End If

rng.Delete

End Sub

Private Sub cbrefresh_Click()

Dim pvtTable As PivotTable

Set pvtTable = ActiveSheet.PivotTables("客户资产汇总表")

pvtTable.RefreshTable

If Worksheets("客户资产汇总").ListObjects("附加客户信息").DataBodyRange
Is Nothing Then
Exit Sub
End If

'Call cbAddCIS_Click

End Sub
...全文
507 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu_terry 2013-10-06
  • 打赏
  • 举报
回复
用数组可以大大提高速度。
yiyiyicz 2013-09-11
  • 打赏
  • 举报
回复
你用的是透视表 最好先仔细看看透视表编程的书或者资料 提高速度有一个途径,就是编程处理都放在内存里。处理中不要读表格内的数据
Treenewbee 2013-08-28
  • 打赏
  • 举报
回复
使用数组!!!
杨哥儿 2013-08-04
  • 打赏
  • 举报
回复
不要在循环中使用Match函数!
centryjie 2013-07-23
  • 打赏
  • 举报
回复
关闭刷屏后,还是很慢,应该是应为循环太多引起, 不知道优化空间 具体需要怎么做呢?谢谢指导
wang405 2013-07-19
  • 打赏
  • 举报
回复
3.程序中好象有不少循环,确认循环是否有优化空间,循环2次能达结果的不要循环4次。
wang405 2013-07-19
  • 打赏
  • 举报
回复
1.表格内是否有大量函数存在,如果有请去除 2.程序代码关闭EXCEL刷屏,待程序执行完成了再开启 希望有帮助。

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧