精华内容
下载资源
问答
  • 下面介绍通过VBA,如何自动化跨工作簿复制粘贴及排序。 图一 图二 将图一工作簿中三个子表含有公式的数据,复制粘贴数值到图二的表1,并进行排序,可以直接点击图二中执行的控件即可完成;以下是VBA脚本的实现...

        从一个工作簿各个子表中复制数据粘贴到另一个工作簿指定位置中,并对指定列进行排序,这个是我们在日常工作中经常做的,如何减少繁琐的工作步骤,提高效率,一键完成上面的工作。下面介绍通过VBA,如何自动化跨工作簿复制粘贴及排序。
        
    图一


    图二

    需要将图一工作簿中三个子表含有公式的数据,复制粘贴数值到图二的表1,并对指定列进行降序排序,可以直接点击图二中执行的控件即可完成;以下是VBA脚本的实现。

     

    
    Sub scopy2()
    '
    ' 复制粘贴及排序
    '
    '复制粘贴
    Application.ScreenUpdating = False '禁止屏幕更新数据
        Windows("xxx.xlsx").Activate '图一的表名
        Sheets("表一").Select 
        Range("B5:X19").Select
        Selection.Copy   '复制
        Windows("aaaa.xlsm").Activate '图二的表名
        Sheets("1").Select
        Range("A6").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False   '粘贴成数值
        Windows("xxx.xlsx").Activate '图一的表名
        Sheets("表二").Select '
        Range("B5:T19").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("aaaa.xlsm").Activate '图二的表名
         Sheets("1").Select
        Range("Y6").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Windows("xxx.xlsx").Activate
        Sheets("表三").Select
        Range("B6:R20").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("aaaa.xlsm").Activate
       Sheets("1").Select
        Range("AS6").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    '筛选排序
    Windows("aaaa.xlsm").Activate
    Sheets("1").Select
        Range("A6:w20").Select
        Selection.AutoFilter '筛选
        ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Add2 Key:=Range( _
            "b6:b20"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal  '筛选并对指定列进行排序
        With ActiveWorkbook.Worksheets("1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("I10").Select
        Selection.AutoFilter
        Range("y6:Aq20").Select
        Selection.AutoFilter
        ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Add2 Key:=Range( _
            "Ab6:Ab20"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("AB9").Select
        Selection.AutoFilter
        Range("As6:Bi20").Select
        Selection.AutoFilter
        ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("1").AutoFilter.Sort.SortFields.Add2 Key:=Range( _
            "At6:At20"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("AS12").Select
        Selection.AutoFilter '去掉筛选
         Application.ScreenUpdating = True '解除禁止屏幕更新数据
    End Sub

    在图二的子表1的表名点右键,点击查看代码,插入模块1,粘贴上面的代码,保存。

    回到表格,在开发工具里-插入-表单控件

    选中控件点右键可以选择指定的宏名称,同时修改控件名称。

    展开全文
  • 有时,我们需要将一个工作簿里的每一张工作表,另存为单独的工作薄;如果只是一两张工作表需要这样处理,我们手工操作就挺好的,可如果是若干张,手工操作……岂不是太朴素?如果使用VBA来处理,这事就简单了。怎么...

    有时,我们需要将一个工作簿里的每一张工作表,另存为单独的工作薄;如果只是一两张工作表需要这样处理,我们手工操作就挺好的,可如果是若干张,手工操作……岂不是太朴素?

    如果使用VBA来处理,这事就简单了。

    怎么个简单法呢?,请看动画:

    58742cf90c9b9e73cf1109a2c664366a.gif

    动画中所粘贴的代码如下:


    Sub Newbooks()

    'EH技术论坛~VBA编程学习与实践

    Dim sht As Worksheet, mypath$

    With Application.FileDialog(msoFileDialogFolderPicker)

    '选择保存工作薄的文件路径

    .AllowMultiSelect = False

    '不允许多选

    If .Show Then

    mypath = .SelectedItems(1)

    Else

    Exit Sub

    '如果没有选择保存路径,则退出程序

    End If

    End With

    If Right(mypath, 1) <> "" Then mypath = mypath & ""

    Application.DisplayAlerts = False

    '取消显示系统警告消息,避免重名工作簿无法保存。当有重名工作簿时,会直接覆盖保存。

    Application.ScreenUpdating = False

    '取消屏幕刷新

    For Each sht In Worksheets

    '遍历工作表

    sht.Copy

    '复制工作表,工作表单纯复制后,会成为活动工作薄

    With ActiveWorkbook

    .SaveAs mypath & sht.Name, xlWorkbookDefault

    '保存活动工作薄到指定路径下,以默认文件格式

    .Close True '关闭工作薄并保存

    End With

    Next

    MsgBox "处理完成。

    展开全文
  • 这个过程中,有个需求,就是需要跨工作簿复制带按钮元素的表格到新工作簿,需要按钮对应的宏在新工作簿不需要绑定,直接可以运行。上面的描述太拗口,说下具体情况:工作簿A,内有表A,表B,表C,表A、B、C内,都...

    e8b98578cd513be8325a62ad617a2c10.png

    这几天,在“开发”一个简单的表格数据提取,然后输出为新表格的VBA代码。

    这个过程中,有个需求,就是需要跨工作簿复制带按钮元素的表格到新工作簿,需要按钮对应的宏在新工作簿不需要绑定,直接可以运行。

    上面的描述太拗口,说下具体情况:

    工作簿A,内有表A,表B,表C,表A、B、C内,都有用VBA编写的宏,并且都绑定了对应按钮,并且可用。

    需求:从工作簿A处理完数据以后,用表A,B,C当做模板,复制到新生成的工作簿B内,然后直接可用,不用从新绑定,并且不需要工作簿A存在。

    这个问题我花了大把时间在百度上搜索答案,然后,在我能力范围内,可以搜索到的最贴近我想法的答案,就是类似这种:

    工作簿A,内含表格A,B,C,都有代码。复制到新工作簿B,工作簿B内的表格A,B,C都有代码。但是,这个处理方法,并不支持按钮元素,单纯的就是为了把代码随着工作表,跨工作簿复制到新工作簿,这个事情根本就毫无难度。这里不展开说。

    事实上,EXCEL的宏绑定到元素上的时候,是有这样一个选项的:

    2d2f26887be6211be9fc5eee3b1c12b2.png

    这里无论如何设置,最终就两个结果:

    1,要么附带按钮绑定了宏的表格,到了新工作表,运行的时候,实际上是回到源工作簿调用,新旧工作簿必须都存在,不然就错误。

    2,无法做到新工作簿内的工资表宏按钮直接可用,需要手工从新绑定。


    啰嗦半天,说下我的解决办法:

    首先,可以确定的就是,工作簿A内的工作表A,把代码直接放在工作表A里,然后复制到新工作簿,表A内的宏和按钮元素,是可以自动跟着复制过去。

    然后,离我最终需求一步之遥的瑕疵,就是,我希望新工作簿B内的表格A,不需要从新绑定宏,直接就点击可用。

    经过分析,发现新工作簿里的表格A,不能直接使用按钮,就是因为绑定的时候,路径无法修改,导致调用的时候出BUG。

    我是这样解决的:

    f85cb3382ea7b399493d056501231fee.png
    private sub worksheet_activate()
    activesheet.shapes.range(array(button 1")).select
    selection.onaction ' "sheet9,hz"
    activesheet.range("a1").select
    end sub

    知乎没办法粘贴内容,上面代码是手打,可能有错。

    实际上,就是在工作簿A的工作表A内,提前做好一个工作表事件,在激活工作表的时候,自动在宏绑定的窗口里,选择宏名称。

    因为宏是写在工作表里的,所以宏的名称就是工作表名称.宏名。

    然后复制到新工作表以后,宏也在表里,按钮也在表里,就是绑定的位置不对。

    上面的事件加入以后,需要特殊设置一下,新建的工作表,不要直接定位在对应的工作表A,需要一次手工激活工作表的事件。

    最后就解决了我前面的需求。

    这样做,理论上只有一种可能,会出现问题:

    比如工作簿A里的工作表A,B,C。复制到了新生成的工作簿B里。恰巧,工作簿B,阴差阳错的有表格和工作表A重名。

    这样的巧合一是会导致工作表复制失败,二也会导致工作表的激活事件,触发的选择宏名称也报错。但是注意一下,完全可以规避。

    最后,我在着重描述一下,我提到的场景需求:

    工作簿A内,建立好工作表A,并且有宏和按钮。

    从工作簿A内,代码生成工作簿B,并且将工作表A拷贝到工作簿B。

    在使用工作簿B内的工作表A的时候,不需要从新绑定按钮的宏,不需要工作簿A存在。

    工作簿B内的工作表A直接可用。

    这是一份价值3小时的VBA运用心得。或者有更好的解决方案,欢迎留言。

    展开全文
  • 复制指定目录下excel工作簿中同名工作表,该代码将在相同目录下创建汇总工作簿,各工作簿中同名工作表将被分别复制到汇总工作簿的不同表中(汇总工作簿中各工作表以分工作簿名命名)。 所有要汇总的工作簿在同一个...

    学习日志

    复制指定目录下excel工作簿中同名工作表,该代码将在相同目录下创建汇总工作簿,各工作簿中同名工作表将被分别复制到汇总工作簿的不同表中(汇总工作簿中各工作表以分工作簿名命名)。
    所有要汇总的工作簿在同一个文件夹中,这里以后缀为.xlsx为例;

    ALL excelfiles

    Sub allexclefiles()
        Dim path As String, filename As String
        Dim w As Workbook, ws As Workbook
        
        path = "C:\12"
        filename = Dir(path & "\*.xlsx")
        'ws工作簿保存所有单位excel表格花名册
        
        '关闭提示
        Application.DisplayAlerts = False
        Set ws = Workbooks.Add
        
        Do While filename <> ""
            'w代表指定文件夹下每个找到的excel文件
            Set w = Workbooks.Open(path & "\" & filename)
                '选择工作表(此处假设sheet1),复制,并粘贴为汇总表的最后一张
                w.Sheets("sheet1").Copy after:=ws.Sheets(ws.Sheets.Count)
                 '重命名刚贴的表名为excel文件名
                ws.Worksheets(ws.Sheets.Count).name = Mid(filename, 1, Len(filename) - 5)
    
            '关闭工作簿
            w.Close
            '下一个
            filename = Dir
        Loop
    '程序运行结束,打开提示
        Application.DisplayAlerts = True
    '保存结果
    ws.SaveAs path & "\汇总.xlsx"
    End Sub
    
    展开全文
  • 我们的任务是将a.xlsx的Sheet1和b.xlsx的Sheet1复制到x.xlsx的Sheet xxx之前 确保启动时光标在test.xlsm中 Dim i As Integer For i = 1 To Workbooks.Count Cells(i, 1) = Workbooks(i).name Next
  • 爱过的心没有任何讲求 许多故事有伤心的理由 这一次我的爱情等不到天长地久 走过的路再也不能停留……诸君都好啊,今天和大家分享的内容是,移动复制指定文件夹下名称符合条件的多个工作表到汇总工作簿。举个例子,...
  • VBA 拆分工作簿并命名

    2019-01-14 14:57:00
    Sub 拆分工作簿并命名() Dim mypath As String Dim sh As Worksheet Dim file_name As String ...mypath = ThisWorkbook.Path ... sh.Copy '这条语句会复制工作表并放在一个新建工作簿 file_name...
  • mypath = ThisWorkbook.Path '获取当前工作簿的路径 Filename = Dir(mypath &amp; "\*.xls") '获取当前路径下所有的文件名称,这里所指工作簿的名称名称都一样,如下,只是结尾的数字不一样 Set wk_...
  • '在下面Array中列出所有需要复制工作表的名称 Worksheets(Array("工作表1", "工作表11", "工作表22", "工作表32")).Copy Set wbNew = ActiveWorkbook With wbNew  ...
  • [VBA]_复制工作

    2012-10-31 00:38:00
    VBA在EXCEL2010工作簿复制工作表 Sub 复制到新的工作簿() Sheets(“Sheet1”).Copy End Sub 在上述VBA代码中,当Copy后没有自变量时,可以将工作表复制到新建的EXCEL2010工作簿中。同样的复制到指定工作簿除了...
  • 帮朋友来写个Excel VBA 以前写过ASP,所以对vb略微熟悉,但VBA 没有仔细研究过。...2 遍历这些关键字,从【总表】中查询这个关键字,把这一行后面的内容复制到 【预算】表中去 3 把【操作】中制定内容...
  • 新建一个新的工作簿,然后查看代码,将以下VBA语句复制进去即可: Sub 合并当前工作簿下的所有工作表() Application.ScreenUpdating = False For j = 1 To Sheets.Count If Sheets(j).Name &amp;lt;&...
  • VBA-保存指定工作表为工作簿文件

    千次阅读 2020-02-26 16:53:39
    如果需要将工作簿中的工作表单独保存为一个工作簿文件,可以使用 Worksheet 对象的 Copy 方法,将指定的工作表复制到一个新建的工作簿。 Sub test() On Error GoTo line ActiveSheet.Copy '复制工作表为工作簿 ...
  • EXCEL-vba-操作工作簿

    2019-03-30 23:36:00
    1,excel批量复制已打开工作簿中的内容到新工作簿 Sub 宏1() ' ' 宏1 宏 ' '如果不需要程序的人机交互可以主动关闭更新和告警会一定程度上提高运行效率, Application.ScreenUpdating = False ...
  • 将每个Sheet以追加的方式合并到同一个Excel工作簿中,如下图:上图只显示了3张表中Sheet1的合并,Sheet2、Sheet3乃至其它均是如此,如果手动操作的话工作量是巨大的,所以,利用Excel自带的VBA宏自动化处理可以化繁...
  • VBA-合并多个工作簿

    万次阅读 2019-06-14 15:54:28
    我们将所有要合并到一起的Excel工作簿放到一个文件夹里,该文件夹里面有一个启用宏的工作表,启动该工作表的宏,就可以将该文件夹里面的所有Excel文件的内容合并到一张表里面,后面可以将合并完成后的数据复制或剪切...
  • VBA-不打开工作簿提取数据

    千次阅读 2020-02-26 17:48:43
    实现该功能的代码方式有很多种,这里介绍一种较为容易理解的方式:通过设置屏幕不更新达到模拟不打开工作簿的效果,并且将有工作簿中的数据信息复制到目前的工作表中。 Sub test() Application.ScreenUpdating = ...
  • 第二部分是逐一将各个工作复制粘贴到汇总工作表中; 第三部分为提示,即当合并工作完成后弹出提示。 代码如下: Sub Comb() Dim i% On Error Resume Next Sheets(1).Select Worksheets.Add '新建一个工作表 ...
  • 将每个Sheet以追加的方式合并到同一个Excel工作簿中,如下图:上图只显示了3张表中Sheet1的合并,Sheet2、Sheet3乃至其它均是如此,如果手动操作的话工作量是巨大的,所以,利用Excel自带的VBA宏自动化处理可以化繁...
  • 前几天用VBA帮一个朋友写的一个宏, 可以合并当前工作簿下的全部工作表. 不足之处望予以指正效果如下流程:检查工作表数量是否大于1检查第一个工作表头部是否含有合并单元格, 如果有, 那么忽略根据第一个工作表的格式,...
  • 因此,例如,它需要复制Myworkbook book的Sheet2中的数据,并将其粘贴到他们的工作簿Sheet2的范围内 . 范围和工作表编号信息存储在单独工作簿中的位置 .编辑:我添加了一张wbOpen的图片 . This is it here.Op...
  • 学习Excel技术,关注微信公众号:excelperfect有时候,我们在借助于宏快速整理和分析数据、创建报表后,需要将工作簿分发给其他人,但不想将工作簿中的宏一并...'复制当前工作簿'新工作簿不含有任何宏代码Sub Copy...
  • 一般的操作方法都是打开两个工作簿,然后选中需要移动的工作表,右键单击以后选择“移动或复制”。接下来在新的窗口里面进行设置就可以了。这种方法适合在移动数量较少的工作表的时候使用。如果有很多的工作簿,都...
  • '======================================================= '1、循环单元格取数,效率最低,不可取,...'————以上4种都需要打开外部工作簿 '5、宏表函数取数(不打开工作簿) '=========================...
  • 工作中,我们会遇到这样的场景,将多个工作表的内容合并到一个工作簿中(区别于昨天的内容:拆分工作簿),如果有这样的需求,请跟我一起来了解,怎么用VBA实现呢。1、先来说明使用前的注意事项这里是分别复制给子工作...
  • 工作中,我们会遇到这样的场景,将多个工作表的内容合并到一个工作簿中(区别于昨天的内容:拆分工作簿),如果有这样的需求,请跟我一起来了解,怎么用VBA实现呢。1、先来说明使用前的注意事项这里是分别复制给子工作...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 207
精华内容 82
关键字:

vba工作簿复制