精华内容
下载资源
问答
  • 多个按钮共用一个事件,用VBA开发的小例子。
  • 一个按钮点击一次即可运行1、2、3、4、5、6、7.代码怎么写?
  • 这里帮他们搞了个xlsm小工具,直接将一个工作簿中的多个sheet合并为1个。 小工具界面 打开文件,里边有操作表sheet以及结果表sheet。操作表是选择文件,或者填写一些合并的一些参数。合并后的数据,显示在结果表...

    科普:xls格式最多就65535行,xlsx格式最多是1048576行。

    有时候办公室同事从系统上导出表,当数据量过大的时候,系统都会拆分成多个sheet来导出,每个sheet的表结构一致。
    他们需要将sheet合并,这样以便做筛选,做透视表。

    这里帮他们搞了个xlsm小工具,直接将一个工作簿中的多个sheet合并为1个。

    小工具界面

    打开文件,里边有操作表sheet以及结果表sheet。操作表是选择文件,或者填写一些合并的一些参数。
    合并后的数据,显示在结果表sheet中。

    当时他给我看的工作簿,有40+个sheet,每个sheet有6.5w行,总数就是266.5w条数据,由于单个sheet最多只能是104w条,只能建议他合并为3个sheet,再分别做透视表了。

    sheet起点、终点,是指需要从第几个sheet作为起点,一路合并到终点sheet,这里填的是整数值,也可以不填。
    在这里插入图片描述

    造测试工作簿

    新建了一个工作簿,里边两个sheet,数据内容如下图所示。
    在这里插入图片描述
    在这里插入图片描述

    使用步骤

    打开小工具,点击按钮,可以选择文件。我们选择刚刚造的工作簿。然后后台就开始合并了。
    在这里插入图片描述

    合并结束时,界面会弹框提示,左侧也会罗列一下相关信息。
    在这里插入图片描述
    合并的结果在结果表sheet中。
    在这里插入图片描述

    vba代码

    Private Sub CommandButton1_Click()
    Dim k
    Dim start_pos As Integer
    Dim end_pos As Integer
    
    
    '清空sheet
    Sheets("结果表").Range("A:ZZ").Clear
    '选择文件
    Dim filePath As String
    filePath = getFile()
    If filePath = "" Then Exit Sub
    
    '获取参数
    start_pos = ThisWorkbook.Sheets("操作表").Range("B7")
    end_pos = ThisWorkbook.Sheets("操作表").Range("B8")
    If start_pos > end_pos Then
        MsgBox ("起点比终点大?请检查。")
        Exit Sub
    End If
    
    '打开目标文件
    Set k = Workbooks.Open(filePath)
    Dim totalSheet As Integer
    totalSheet = k.Sheets.Count
    
    
    If start_pos <= 0 Then
        start_pos = 1
    ElseIf start_pos > totalSheet Then
        start_pos = totalSheet
    End If
    
    If end_pos = 0 Then
        end_pos = totalSheet
    ElseIf end_pos > totalSheet Then
        end_pos = totalSheet
    End If
    
    '遍历要合并sheet的工作簿
    Dim cnt As Integer
    cnt = 1
    For Each sh In k.Sheets
        If cnt >= start_pos And cnt <= end_pos Then= ThisWorkbook.Sheets("结果表").Range("A1040000").End(xlUp).Row + 1
            sh.UsedRange.Copy ThisWorkbook.Sheets("结果表").Range("A" &)
        End If
        cnt = cnt + 1
    Next
     
    '关闭目标文件
    k.Close SaveChanges:=False
    
    '输出数据
    ThisWorkbook.Sheets("操作表").Range("A5") = "文件名:"
    ThisWorkbook.Sheets("操作表").Range("A6") = "sheet总数:"
    ThisWorkbook.Sheets("操作表").Range("A7") = "sheet起点:"
    ThisWorkbook.Sheets("操作表").Range("A8") = "sheet终点:"
    
    ThisWorkbook.Sheets("操作表").Range("B5") = filePath
    ThisWorkbook.Sheets("操作表").Range("B6") = totalSheet
    ThisWorkbook.Sheets("操作表").Range("B7") = start_pos
    ThisWorkbook.Sheets("操作表").Range("B8") = end_pos
    
    MsgBox ("已生成,请检查,已复制文件" & filePath & "的第" & start_pos & "个至第" & end_pos & "个sheet")
    
    End Sub
    
    
    Function getFile()
    '获取文件完整路径及文件名
    
    '显示打开文件夹对话框
    Set FileDialogObj = Application.FileDialog(msoFileDialogFilePicker)
    With FileDialogObj
        .Title = "请选择文件"
        .AllowMultiSelect = False
    End With
    
    '选择文件
    FileDialogObj.Show
    If FileDialogObj.SelectedItems.Count > 0 Then
        getFile = FileDialogObj.SelectedItems(1)
    Else
        getFile = ""
        MsgBox ("未选择文件")
    End If
    
    End Function
    
    
    
    

    文件下载

    xlsm下载链接

    展开全文
  • VBA宏批量处理多个Word文档

    千次阅读 2021-01-20 11:19:45
    工作里面需要处理上百Word文档,所以就开始在网上查找相关的代码 由于第次接触相关的代码,所以写得肯定不会很好。不过,最后勉强算是解决了问题,为了以后方便查找,就把代码贴上来。     开启、...

    前言

    工作里面需要处理上百个Word文档,所以就开始在网上查找宏相关的代码
    由于第一次接触宏相关的代码,所以写得肯定不会很好。不过,最后勉强算是解决了问题,为了以后方便查找,就把代码贴上来。

     
     

    开启、编写宏

    在这里插入图片描述
    在这里插入图片描述
    勾选上图中的开发工具,就可以显示宏相关的菜单栏了
    在这里插入图片描述
    点击红框内按钮,就可以开始编写和运行宏了

     
     

    具体代码

    Sub 批量操作WORD()
          Application.ScreenUpdating = False '冻结屏幕,打开各个文件及关闭时屏幕不会晃眼睛,但不知道为什么没有效
    
        Dim MyFileName, Dic, Did, i, fileCount, startTime, runTime, MyDocumentName
           'On Error Resume Next
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.BrowseForFolder(0, "选择文件夹", 0, 0)
        If Not objFolder Is Nothing Then lj = objFolder.self.path & "\"
        Set objFolder = Nothing
        Set objShell = Nothing
        startTime = Time
        Set Dic = CreateObject("Scripting.Dictionary")    '创建一个字典对象
        Set Did = CreateObject("Scripting.Dictionary")
        Dic.Add (lj), ""
        i = 0 'i变量用来控制循环的结束
        Do While i < Dic.Count
            Ke = Dic.keys   '开始遍历字典
            MyFileName = Dir(Ke(i), vbDirectory)    '查找目录
            Do While MyFileName <> ""
                If MyFileName <> "." And MyFileName <> ".." Then
                  If (GetAttr(Ke(i) & MyFileName) And vbDirectory) = vbDirectory Then    '如果是次级目录
                      Dic.Add (Ke(i) & MyFileName & "\"), ""  '就往字典中添加这个次级目录名作为一个条目
                  End If
                End If
                MyFileName = Dir    '继续遍历寻找
            Loop
            i = i + 1
        Loop
        For Each Ke In Dic.keys
            MyDocumentName = Dir(Ke & "*.doc*")  '填写所指定的文件类型
            Do While MyDocumentName <> ""
                Did.Add (Ke & MyDocumentName), ""
                MyDocumentName = Dir
            Loop
        Next
        Dim worddoc   As Document
        fileCount = 0
    
        For Each path In Did
            Set worddoc = Documents.Open(path)
            worddoc.Activate
            Call 处理WORD  '调用宏,换成具体操作word的宏
            worddoc.Close True
            fileCount = fileCount + 1
        Next
        Set worddoc = Nothing
        runTime = Time - startTime
        Application.ScreenUpdating = True '解冻屏幕,让屏幕恢复正常刷新,同样也不知道为什么不起效
        MsgBox Minute(runTime) & "分" & Second(runTime) & "秒" & "内处理了" & Str(fileCount) & "个word文档"
    End Sub
    
    
    
    Sub 处理WORD()
       Set myRange = ActiveDocument.Content
       '下面就是一些替换操作的代码,可以自行更换为需要的代码
       myRange.Find.Execute FindText:="2020", ReplaceWith:="2021", Replace:=wdReplaceAll
       myRange.Find.Execute FindText:="2日", ReplaceWith:="5日", Replace:=wdReplaceAll
       myRange.Find.Execute FindText:="10日", ReplaceWith:="14日", Replace:=wdReplaceAll
       myRange.Find.Execute FindText:="WB200", ReplaceWith:="WB300", Replace:=wdReplaceAll
    End Sub
    

    这段代码并不完善,感觉存在着下面两个问题:

    1. 无法识别有特殊字符的文件名。如果遇到这样的文件就会处理失败。我自己出现这种情况,就会在提示失败时,选择进入调试模块,然后用鼠标放在下面代码处的MyFileName的变量名上查看出现问题的文件名

    MyFileName = Dir(Ke(i), vbDirectory) '查找目录

    1. 在处理过程中无法冻结屏幕
    展开全文
  • 如果是佛系青年,那么就会选择用VBA来一键搞定多个Excel表格合并至一个表格。请将1月至6月的表格合并在一个表格中。操作步骤:1、 如果以上表格不在同一个文件夹内,先复制到同一个文件夹内2、 在文件夹的空白处,...

    在工作中有时候我们需要将多个Excel表格合并到一个表格中。如果是二逼青年,会选择一个个复制,痛苦不堪。如果是佛系青年,那么就会选择用VBA来一键搞定多个Excel表格合并至一个表格。

    请将1月至6月的表格合并在一个表格中。

    操作步骤:

    1、 如果以上表格不在同一个文件夹内,先复制到同一个文件夹内

    2、 在文件夹的空白处,新建一个表格并打开,右击sheet1表格——查看代码,会出现VBA编辑界面:

    3、 复制代码到窗口里,代码如下:

    Sub 合并当前目录下所有工作簿的全部工作表()

    Dim MyPath,MyName, AWbName

    Dim Wb AsWorkbook, WbN As String

    Dim G As Long

    Dim Num As Long

    Dim BOX As String

    Application.ScreenUpdating= False

    MyPath =ActiveWorkbook.Path

    MyName =Dir(MyPath & "\" & "*.xls")

    AWbName =ActiveWorkbook.Name

    Num = 0

    Do While MyName<> ""

    If MyName<> AWbName Then

    Set Wb =Workbooks.Open(MyPath & "\" & MyName)

    Num = Num + 1

    WithWorkbooks(1).ActiveSheet

    .Cells(.Range("B65536").End(xlUp).Row+ 2, 1) = Left(MyName, Len(MyName) - 4)

    For G = 1 ToSheets.Count

    Wb.Sheets(G).UsedRange.Copy.Cells(.Range("B65536").End(xlUp).Row + 1, 1)

    Next

    WbN = WbN &Chr(13) & Wb.Name

    Wb.Close False

    End With

    End If

    MyName = Dir

    Loop

    Range("B1").Select

    Application.ScreenUpdating= True

    MsgBox "共合并了"& Num & "个工作薄下的全部工作表。如下:" &Chr(13) & WbN, vbInformation, "提示"

    End Sub

    4、 单击宏计算菜单——运行——运行子过程,操作界面如下:

    5、 等候大约十秒,就能把所有表格数据合并到一个表格中。

    6、 打开新的表格,筛选,将多余的标题行删掉。

    Gif操作如下:

    展开全文
  • VBA一招解决病毒

    2020-12-29 17:56:16
    比如:关闭了Excel后,还有一个空白的页面需要关闭,比如每次换一个Excel页面,都有弹一个窗口说“XX找不到”等等,我们的Excel文件中充斥着各种各种不威胁表格数据存储但是很烦人的病毒,今天教大家设置以下即可...

    VBA一招解决宏病毒

    工作中,看见许多小伙伴被Excel中宏病毒折腾的无可奈何,因为要使用VBA代码,所以默默的忍受着宏病毒带来的不快。比如:关闭了Excel后,还有一个空白的页面需要关闭,比如每次换一个Excel页面,都有弹一个窗口说“XX找不到”等等,我们的Excel文件中充斥着各种各种不威胁表格数据存储但是很烦人的宏病毒,今天教大家设置以下即可永久解决宏病毒问题。

    解决思路

    一、宏设置

    Excel选项——信任中心——信任中心设置——宏设置中有个选项,禁用无数字签署的所有宏,如下图:设置完成后保存关闭文件!

    Excel宏设置

    二、创建数字签署证书

    1. 在C盘目录"C:\Program Files\Microsoft Office\root\Office16"下找到:SELFCERT.EXE文件,如果你的不是office2016或者365,可以在"C:\Program Files"或者"C:\Program Files(X86)"中查找SELFCERT.EXE,图标如下:
      SELFCERT地址

    2. 双击SELFCERT.EXE,弹出如下第二张图界面,在红框中输入任意名称,最好是有意义的名称。比如:XXX证书,最后点击确定。
      创建证书界面

    三、给已经确定安全无病毒的宏进行数字签名

    1. 打开Excel后缀为xlsm的宏文件,点击开发工具选项(开发工具选项找不到的,百度查找显示方法)中的 Visual Basic选项进入VBA界面。
      VBE入口

    2. 点击 Visual Basic,进入如下VBE,在点击工具选项下的数字签名,如下图所示
      数字签名地址

    3. 然后回弹出如下弹框,证书名称就是你刚才在selfcret.exe中新建的名称,点击选择按键,再点击确定按钮。即可将此工作簿内的VBA代码签署为有证书确定人的VBA。意味着你已经确定该工作簿中的代码是安全的,可以运行的,好比你用手再纸制文件上按了手印一样,此宏经过了你允许。最后,记得保存后关闭Excel文件,再此打开数字签名才有效。
      数字签名弹框

    4. 最后,有些时候,再此打开的文件表头会提示宏已被禁止,是否启用,点击启用即可!后续所有新的VBA都需要手动签名后才可以运行,当然复制excel表格的话可以不用重新签署!
      点击启用宏文件

    四、联系我

    欢迎关注公众号:Python利剑,获取更多精彩文章!

    微信公众号

    展开全文
  • word编程以及VBA

    万次阅读 多人点赞 2018-12-03 19:55:37
    一个批量处理程序命令,正确地运用它可以提高工作效率。微软的office软件允许用户自己编写,叫VBA的脚本来增加其灵活性,进一步扩充它的能力。 如完成一个一打开word文件同时要打开某个文件的功能,必须要自己...
  • 系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容。 1. 注释 代码注释是件利人利己的...VBA中有两种注释的方法,其是使用单引号,另种是Rem。在单引号后面或Rem后面的所有内...
  • VBA-合并多个工作簿

    万次阅读 多人点赞 2019-06-14 15:54:28
    1.首先我们理清思路,我们将所有要合并到一起的Excel工作簿放到一个文件夹里,该文件夹里面有一个启用的工作表,启动该工作表的,就可以将该文件夹里面的所有Excel文件的内容合并到一张表里面,后面可以将合并...
  • Excel-VBA

    千次阅读 2019-04-11 22:33:55
    文章目录1 什么是VBA2 2.1 打开Excel的开发工具功能2.2 初级2.3 使用相对引用2.4 制作工资条2.5 添加表单控件3 VBA3.1 VBA编码语法3.2 变量3.2.1 定义变量3.2.2 变量名的命名规则3.2.3 变量的赋值3.3 数据类型...
  • VBA实现多个Sheet页匹配关键字并汇总

    千次阅读 2018-06-06 10:36:28
    初次写博客,错误之处请包涵。... 实现思路:打开excel,新建一个新sheet页,运行,在用户界面输入需要匹配的关键字,多个关键字按照英文逗号隔开,点击确认,循环sheet页进行匹配,并写入新建...
  • 首先看下图,注意,在相同的文件夹内,有一个工作薄的名称为“合并数据.xls”,其它的工作薄呢,有很多个,并且,有几个也不知道,我们姑且认为有X个其它的工作薄吧,并且,这些工作薄的名称也是没有任何规律的。...
  • Excel利用进行VBA编程

    千次阅读 2019-11-11 14:32:45
    Excel的宏功能强大,可以实现我们的很目的,但是一谈到宏,很多人都觉得很难。在这篇文章里,我通过教大家写一个简单的宏,让大家对excel宏有...1.首先,要写一个宏,我们要把相应的工具栏给显示出来。打开excel表...
  • 前言step 1 进入excel vba编程界面step 2 粘贴代码step 3 运行代码step 4 删除代码 前言 这两天接触到excel比较,才发现使用excel不仅仅是简单的复制粘贴。 excel vb代码是非常强大,学会使用一些常用的功能,...
  • word vba宏 The goal of this course is to help people who have never written a program before learn to write one. There's no reason why office workers, homemakers, professional engineers and pizza ...
  • 朋友工作中有多个Word文件,每次做更新时都要更新文档内的日期,每次手工更改都比较耗费时间,加上公司电脑不能装未授权的软件,且只支持英文,于是就根据这个需求,参考一些网上的代码,并做了一些升级,增加了界面...
  • 按Alt+F11,打开VBA编辑器,在代码窗口中粘贴下列代码,代码大同小异。 1、保存全部表格,不保留分表格式 Sub 复制() Dim Sh As Worksheet Dim wb As Workbook Dim cPath$, cFile$, nR1&, nR2&, Arr()...
  • 功能区按钮调用Excel、PowerPoint、...不过,当你开发完一个工具的时候,一定会想到这些过程的执行方式,普遍的做法是向工作表上放置表单控件,用户在工作表上点击按钮来执行。 另外的方式,就是利用CustomUI技...
  • 以WPS 2019版本为例:关于excel怎么快速合并多个工作表数据到一个工作表,您可使用WPS参考下述步骤zd完成操作:1、打开「表格(Excel)」文档;2、点击「数据-合并表格-多个工作表合并成内一个工作表」;3、勾选需合并...
  • 工作中,我们有时会需要将多个工作表Sheet的名称提取出来,制作成一个目录 如果一个一个去复制粘贴,效率肯定是很低的,如果Sheet数量很多,会严重影响我们的工作进度,那该如何处理呢?我们可以用VBA的方法快速处理...
  • VBA一键sheet页另存为Excel,批量拆分Excel sheet页为单个文档。
  • Excel VBA 获取按钮对象

    2017-01-18 17:37:00
    今天给同事写了两个VBA宏,并分别把赋给了两个按钮。 因为两个宏都是实现在两种显示方式之间...先说明,我的按钮是 开发者菜单-插入-表单控件 默认下面的第一个。如下图 插入控件之后,可以直接在左上角显示单...
  • 最近在做项目的时候用到了ExcelVBA,本着共享的原则,我把收集的资料结合项目实践操作进行了总结之后制作了本教程,旨在帮初学者入门,特别是有一定VB基础的同学,可以通过此教程快速掌握VBA。 什么是 ...
  • wps是款办公软件,一直以免费且高效收到广大用户喜爱,wps只有本地功能、用户可选恢复功能、不带联网内容和模块、无多余连接按钮等.,内存占用低,运行速度快,体积小巧。 软件介绍 WPS Office是由金山软件股份...
  • excel 259个宏

    2020-01-15 10:28:39
    excel 259个常用 循环 高级筛选5列不重复数据至指定表 双击指定区域单元执行(工作表代码) 在多个宏中依次循环执行一个(控件按钮代码) 等等
  • CATIA VBA二次开发()快速入门之脚本

    万次阅读 多人点赞 2016-06-24 23:26:26
    本文是第篇介绍CATIA VBA二次开发的文章,后续文章会陆续发表。
  • 现要求:给出一个空汇总表,给出若干单独的Excel文件,每个文件里头有一个表格里存有一个人的信息,要将这些文件里的信息全部对应地导入到汇总表里. 以前写的,也不给实际例子了,直接上代码,逻辑不复杂,看看就明白.记在...
  • VBA-将添加到选项卡(简易版)

    千次阅读 2019-09-27 17:29:15
    简单介绍一下在Office中将添加到选项卡的简易方法(UI介面操作法和VBA法)。
  • 步骤1 单击“开发工具”选项卡中的“录制按钮。 步骤2 在打开的“录制新宏”窗口中进行如图1-5所示的设置后单击“确定”按钮。 步骤3 选中“H:L”列后,单击鼠标右键,在弹出的快捷菜单中单击“删除”按钮,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,498
精华内容 999
关键字:

vba一个按钮多个宏