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 最低加油次数
重启力扣每日一题系列! 因为过去两个月里掉粉掉的好严重,我想大抵是因为更新的频率不如上半年了,如果我重启了每日一题系列那岂不是至少是每日一更☝🤓? 也不是每天都更,我有两不更,特难的就不…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
Yii2项目自动向GitLab上报Bug
Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...