Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3299|回复: 4

为何按顺序删除表出错?如何实现把前面4个中文表名的表删除?

[复制链接]
发表于 2014-1-26 19:42 | 显示全部楼层 |阅读模式
5学分
本帖最后由 棋行天下黄 于 2014-1-26 22:28 编辑

有个工作簿里面有很多表,首先要把武汉的筛选出来,然后把武汉的数据一张张的粘贴到新表中,把原始数据表一张张删除,结果原始数据表没删干净,结果处理后的数据表却删掉了,到底哪里出错了?
Sub 必出样报表筛选武汉()
    Application.DisplayAlerts = False
    s = Sheets.Count
    MsgBox (s)
       For i = 1 To s
       Sheets(i).Select
       sh = Sheets(i).name
            ActiveSheet.AutoFilterMode = False
        Sheets(i).Rows("1:1").Select
        
            Selection.AutoFilter
        A = Sheets(i).[A1048576].End(3).Row
        B = Sheets(i).[IV1].End(xlToLeft).Column
        If Sheets(i).Cells(1, 4).Value = "分部" Then
        Sheets(i).Range(Cells(1, 1), Cells(A, B)).AutoFilter Field:=4, Criteria1:="=*武汉*"
        End If
        If Sheets(i).Cells(1, 8).Value = "分部" Then
        Sheets(i).Range(Cells(1, 1), Cells(A, B)).AutoFilter Field:=8, Criteria1:="=*武汉*"
        End If
      
    Sheets(i).Range(Cells(1, 1), Cells(A, B)).Select
        Selection.Copy
        Sheets.Add After:=Sheets(Sheets.Count)
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
          sheetS(SH).DELETE
        Next i
        
      
      
      End Sub
那些中文表名的表为何没删干净,反而把处理后的数据表删掉了?

事业部——1月冰洗彩、厨卫全国各门店样机出样标准.rar

201.37 KB, 下载次数: 2

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-1-26 20:33 | 显示全部楼层
Sub 合并明细表()
    Dim arr, brr(1 To 10000, 1 To 20), k&, i&, n&, sh

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sh In Worksheets
        arr = sh.Range("a1").CurrentRegion
        For k = 2 To UBound(arr)
            If InStr(arr(k, 4), "武汉") > 0 Then
                n = n + 1
                For i = 1 To UBound(arr, 2)
                    brr(n, i) = arr(k, i)
                Next i
            End If
        Next k
        Erase arr
    Next sh
    Worksheets.Add
    ActiveSheet.Name = "合并明细"
    Sheets("彩电").Range("a1:t1").Copy Range("a1")
    Range("a2").Resize(10000, 20) = brr
    Cells.EntireColumn.AutoFit
    For Each sh In Worksheets
        If sh.Name <> "合并明细" Then sh.Delete
    Next sh
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

评分

参与人数 1 +1 收起 理由
棋行天下黄 + 1 感谢帮助,下面有解决的方法了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-1-26 21:02 | 显示全部楼层
风林火山 发表于 2014-1-26 20:33
Sub 合并明细表()
    Dim arr, brr(1 To 10000, 1 To 20), k&, i&, n&, sh

谢谢帮助,但未解决问题,我的模板举个列,实际另外一个工作簿里面有两张原始数据表,一张是电脑,一张是小家电,故你的程序没有通用性。通用性的程序有一个,但03版能用,10版错误
Sub 必出样报表筛选武汉()
  Dim d As New Dictionary
  Dim ws As Worksheet
  Application.DisplayAlerts = False
  For Each ws In Worksheets
    d(ws.name) = ""
  Next
  arr = d.Keys
  For i = 0 To UBound(arr)
    With Worksheets(arr(i))
        .Select
        ActiveSheet.AutoFilterMode = False
       .Rows(1).Select
       Selection.AutoFilter
       A = .[A1048576].End(3).Row
       B = .[IV1].End(xlToLeft).Column
       If .Cells(1, 4).Value = "分部" Then
        .Range(Cells(1, 1), Cells(A, B)).AutoFilter Field:=4, Criteria1:="=*武汉*"
       End If
       If .Cells(1, 8).Value = "分部" Then
         .Range(Cells(1, 1), Cells(A, B)).AutoFilter Field:=8, Criteria1:="=*武汉*"
       End If
      
       .Range(.Cells(1, 1), .Cells(A, B)).Select
       Selection.Copy
       Worksheets.Add After:=Worksheets(Worksheets.Count)
       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
           :=False, Transpose:=False
       .Delete
     End With
   Next
End Sub

回复

使用道具 举报

发表于 2014-1-26 21:04 | 显示全部楼层
哦,这样啊,下次把通用的表发上来
回复

使用道具 举报

 楼主| 发表于 2014-1-26 22:25 | 显示全部楼层
风林火山 发表于 2014-1-26 21:04
哦,这样啊,下次把通用的表发上来

Sub 必出样报表筛选武汉()
  Dim d As Object
  Dim ws As Worksheet
  Set d = CreateObject("scripting.dictionary")
  Application.DisplayAlerts = False
  For Each ws In Worksheets
    d(ws.Name) = ""
  Next
  arr = d.Keys
  For i = 0 To UBound(arr)
    With Worksheets(arr(i))
        .Select
        ActiveSheet.AutoFilterMode = False
       .Rows(1).Select
       Selection.AutoFilter
       A = .[A65000].End(3).Row
       B = .[IV1].End(xlToLeft).Column
       If .Cells(1, 4).Value = "分部" Then
        .Range(Cells(1, 1), Cells(A, B)).AutoFilter Field:=4, Criteria1:="=*武汉*"
       End If
       If .Cells(1, 8).Value = "分部" Then
         .Range(Cells(1, 1), Cells(A, B)).AutoFilter Field:=8, Criteria1:="=*武汉*"
       End If
      
       .Range(.Cells(1, 1), .Cells(A, B)).Select
       Selection.Copy
       Worksheets.Add After:=Worksheets(Worksheets.Count)
       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
           :=False, Transpose:=False
       .Delete
     End With
   Next
End Sub

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-13 21:00 , Processed in 0.247601 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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