前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >常用功能加载宏——多个工作表合并到一个工作表

常用功能加载宏——多个工作表合并到一个工作表

作者头像
xyj
发布2020-07-28 14:08:09
发布2020-07-28 14:08:09
1.7K00
代码可运行
举报
文章被收录于专栏:VBA 学习VBA 学习
运行总次数:0
代码可运行

把数据复制到一个工作簿后,一般我们还需要进行数据处理,而数据处理要在一个工作表才方便,所以把多个工作表的数据复制到一个工作表再进行数据处理也会经常碰到:

首先在customUI.xml中增加代码:

代码语言:javascript
代码运行次数:0
运行
复制
      <button id="rbbtnMergeSht" label="合并工作表" onAction="rbbtnMergeSht" imageMso="TableInsert" />

回调函数:

代码语言:javascript
代码运行次数:0
运行
复制
Sub rbbtnMergeSht(control As IRibbonControl)
    Call MShtWk.MergeSht
End Sub

函数实现:

代码语言:javascript
代码运行次数:0
运行
复制
Sub MergeSht()
    Dim rngout As Range
    
    On Error Resume Next
    Set rngout = Application.InputBox("请选择输出单元格,输出单元格所在Sheet将不会被复制,但数据会覆盖。", Default:=ActiveCell.Address, Type:=8)
    On Error GoTo 0
    
    If rngout Is Nothing Then
        Exit Sub
    End If
    
    Dim flagHead As Boolean '记录是否复制了标题
    Dim rows As Long
    Dim cols As Long
    Dim sht As Worksheet
    For Each sht In Worksheets
        If sht.Name <> rngout.Parent.Name Then         
            With sht
                '取消筛选
                .AutoFilterMode = False
                '按第一列定位,获取表格的最后所在的行   
                rows = .Cells(Cells.rows.Count, 1).End(xlUp).Row
                If rows > 1 Then
                    '获取表格的列的范围
                    cols = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column
                    
                    '复制标题
                    If Not flagHead Then
                        .Range("A1").Resize(1, cols).Copy rngout
                        rngout.Offset(0, cols).Resize(1, 1).Value = "SheetName"
                        Set rngout = rngout.Offset(1, 0)
                        flagHead = True
                    End If
                    
                    '复制数据
                    .Range("A2").Resize(rows - 1, cols).Copy rngout
                    
                    '如果只需要复制数值:
'                    .Range("A2").Resize(rows - 1, cols).Copy
'                    rngout.PasteSpecial xlPasteValues

                    '如果需要,可以增加一列Sheet名称
                    rngout.Offset(0, cols).Resize(rows - 1, 1).Value = .Name
                    
                    '输出单元格进行偏移
                    Set rngout = rngout.Offset(rows - 1, 0)
                End If
            End With
        End If
    Next
    
End Sub
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档