VBA学习(76):文件合并神器/代码
1.定义变量
Dim savePath As String
Dim SaveFile As String
Dim dataFolder As String
Dim FileSystem As Object
Dim folder As Object
Dim FileExtn As String
Dim t As Integer
Dim blnCkb As Boolean
2.自定保存文件名、选择待合并文件所在文件夹
Private Sub CkbName_Click()If Me.CkbName ThenMe.TxbTitle.Visible = TrueMe.TxbTitle = "请输入保存的文件名"ElseMe.TxbTitle.Visible = FalseEnd If
End SubPrivate Sub CmdChoosePath_Click()With Application.FileDialog(msoFileDialogFolderPicker)If .Show = -1 ThendataFolder = .SelectedItems(1)ElseExit SubEnd IfEnd WithMe.TxbTargetPath = dataFolder
End Sub
3.确认按钮
Private Sub CmdConfirm_Click()On Error Resume NextApplication.ScreenUpdating = FalseSet FileSystem = CreateObject("Scripting.FileSystemObject")Set folder = FileSystem.GetFolder(dataFolder)If Me.TxbTargetPath = "" ThenMsgBox "请选择待合并文件所在文件夹!"Exit SubElseIf FileSystem.folderexists(Me.TxbTargetPath) ThendataFolder = Me.TxbTargetPathElseMsgBox "源文件夹不存在,请重新选择!"Exit SubEnd IfEnd IfIf Me.TxtSavePath = "" ThenMsgBox "请选择合并文件保存文件夹!"Exit SubElseIf FileSystem.folderexists(Me.TxtSavePath) ThensavePath = Me.TxtSavePathElseMsgBox "目标文件夹不存在,请重新选择!"Exit SubEnd IfEnd IfIf Not wContinue("即将合并文件!") Then Exit SubIf Me.OptExcel ThenCall CombineExcelElseIf Me.OptPDF ThenCall CombinePDFElseIf Me.OptWord ThenCall CombineWordElseIf Me.OptPictureToPDF ThenCall CombinePicturesToPDFEnd IfApplication.ScreenUpdating = TrueShell "explorer.exe " & savePath, vbMaximizedFocusUnload Me
End Sub
4.退出、选择保存文件夹、窗体初始化
Private Sub CmdExit_Click()Unload Me
End SubPrivate Sub CmdChooseSavePath_Click()With Application.FileDialog(msoFileDialogFolderPicker)If .Show = -1 ThensavePath = .SelectedItems(1)ElseExit SubEnd IfEnd WithMe.TxtSavePath = savePath
End SubPrivate Sub UserForm_Initialize()Me.TxtSavePath = ThisWorkbook.pathsavePath = Me.TxtSavePath
End Sub
5. 合并EXCEL文件
Private Sub CombineExcel()Dim CombineWs As WorksheetDim lastRow As Integer, lastCol As IntegerDim rng As RangeDim ws As WorksheetDim wb As Workbook, CombineWb As WorkbookIf Me.CkbName ThenIf Me.TxbTitle = "" ThenMsgBox "请输入保存的文件名"Exit SubEnd IfSaveFile = savePath & "\" & Me.TxbTitle & ".xlsx"ElseSaveFile = savePath & "\合并" & Format(Now, "YYYYMMDDhhmmss") & ".xlsx"End IfblnCkb = Me.CkbTitleSet CombineWb = Workbooks.AddOn Error Resume NextSet CombineWs = CombineWb.Worksheets("合并")On Error GoTo 0If CombineWs Is Nothing ThenSet CombineWs = CombineWb.Worksheets.AddCombineWs.Name = "合并"ElseCombineWs.Cells.ClearEnd IfFor Each file In folder.FilesFileExtn = LCase(Right(file.Name, Len(file.Name) - InStrRev(file.Name, ".") + 1))If FileExtn = ".xlsx" Or FileExtn = ".xls" ThenSet wb = Workbooks.Open(file.path)For Each ws In wb.SheetsIf t = 0 Thenws.UsedRange.Copy CombineWs.Cells(1, 1)ElselastRow = ws.Cells(Rows.Count, 1).End(xlUp).RowlastCol = ws.Cells(1, Columns.Count).End(xlToLeft).ColumnIf blnCkb ThenSet rng = ws.Range(Cells(2, 1), Cells(lastRow, lastCol))ElseSet rng = ws.Range(Cells(1, 1), Cells(lastRow, lastCol))End Ifrng.Copy CombineWs.Cells(CombineWs.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)End Ift = t + 1Nextwb.Close savechanges:=FalseEnd IfNextCombineWb.SaveAs SaveFileCombineWb.CloseSet CombineWb = NothingMsgBox "成功合并【" & t & "】个明细表!"
End Sub
6.合并PDF文件
Private Sub CombinePDF()Dim SinglePDF As Object, CombinePDF As ObjectDim pdfName As StringDim pageNum As LongIf Me.CkbName ThenIf Me.TxbTitle = "" ThenMsgBox "请输入保存的文件名"Exit SubEnd IfSaveFile = savePath & "\" & Me.TxbTitle & ".PDF"ElseSaveFile = savePath & "\合并" & Format(Now, "YYYYMMDDhhmmss") & ".PDF"End IfSet SinglePDF = CreateObject("AcroExch.PDDoc")Set CombinePDF = CreateObject("AcroExch.PDDoc")CombinePDF.Createt = 0For Each file In folder.FilesFileExtn = LCase(Right(file.Name, Len(file.Name) - InStrRev(file.Name, ".") + 1))If FileExtn = ".pdf" ThenIf SinglePDF.Open(file) ThenpageNum = SinglePDF.GetNumPagesCombinePDF.InsertPages CombinePDF.GetNumPages - 1, SinglePDF, 0, pageNum, 0SinglePDF.Closet = t + 1End IfEnd IfNextCombinePDF.Save PDSaveFull, SaveFileCombinePDF.CloseSet SinglePDF = NothingSet CombinePDF = NothingMsgBox "成功合并【" & t & "】个文件!"
End Sub
7.合并WORD文件
Private Sub CombineWord()Dim WordApp As ObjectDim WordDoc As ObjectDim wdRng As ObjectIf Me.CkbName ThenIf Me.TxbTitle = "" ThenMsgBox "请输入保存的文件名"Exit SubEnd IfSaveFile = savePath & "\" & Me.TxbTitle & ".docx"ElseSaveFile = savePath & "\合并" & Format(Now, "YYYYMMDDhhmmss") & ".docx"End IfSet WordApp = CreateObject("Word.Application")WordApp.Visible = FalseSet WordDoc = WordApp.Documents.Addt = 0For Each file In folder.FilesFileExtn = LCase(Right(file.Name, Len(file.Name) - InStrRev(file.Name, ".") + 1))If FileExtn = ".doc" Or FileExtn = ".docx" ThenWordDoc.Application.Selection.InsertFile file.path, "", False, FalseWordDoc.Application.Selection.EndKey 6If Me.CkbPageBreak ThenWordDoc.Application.Selection.InsertBreak Type:=7 ' wdPageBreakEnd Ift = t + 1End IfNextWordDoc.SaveAs2 SaveFile, 16WordDoc.CloseWordApp.QuitSet WordDoc = NothingSet WordApp = NothingMsgBox "成功合并【" & t & "】个文件!"
End Sub
8.合并图片文件为PDF
Private Sub CombinePicturesToPDF()Dim SinglePDF As Object, CombinePDF As ObjectDim pdfName As StringDim pageNum As LongIf Me.CkbName ThenIf Me.TxbTitle = "" ThenMsgBox "请输入保存的文件名"Exit SubEnd IfSaveFile = savePath & "\" & Me.TxbTitle & ".PDF"ElseSaveFile = savePath & "\合并" & Format(Now, "YYYYMMDDhhmmss") & ".PDF"End IftempFolder = Environ("TEMP")Set SinglePDF = CreateObject("AcroExch.PDDoc")Set CombinePDF = CreateObject("AcroExch.PDDoc")CombinePDF.Createt = 0For Each file In folder.FilesFileExtn = LCase(Right(file.Name, Len(file.Name) - InStrRev(file.Name, ".") + 1))If FileExtn Like ".jpg" Or FileExtn Like ".jpeg" Or FileExtn Like ".png" Or FileExtn Like ".bmp" ThenpdfName = ConvertPicToPDF(file, tempFolder)If SinglePDF.Open(pdfName) ThenpageNum = SinglePDF.GetNumPagesCombinePDF.InsertPages CombinePDF.GetNumPages - 1, SinglePDF, 0, pageNum, 0SinglePDF.CloseEnd Ift = t + 1End IfNextCombinePDF.Save PDSaveFull, SaveFileCombinePDF.CloseSet SinglePDF = NothingSet CombinePDF = NothingMsgBox "成功合并【" & t & "】个文件!"
End Sub
9.自定义函数取得图片转PDF文件名、确认继续
Function ConvertPicToPDF(picName, pdfPath) As StringDim acroAVDoc As ObjectDim newPDF As ObjectDim acroApp As ObjectDim pdfName As StringSet acroApp = CreateObject("AcroExch.App")acroApp.ShowSet acroAVDoc = CreateObject("AcroExch.AVDoc")FileExtn = LCase(Right(picName, Len(picName) - InStrRev(picName, ".") + 1))'StopIf FileExtn Like ".jpg" Or FileExtn Like ".jpeg" Or FileExtn Like ".png" Or FileExtn Like ".bmp" ThenpdfName = Mid(picName, InStrRev(picName, "\") + 1, InStrRev(picName, ".") - InStrRev(picName, "\") - 1) & "_" & Format(Now, "YYYYMMDDhhmmss") & ".pdf"acroAVDoc.Open picName, "Acrobat"Do Until acroAVDoc.IsValidDoEventsLoopSet newPDF = acroAVDoc.GetPDDocnewPDF.Save 1, pdfPath & "\" & pdfName ' 1 is AcroAVDocSaveAsType.acSaveFullnewPDF.CloseEnd IfacroAVDoc.Close 1ConvertPicToPDF = pdfPath & "\" & pdfName
End Function
Function wContinue(Msg) As Boolean'确认继续函数Dim Config As LongDim a As LongConfig = vbYesNo + vbQuestion + vbDefaultButton2Ans = MsgBox(Msg & Chr(10) & Chr(10) & "是(Y)继续?" & Chr(10) & Chr(10) & "否(N)退出!", Config)wContinue = Ans = vbYes
End Function
相关文章:
VBA学习(76):文件合并神器/代码
1.定义变量 Dim savePath As String Dim SaveFile As String Dim dataFolder As String Dim FileSystem As Object Dim folder As Object Dim FileExtn As String Dim t As Integer Dim blnCkb As Boolean 2.自定保存文件名、选择待合并文件所在文件夹 Private Sub CkbName_…...
非农就业数据超预期,美联储降息步伐或放缓?
KlipC报道:当地时间10月4日,美国劳工部发布了最新的非农就业数据。数据显示,9月非农就业人数增加25.4万人,远超市场预期。失业率为4.1%,比上月略降0.1个百分点。平均时薪环比增长0.4%,亦高于市场预期。此外…...
每日OJ题_牛客_乒乓球筐_哈希_C++_Java
目录 牛客_乒乓球筐_哈希 题目解析 C代码 Java代码 牛客_乒乓球筐_哈希 乒乓球筐__牛客网 (nowcoder.com) 描述: nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类&#…...
基于SpringBoot+Vue的酒店客房管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
检索增强思考 RAT(RAG+COT):提升 AI 推理能力的强大组合
在人工智能领域,大型语言模型(LLMs)已经取得了显著的进展,能够生成类似人类的文本并回答各种问题。然而,它们在推理过程中仍面临一些挑战,例如缺乏对事实的准确把握以及难以处理复杂的多步骤问题。为了解决…...
python脚本实现Redis未授权访问漏洞利用
之前介绍过Redis未授权访问漏洞,本文使用python实现Redis未授权访问检测以及对应三种getshell。 1 测试环境准备 CentOS 7(192.168.198.66/24):安装 Redis 服务器并用 root 权限开启服务,关闭保护模式;安…...
简单线性回归分析-基于R语言
本题中,在不含截距的简单线性回归中,用零假设对统计量进行假设检验。首先,我们使用下面方法生成预测变量x和响应变量y。 set.seed(1) x <- rnorm(100) y <- 2*xrnorm(100) (a)不含截距的线性回归模型构建。 &…...
上海理工大学《2023年+2019年867自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《上海理工大学867自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2023年真题 2019年真题 Part1:2023年2019年完整版真题 2023年真题 2019年…...
计算机网络面试题——第三篇
1. TCP超时重传机制是为了解决什么问题 因为TCP是一种面向连接的协议,需要保证数据可靠传输。而在数据传输过程中,由于网络阻塞、链路错误等原因,数据包可能会丢失或者延迟到达目的地。因此,若未在指定时间内收到对方的确认应答&…...
Elasticsearch 开放推理 API 增加了对 Google AI Studio 的支持
作者:来自 Elastic Jeff Vestal 我们很高兴地宣布 Elasticsearch 的开放推理 API 支持 Gemini 开发者 API。使用 Google AI Studio 时,开发者现在可以与 Elasticsearch 索引中的数据进行聊天、运行实验并使用 Google Cloud 的模型(例如 Gemin…...
react-问卷星项目(7)
实战 React表单组件 入门 重点在于change的时候改变state的值,类似vue的双向数据绑定v-model,即数据更新的时候页面同步更新,页面数据更新时数据源也能获得最新的值,只是Vue中设置在data中的属性默认绑定,React中需…...
【git】main|REBASE 2/6
很久没合并代码合并出现冲突,自动进入了 main|REBASE 2/6 的提示: 【git】main|REBASE 2/6 It looks like you’ve encountered several merge conflicts after a git pull operation while a rebase is in progress. Here’s how you can resolve these conflict…...
51单片机的水质检测系统【proteus仿真+程序+报告+原理图+演示视频】
1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器ph传感器浑浊度传感器蓝牙继电器LED、按键和蜂鸣器等模块构成。适用于水质监测系统,含检测和调整水温、浑浊度、ph等相似项目。 可实现功能: 1、LCD1602实时显示水温、水体ph和浑浊度 2、温…...
【python面试宝典7】线程池,模块和包
目录标 题目37:解释一下线程池的工作原理。题目38:举例说明什么情况下会出现KeyError、TypeError、ValueError。题目39:说出下面代码的运行结果。题目40:如何读取大文件,例如内存只有4G,如何读取一个大小为…...
Android input系统原理二
1.inputmanager启动源码分析 在SystemServer.java中构造了 inputmanagerservice的对象,在其构造函数中,最重要的是这个nativeInit函数。 下面是核心代码 inputManager new InputManagerService(context);public InputManagerService(Context context)…...
Oracle登录报错-ORA-01017: invalid username/password;logon denied
接上文:Oracle创建用户报错-ORA-65096: invalid common user or role name 我以为 按照上文在PDB里创建了用户,我以为就可以用PLSQL远程连接了,远程服务器上也安装了对应版本的Oracle客户端,但是我想多了,客户只是新建…...
JavaScript 获取浏览器本地数据的4种方式
JavaScript 获取浏览器本地数据的方式 我们在做Web开发中,客户端存储机制对于在浏览器中持久化数据至关重要。这些机制允许开发者存储用户偏好设置、应用状态以及其他关键信息,从而增强用户体验。本文将介绍几种常用的JavaScript获取浏览器本地数据的方…...
77寸OLED透明触摸屏有哪些应用场景
说到77寸OLED透明触摸屏,那可真是市场营销中的一大亮点,应用场景多到数不清!我这就给你细数几个热门的: 商业展示:这可是77寸OLED透明触摸屏的拿手好戏!在高端零售店铺里,它可以作为陈列窗口&am…...
二分解题的奇技淫巧都有哪些,你还不会吗?
先说一下我为什么要写这篇文章。 “二分“ 查找 or ”二分“ 答案的思想大家想必都知道吧(如果不懂,可以看一下我之前写的一篇文章)。 二分求解 可是呢?思想都会,做题的时候,就懵圈了。 这个题竟然考的是…...
LeetCode-871 最低加油次数
重启力扣每日一题系列! 因为过去两个月里掉粉掉的好严重,我想大抵是因为更新的频率不如上半年了,如果我重启了每日一题系列那岂不是至少是每日一更☝🤓? 也不是每天都更,我有两不更,特难的就不…...
GLM-OCR性能基准测试报告:对比不同GPU型号上的推理速度与成本
GLM-OCR性能基准测试报告:对比不同GPU型号上的推理速度与成本 最近在做一个文档数字化的项目,需要处理大量扫描件和图片里的文字。选型的时候,自然就盯上了各种OCR模型。GLM-OCR作为国产大模型阵营里的一员,表现一直挺亮眼&#…...
如何将闲置Globe键重构为效率引擎?Karabiner-Elements自定义修饰键全指南
如何将闲置Globe键重构为效率引擎?Karabiner-Elements自定义修饰键全指南 【免费下载链接】Karabiner-Elements Karabiner-Elements is a powerful utility for keyboard customization on macOS Sierra (10.12) or later. 项目地址: https://gitcode.com/gh_mirr…...
Modbus转EtherCAT网关开发秘笈:用AX58100实现120个命令自动映射(Web配置全图解)
Modbus转EtherCAT网关开发实战:AX58100零代码配置与工业部署全指南 工业自动化领域正经历着从传统串行通信向实时以太网协议的转型浪潮。作为这场变革的核心枢纽,协议转换网关的性能直接决定了整个系统的响应速度和稳定性。本文将深入探讨如何利用AX5810…...
猫抓资源嗅探扩展:5大核心功能彻底解析网络媒体捕获技术
猫抓资源嗅探扩展:5大核心功能彻底解析网络媒体捕获技术 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(Cat-Catch)是一款开源免费的浏览器资源嗅探扩展&…...
告别演唱会抢票焦虑:大麦网Python自动化抢票脚本终极指南
告别演唱会抢票焦虑:大麦网Python自动化抢票脚本终极指南 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为心仪歌手的演唱会门票秒光而烦恼吗?还在为黄牛高价票而心痛…...
Vue3+monaco-editor实战:如何让代码编辑器完美适应侧边栏折叠?
Vue3与monaco-editor深度整合:动态布局的工程化实践 侧边栏折叠交互已成为现代Web应用的标配功能,但当这种动态布局遇上代码编辑器这类复杂组件时,开发者往往会遇到布局错位、滚动条异常等顽固问题。本文将分享在Vue3项目中实现monaco-editor…...
Nunchaku-flux-1-dev在Typora文档中的自动插图生成
Nunchaku-flux-1-dev在Typora文档中的自动插图生成 1. 引言 写技术文档最头疼的是什么?对我来说,一定是配图。每次写到关键的技术概念或者流程说明,都得停下来去找合适的示意图,或者打开绘图工具手动制作。不仅打断思路…...
智能家居系统部署终极指南:5分钟搞定全流程配置
智能家居系统部署终极指南:5分钟搞定全流程配置 【免费下载链接】operating-system :beginner: Home Assistant Operating System 项目地址: https://gitcode.com/gh_mirrors/op/operating-system Home Assistant Operating System(原HassOS&…...
5步精通MQTT性能测试:从插件部署到高并发压测实践指南
5步精通MQTT性能测试:从插件部署到高并发压测实践指南 【免费下载链接】mqtt-jmeter MQTT JMeter Plugin 项目地址: https://gitcode.com/gh_mirrors/mq/mqtt-jmeter 在物联网应用架构中,MQTT协议以其轻量级特性成为设备通信的首选方案。随着设备…...
VDisk技术详解:原理、应用与优化实践指南
VDisk技术详解:原理、应用与优化实践指南传统的桌面运维管理面临效率和成本控制的双重挑战,例如操作系统和应用部署繁琐、维护更新困难、资源利用率低等。VDisk(虚拟磁盘)技术通过将操作系统、应用程序和用户数据集中存储在服务器…...
