Excel精英培训网

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

[已解决]帮忙修改代码

[复制链接]
发表于 2016-11-4 11:50 | 显示全部楼层 |阅读模式
以下是把工作簿内各工作表数据合并到第一个工作表的VBA代码,不足之处是要首先手动新建一个工作表并把它放在工作表中的第一个位置,我想请论坛中 的朋友帮忙修改一下代码,让该代码运行时先自动创建一工作表,然后开始汇总数据到这工作表中。

Sub 把工作簿内所有工作表内容合并到第一个工作表中()

Dim i, n, St As Worksheet

    For i = 1 To Sheets.Count
        If i = 1 Then
            Set St = Sheets(i)
            If St.UsedRange.Cells.Count = 1 And St.Cells(1, 1) = "" Then
                n = 1 '下一次添加内容的行
            Else
                n = St.UsedRange.Rows.Count + 1
            End If
        Else
            Sheets(i).UsedRange.Copy St.Cells(n, 1)
            n = St.UsedRange.Rows.Count + 1
        End If
    Next i
End Sub

最佳答案
2016-11-5 08:47
huchuanxing 发表于 2016-11-4 21:45
望帝春心先生:您好!
        后来的代码我也进行了测试,问题还是存在,即“C”表有些项目(如班主任 ...
  1. Sub Greenhand()
  2.     Dim sht As Worksheet, flag As Boolean, i%, myrow%, myrow1%
  3.     flag = False
  4.     For i = 1 To Sheets.Count
  5.         If Sheets(i).Name = "汇总表" Then flag = True
  6.     Next
  7.     If flag = False Then
  8.         Set sht = Worksheets.Add
  9.         sht.Name = "汇总表"
  10.         Sheets("汇总表").Move before:=Sheets(1)
  11.     End If
  12.     For i = 1 To Sheets.Count
  13.         If Sheets(i).Name <> "汇总表" Then
  14.             myrow = Sheets("汇总表").UsedRange.Row
  15.             myrow1 = Sheets("汇总表").UsedRange.Rows.Count
  16.             If myrow1 = 1 Then
  17.                 Sheets(i).UsedRange.Copy
  18.                 Sheets("汇总表").Cells(myrow, 1).End(3).Select
  19.                 Selection.PasteSpecial (xlPasteValues)
  20.             Else
  21.                 Sheets(i).UsedRange.Copy
  22.                 Sheets("汇总表").Cells(myrow + myrow1 - 1, 1).Offset(1, 0).Select
  23.                 Selection.PasteSpecial (xlPasteValues)
  24.             End If
  25.         End If
  26.     Next i
  27. End Sub
复制代码


发表于 2016-11-4 13:02 | 显示全部楼层
本帖最后由 望帝春心 于 2016-11-4 13:06 编辑
  1. Sub Greenhand()
  2.     Dim sht As Worksheet, flag As Boolean, i%, myrow%, myrow1%
  3.     flag = False
  4.     For i = 1 To Sheets.Count
  5.         If Sheets(i).Name = "汇总表" Then flag = True
  6.     Next
  7.     If flag = False Then
  8.         Set sht = Worksheets.Add
  9.         sht.Name = "汇总表"
  10.         Sheets("汇总表").Move before:=Sheets(1)
  11.     End If
  12.     For i = 1 To Sheets.Count
  13.         If Sheets(i).Name <> "汇总表" Then
  14.             myrow = Sheets("汇总表").UsedRange.Row
  15.             myrow1 = Sheets("汇总表").UsedRange.Rows.Count
  16.             If myrow1 = 1 Then
  17.                 Sheets(i).UsedRange.Copy Sheets("汇总表").Cells(myrow, 1).End(3)
  18.             Else
  19.                 Sheets(i).UsedRange.Copy Sheets("汇总表").Cells(myrow + myrow1 - 1, 1).Offset(1, 0)
  20.             End If
  21.         End If
  22.     Next i
  23. End Sub
复制代码
请参考
回复

使用道具 举报

 楼主| 发表于 2016-11-4 14:41 | 显示全部楼层
此代码我测试了一下,存在一个问题,即若其中一工作表中的数据是引用其它工作簿的,则汇总表中会显示为“0”,也就是说汇总数据会出现错误,请完善一下。谢谢。
回复

使用道具 举报

发表于 2016-11-4 15:21 | 显示全部楼层
建议先上传附件
回复

使用道具 举报

发表于 2016-11-4 17:12 | 显示全部楼层
huchuanxing 发表于 2016-11-4 14:41
此代码我测试了一下,存在一个问题,即若其中一工作表中的数据是引用其它工作簿的,则汇总表中会显示为“0 ...
  1. Sub Greenhand()
  2.     Dim sht As Worksheet, flag As Boolean, i%, myrow%, myrow1%
  3.     flag = False
  4.     For i = 1 To Sheets.Count
  5.         If Sheets(i).Name = "汇总表" Then flag = True
  6.     Next
  7.     If flag = False Then
  8.         Set sht = Worksheets.Add
  9.         sht.Name = "汇总表"
  10.         Sheets("汇总表").Move before:=Sheets(1)
  11.     End If
  12.     For i = 1 To Sheets.Count
  13.         If Sheets(i).Name <> "汇总表" Then
  14.             myrow = Sheets("汇总表").UsedRange.Row
  15.             myrow1 = Sheets("汇总表").UsedRange.Rows.Count
  16.             If myrow1 = 1 Then
  17.                 Sheets(i).UsedRange.Copy
  18.                 Sheets("汇总表").Cells(myrow, 1).End(3).Select
  19.                 Selection.PasteSpecial (xlPasteValues)
  20.             Else
  21.                 Sheets(i).UsedRange.Copy Sheets("汇总表").Cells(myrow + myrow1 - 1, 1).Offset(1, 0)
  22.             End If
  23.         End If
  24.     Next i
  25. End Sub
复制代码


回复

使用道具 举报

 楼主| 发表于 2016-11-4 21:45 | 显示全部楼层

望帝春心先生:您好!
        后来的代码我也进行了测试,问题还是存在,即“C”表有些项目(如班主任、课时、晚自习三项数据)是引用了“课时津贴计算”表中对应项目数据,在合并A、B、C三表时,汇总表中有关C表中的班主任、课时和晚自习三项仍然显示的是“0”,见《测试》附件。请帮忙解决。谢谢。
回复

使用道具 举报

 楼主| 发表于 2016-11-4 21:46 | 显示全部楼层
huchuanxing 发表于 2016-11-4 21:45
望帝春心先生:您好!
        后来的代码我也进行了测试,问题还是存在,即“C”表有些项目(如班主任 ...

补附件

测试.rar

77.82 KB, 下载次数: 3

回复

使用道具 举报

发表于 2016-11-5 08:47 | 显示全部楼层    本楼为最佳答案   
huchuanxing 发表于 2016-11-4 21:45
望帝春心先生:您好!
        后来的代码我也进行了测试,问题还是存在,即“C”表有些项目(如班主任 ...
  1. Sub Greenhand()
  2.     Dim sht As Worksheet, flag As Boolean, i%, myrow%, myrow1%
  3.     flag = False
  4.     For i = 1 To Sheets.Count
  5.         If Sheets(i).Name = "汇总表" Then flag = True
  6.     Next
  7.     If flag = False Then
  8.         Set sht = Worksheets.Add
  9.         sht.Name = "汇总表"
  10.         Sheets("汇总表").Move before:=Sheets(1)
  11.     End If
  12.     For i = 1 To Sheets.Count
  13.         If Sheets(i).Name <> "汇总表" Then
  14.             myrow = Sheets("汇总表").UsedRange.Row
  15.             myrow1 = Sheets("汇总表").UsedRange.Rows.Count
  16.             If myrow1 = 1 Then
  17.                 Sheets(i).UsedRange.Copy
  18.                 Sheets("汇总表").Cells(myrow, 1).End(3).Select
  19.                 Selection.PasteSpecial (xlPasteValues)
  20.             Else
  21.                 Sheets(i).UsedRange.Copy
  22.                 Sheets("汇总表").Cells(myrow + myrow1 - 1, 1).Offset(1, 0).Select
  23.                 Selection.PasteSpecial (xlPasteValues)
  24.             End If
  25.         End If
  26.     Next i
  27. End Sub
复制代码


回复

使用道具 举报

发表于 2016-11-5 08:48 | 显示全部楼层
参考附件........

测试.rar

75.26 KB, 下载次数: 0

回复

使用道具 举报

 楼主| 发表于 2016-11-6 08:22 | 显示全部楼层
问题解决了,谢谢您!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 07:52 , Processed in 0.314775 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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