Excel精英培训网

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

这个拆分附表的代码哪里出错了

[复制链接]
发表于 2022-12-3 00:01 | 显示全部楼层 |阅读模式
求助各位,我想把附表中的“公司名称”及对应的行内容拆分出各个附表出来,并且各附表的名称以公司名称独立起来,写了下面的代码,但执行时报错,应该怎样修改:


Sub 拆分多个工作表()

    Dim danyuange1 As Range, danyuange2 As Range
   
    Dim fubiao As Worksheet
   
    Dim hangshu
   
    Dim biaogemingcheng As String
   
        hangshu = Worksheets("拆分多个工作表").Rows.Count
        
        Set danyuange2 = Range("A" & hangshu).End(xlUp)
        
            For Each danyuange1 In Range("A3", danyuange2)
            
                For Each fubiao In Worksheets
               
                biaogemingcheng = fubiao.Name
               
                Next fubiao
               
                    If InStr(1, biaogemingcheng, danyuange1.Value) > 0 Then
                 
                    danyuange1.EntireRow.Copy Sheets(danyuange1.Value).Range("A" & hangshu).End(xlUp).Offset(1, 0)
                 
                     Else
                 
                    Worksheets.Add(after:=Sheets(Sheets.Count)).Name = danyuange1.Value
                 
                    Worksheets("拆分多个工作表").Range("A2").EntireRow.Copy [A1]
                 
                    danyuange1.EntireRow.Copy Range("a" & hangshu).End(xlUp).Offset(1, 0)
                 
                    End If
                  
             Next danyuange1
            
    End Sub
               
报错.jpg

Excel-VBA每日训练1 - 副本.rar

14.98 KB, 下载次数: 6

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2022-12-3 09:21 | 显示全部楼层
思路正确,但是方法不对。提供一种思路。先确定要生成多少个工作表,然后。。。。
回复

使用道具 举报

 楼主| 发表于 2022-12-3 10:40 | 显示全部楼层
根据附表的公司名称数量,我是想生成3个附表的
回复

使用道具 举报

 楼主| 发表于 2022-12-3 10:41 | 显示全部楼层
风林火山 发表于 2022-12-3 09:21
思路正确,但是方法不对。提供一种思路。先确定要生成多少个工作表,然后。。。。

根据表里公司名称的数量,我是想生成3个附表的
回复

使用道具 举报

发表于 2022-12-3 12:19 | 显示全部楼层
代码要修改话,可以改成这样,但这个拆分工作表的代码效率一般
Sub 拆分工作表()
    Dim rng As Range, endRng As Range, sht As Worksheet
    Dim shtname$, temp As Range
    Set endRng = Sheet8.Cells(Rows.Count, 1).End(3)
    Set temp = Sheet8.Rows(2)
    Application.ScreenUpdating = False
    For Each rng In Sheet8.Range(Cells(3, 1), endRng)
        For Each sht In Sheets
            shtname = shtname & "\" & sht.Name
        Next
        If InStr(shtname, rng.Value) Then
            temp.Copy Sheets(rng.Value).[a1]
            rng.EntireRow.Copy Sheets(rng.Value).Cells(Rows.Count, 1).End(3).Offset(1)
        Else
            Worksheets.Add(after:=Sheets(Sheets.Count)).Name = rng.Value
        End If
        shtname = ""
    Next rng
    Application.ScreenUpdating = True
End Sub
回复

使用道具 举报

 楼主| 发表于 2022-12-3 18:59 | 显示全部楼层
哥儿- 发表于 2022-12-3 12:19
代码要修改话,可以改成这样,但这个拆分工作表的代码效率一般
Sub 拆分工作表()
    Dim rng As Range,  ...

你好,我想问一下为什么执行了代码后,附表“广州*****”的金额好像不太对哦...........
2345截图20221203185659.jpg
2345截图20221203185711.jpg
回复

使用道具 举报

发表于 2022-12-3 19:34 | 显示全部楼层
zhong4314 发表于 2022-12-3 18:59
你好,我想问一下为什么执行了代码后,附表“广州*****”的金额好像不太对哦...........

漏写了点代码,光建新表没有复制过去,改过来,你测试一下。
Sub 拆分工作表()
    Dim rng As Range, endRng As Range, sht As Worksheet
    Dim shtname$, temp As Range
    Set endRng = Sheet8.Cells(Rows.Count, 1).End(3)
    Set temp = Sheet8.Rows(2)
    Application.ScreenUpdating = False
    For Each rng In Sheet8.Range(Cells(3, 1), endRng)
        For Each sht In Sheets
            shtname = shtname & "\" & sht.Name
        Next
        If InStr(shtname, rng.Value) Then
            rng.EntireRow.Copy Sheets(rng.Value).Cells(Rows.Count, 1).End(3).Offset(1)
        Else
            Worksheets.Add(after:=Sheets(Sheets.Count)).Name = rng.Value
            temp.Copy Sheets(rng.Value).[a1]
            rng.EntireRow.Copy Sheets(rng.Value).Cells(Rows.Count, 1).End(3).Offset(1)
        End If
        shtname = ""
    Next rng
    Application.ScreenUpdating = True
End Sub

评分

参与人数 1学分 +2 收起 理由
zhong4314 + 2 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

发表于 2022-12-3 19:38 | 显示全部楼层
本帖最后由 图不安兔 于 2022-12-4 07:24 编辑
哥儿- 发表于 2022-12-3 19:34
漏写了点代码,光建新表没有复制过去,改过来,你测试一下。
Sub 拆分工作表()
    Dim rng As Range,  ...

哥儿老师:您好!多谢了!

回复

使用道具 举报

发表于 2022-12-3 20:31 | 显示全部楼层
本帖最后由 zjdh 于 2022-12-3 20:34 编辑

在你的代码上稍作修改
Sub 拆分多个工作表()
    Dim danyuange1 As Range, danyuange2 As Range
    Dim fubiao As Worksheet
    Dim hangshu
    Dim biaogemingcheng As String
    hangshu = Worksheets("拆分多个工作表").Rows.Count
    Set danyuange2 = Range("A" & hangshu).End(xlUp)
    For Each danyuange1 In Range("A3", danyuange2)
        For Each fubiao In Worksheets
            biaogemingcheng = fubiao.Name
            If InStr(1, biaogemingcheng, danyuange1.Value) > 0 Then
                danyuange1.EntireRow.Copy Sheets(danyuange1.Value).Range("A" & hangshu).End(xlUp).Offset(1, 0)
                GoTo 10
            End If
        Next fubiao
        Worksheets.Add(after:=Sheets(Sheets.Count)).Name = danyuange1.Value
        Worksheets("拆分多个工作表").Range("A2").EntireRow.Copy [A1]
        danyuange1.EntireRow.Copy Range("a" & hangshu).End(xlUp).Offset(1, 0)
10  Next danyuange1
    MsgBox "拆分完成!"
End Sub
回复

使用道具 举报

 楼主| 发表于 2022-12-3 21:01 | 显示全部楼层
哥儿- 发表于 2022-12-3 19:34
漏写了点代码,光建新表没有复制过去,改过来,你测试一下。
Sub 拆分工作表()
    Dim rng As Range,  ...

谢谢哥儿老师,辛苦了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 15:34 , Processed in 0.318842 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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