ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1174|回复: 9

[求助] 同时打开一个文件下的三张表进行数据处理,为什么只有第一张表成功其他都变成空白表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-12 02:01 | 显示全部楼层 |阅读模式
  1. Sub kd()
  2. Dim wb As Workbook
  3. Dim str As String
  4. t = Timer
  5. ss = "12"
  6. st = "B"
  7. sr = "J"
  8. k = 1
  9. Application.ScreenUpdating = False
  10. str = Dir("d:\data\*.xls*")
  11. For Z = 1 To 3
  12.    Set wb = Workbooks.Open("d:\data" & str)
  13.    Dim arr1(), arr2(), arr3(), arr4()
  14.    For m = 3 To 2 Step -1
  15.    ActiveSheet.Rows(m).Delete
  16.    Next
  17.    arr1 = [a1].CurrentRegion.Value2
  18.    ReDim arr2(1 To UBound(arr1), 1 To UBound(arr1, 2))
  19.    ReDim arr3(1 To UBound(arr1), 1 To UBound(arr1, 2))
  20.    ReDim arr4(1 To UBound(arr1), 1 To UBound(arr1, 2))

  21.    For i = 1 To UBound(arr1)
  22.       If InStr(ss, Mid(arr1(i, 2), 6, 2)) <> 0 Then
  23.          k = k + 1
  24.          For j = 1 To UBound(arr1, 2)
  25.             arr2(1, j) = arr1(1, j)
  26.             arr2(k, j) = arr1(i, j)
  27.          Next
  28.       End If
  29.    Next
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-12 02:18 | 显示全部楼层
行数限制 一楼代码不全
再说一下问题,运行时,我可以看到第三个表也成功处理,但最后屏幕闪了一下,第二三个表就变成空白了
下面是代码
Sub kd()
Dim wb As Workbook
Dim str As String
t = Timer
ss = "12"
st = "B"
sr = "J"
k = 1
Application.ScreenUpdating = False
str = Dir("d:\data\*.xls*")
For Z = 1 To 3
    Set wb = Workbooks.Open("d:\data\" & str)
        Dim arr1(), arr2(), arr3(), arr4()
        For m = 3 To 2 Step -1
        ActiveSheet.Rows(m).Delete
        Next
        arr1 = [a1].CurrentRegion.Value2
        ReDim arr2(1 To UBound(arr1), 1 To UBound(arr1, 2))
        ReDim arr3(1 To UBound(arr1), 1 To UBound(arr1, 2))
        ReDim arr4(1 To UBound(arr1), 1 To UBound(arr1, 2))
        
        
        For i = 1 To UBound(arr1)
            If InStr(ss, Mid(arr1(i, 2), 6, 2)) <> 0 Then
                k = k + 1
                For j = 1 To UBound(arr1, 2)
                    arr2(1, j) = arr1(1, j)
                    arr2(k, j) = arr1(i, j)
                Next
            End If
        Next
        
        
        For m = 1 To UBound(arr2)
            If InStr(st, arr2(m, 3)) = 0 Then
                w = w + 1
                For n = 1 To UBound(arr2, 2)
                    arr3(w, n) = arr2(m, n)
                Next
            End If
        Next
        
        
        For p = 1 To UBound(arr3)
            If InStr(sr, Left(arr3(p, 4), 1)) = 0 Then
                r = r + 1
                For q = 1 To UBound(arr3, 2)
                    arr4(r, q) = arr3(p, q)
                Next
            End If
        Next
                 
                 
       ActiveSheet.[a1].Resize(UBound(arr1), UBound(arr4, 2)) = arr4
        
    wb.Save
    wb.Close savechanges:=False
        
    str = Dir
    If str = "" Then Exit For
   
Next
Application.ScreenUpdating = True
MsgBox Timer - t
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-12 02:19 | 显示全部楼层
由于行数限制,一楼没有代码全部,下面是全部代码
Sub kd()
Dim wb As Workbook
Dim str As String
t = Timer
ss = "12"
st = "B"
sr = "J"
k = 1
Application.ScreenUpdating = False
str = Dir("d:\data\*.xls*")
For Z = 1 To 3
    Set wb = Workbooks.Open("d:\data\" & str)
        Dim arr1(), arr2(), arr3(), arr4()
        For m = 3 To 2 Step -1
        ActiveSheet.Rows(m).Delete
        Next
        arr1 = [a1].CurrentRegion.Value2
        ReDim arr2(1 To UBound(arr1), 1 To UBound(arr1, 2))
        ReDim arr3(1 To UBound(arr1), 1 To UBound(arr1, 2))
        ReDim arr4(1 To UBound(arr1), 1 To UBound(arr1, 2))
        
        
        For i = 1 To UBound(arr1)
            If InStr(ss, Mid(arr1(i, 2), 6, 2)) <> 0 Then
                k = k + 1
                For j = 1 To UBound(arr1, 2)
                    arr2(1, j) = arr1(1, j)
                    arr2(k, j) = arr1(i, j)
                Next
            End If
        Next
        
        
        For m = 1 To UBound(arr2)
            If InStr(st, arr2(m, 3)) = 0 Then
                w = w + 1
                For n = 1 To UBound(arr2, 2)
                    arr3(w, n) = arr2(m, n)
                Next
            End If
        Next
        
        
        For p = 1 To UBound(arr3)
            If InStr(sr, Left(arr3(p, 4), 1)) = 0 Then
                r = r + 1
                For q = 1 To UBound(arr3, 2)
                    arr4(r, q) = arr3(p, q)
                Next
            End If
        Next
                 
                 
       ActiveSheet.[a1].Resize(UBound(arr1), UBound(arr4, 2)) = arr4
        
    wb.Save
    wb.Close savechanges:=False
        
    str = Dir
    If str = "" Then Exit For
   
Next
Application.ScreenUpdating = True
MsgBox Timer - t
End Sub

TA的精华主题

TA的得分主题

发表于 2019-6-12 10:02 来自手机 | 显示全部楼层
去掉→wb.Save
把    →wb.Close savechanges:=False
改为→wb.Close savechanges:=True

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-13 20:17 | 显示全部楼层
lss001 发表于 2019-6-12 10:02
去掉→wb.Save
把    →wb.Close savechanges:=False
改为→wb.Close savechanges:=True

还是不行,55555,原文件数据有点多,压缩后也传不上来。还是第一个表处理成功的,剩下两个表就依然是空表

TA的精华主题

TA的得分主题

发表于 2019-6-13 20:54 来自手机 | 显示全部楼层
y256789 发表于 2019-6-13 20:17
还是不行,55555,原文件数据有点多,压缩后也传不上来。还是第一个表处理成功的,剩下两个表就依然是空 ...

在→Set wb = Workbooks.Open("d:\data\" & str)
后面增加激活工作薄!→wb.Activate

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-13 21:16 | 显示全部楼层
lss001 发表于 2019-6-13 20:54
在→Set wb = Workbooks.Open("d:\data\" & str)
后面增加激活工作薄!→wb.Activate

额 这次 出现了新问题,第一张表可以成功处理,第二张表依然为空,第三张表不是空表但是没有进行处理

TA的精华主题

TA的得分主题

发表于 2019-6-13 21:39 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lss001 于 2019-6-14 16:21 编辑

__________
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 14:54 , Processed in 0.029357 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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