excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 文件合并神器/代码

本文于2023年7月31日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!

内容提要

  • 文件合并神器代码

定义变量

Dim savePath As StringDim SaveFile As StringDim dataFolder As StringDim FileSystem As ObjectDim folder As ObjectDim FileExtn As StringDim t As IntegerDim blnCkb As Boolean‍

自定保存文件名、选择待合并文件所在文件夹

Private Sub CkbName_Click()    If Me.CkbName Then        Me.TxbTitle.Visible = True        Me.TxbTitle = "请输入保存的文件名"    Else        Me.TxbTitle.Visible = False    End IfEnd SubPrivate Sub CmdChoosePath_Click()    With Application.FileDialog(msoFileDialogFolderPicker)        If .Show = -1 Then            dataFolder = .SelectedItems(1)        Else            Exit Sub        End If    End With    Me.TxbTargetPath = dataFolderEnd Sub

确认按钮

Private Sub CmdConfirm_Click()    On Error Resume Next    Application.ScreenUpdating = False    Set FileSystem = CreateObject("Scripting.FileSystemObject")    Set folder = FileSystem.GetFolder(dataFolder)    If Me.TxbTargetPath = "" Then        MsgBox "请选择待合并文件所在文件夹!"        Exit Sub    Else        If FileSystem.folderexists(Me.TxbTargetPath) Then                        dataFolder = Me.TxbTargetPath        Else            MsgBox "源文件夹不存在,请重新选择!"            Exit Sub        End If            End If    If Me.TxtSavePath = "" Then        MsgBox "请选择合并文件保存文件夹!"        Exit Sub    Else        If FileSystem.folderexists(Me.TxtSavePath) Then             savePath = Me.TxtSavePath        Else            MsgBox "目标文件夹不存在,请重新选择!"            Exit Sub        End If    End If    If Not wContinue("即将合并文件!") Then Exit Sub    If Me.OptExcel Then        Call CombineExcel    ElseIf Me.OptPDF Then        Call CombinePDF    ElseIf Me.OptWord Then        Call CombineWord    ElseIf Me.OptPictureToPDF Then        Call CombinePicturesToPDF    End If    Application.ScreenUpdating = True    Shell "explorer.exe " & savePath, vbMaximizedFocus    Unload MeEnd Sub

退出、选择保存文件夹、窗体初始化

Private Sub CmdExit_Click()    Unload MeEnd SubPrivate Sub CmdChooseSavePath_Click()    With Application.FileDialog(msoFileDialogFolderPicker)        If .Show = -1 Then            savePath = .SelectedItems(1)        Else            Exit Sub        End If    End With    Me.TxtSavePath = savePathEnd SubPrivate Sub UserForm_Initialize()    Me.TxtSavePath = ThisWorkbook.path    savePath = Me.TxtSavePathEnd Sub

合并EXCEL文件

Private Sub CombineExcel()    Dim CombineWs As Worksheet    Dim lastRow As Integer, lastCol As Integer    Dim rng As Range    Dim ws As Worksheet    Dim wb As Workbook, CombineWb As Workbook    If Me.CkbName Then        If Me.TxbTitle = "" Then            MsgBox "请输入保存的文件名"            Exit Sub        End If        SaveFile = savePath & "\" & Me.TxbTitle & ".xlsx"    Else        SaveFile = savePath & "\合并" & Format(Now, "YYYYMMDDhhmmss") & ".xlsx"    End If    blnCkb = Me.CkbTitle    Set CombineWb = Workbooks.Add    On Error Resume Next    Set CombineWs = CombineWb.Worksheets("合并")    On Error GoTo 0    If CombineWs Is Nothing Then        Set CombineWs = CombineWb.Worksheets.Add        CombineWs.Name = "合并"    Else        CombineWs.Cells.Clear    End If    For Each file In folder.Files        FileExtn = LCase(Right(file.Name, Len(file.Name) - InStrRev(file.Name, ".") + 1))        If FileExtn = ".xlsx" Or FileExtn = ".xls" Then            Set wb = Workbooks.Open(file.path)            For Each ws In wb.Sheets                If t = 0 Then                    ws.UsedRange.Copy CombineWs.Cells(1, 1)                Else                    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row                    lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column                    If blnCkb Then                        Set rng = ws.Range(Cells(2, 1), Cells(lastRow, lastCol))                    Else                        Set rng = ws.Range(Cells(1, 1), Cells(lastRow, lastCol))                    End If                    rng.Copy CombineWs.Cells(CombineWs.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)                End If                t = t + 1            Next            wb.Close savechanges:=False        End If    Next    CombineWb.SaveAs SaveFile    CombineWb.Close    Set CombineWb = Nothing    MsgBox "成功合并【" & t & "】个明细表!"End Sub

合并PDF文件

Private Sub CombinePDF()    Dim SinglePDF As Object, CombinePDF As Object    Dim pdfName As String    Dim pageNum As Long        If Me.CkbName Then        If Me.TxbTitle = "" Then            MsgBox "请输入保存的文件名"            Exit Sub        End If        SaveFile = savePath & "\" & Me.TxbTitle & ".PDF"    Else        SaveFile = savePath & "\合并" & Format(Now, "YYYYMMDDhhmmss") & ".PDF"    End If        Set SinglePDF = CreateObject("AcroExch.PDDoc")    Set CombinePDF = CreateObject("AcroExch.PDDoc")        CombinePDF.Create    t = 0    For Each file In folder.Files        FileExtn = LCase(Right(file.Name, Len(file.Name) - InStrRev(file.Name, ".") + 1))        If FileExtn = ".pdf" Then            If SinglePDF.Open(file) Then                pageNum = SinglePDF.GetNumPages                CombinePDF.InsertPages CombinePDF.GetNumPages - 1, SinglePDF, 0, pageNum, 0                SinglePDF.Close                t = t + 1            End If        End If    Next    CombinePDF.Save PDSaveFull, SaveFile    CombinePDF.Close    Set SinglePDF = Nothing    Set CombinePDF = Nothing        MsgBox "成功合并【" & t & "】个文件!"End Sub

合并WORD文件

Private Sub CombineWord()    Dim WordApp As Object    Dim WordDoc As Object    Dim wdRng As Object        If Me.CkbName Then        If Me.TxbTitle = "" Then            MsgBox "请输入保存的文件名"            Exit Sub        End If        SaveFile = savePath & "\" & Me.TxbTitle & ".docx"    Else        SaveFile = savePath & "\合并" & Format(Now, "YYYYMMDDhhmmss") & ".docx"    End If    Set WordApp = CreateObject("Word.Application")    WordApp.Visible = False    Set WordDoc = WordApp.Documents.Add    t = 0    For Each file In folder.Files        FileExtn = LCase(Right(file.Name, Len(file.Name) - InStrRev(file.Name, ".") + 1))        If FileExtn = ".doc" Or FileExtn = ".docx" Then            WordDoc.Application.Selection.InsertFile file.path, "", False, False            WordDoc.Application.Selection.EndKey 6            If Me.CkbPageBreak Then                WordDoc.Application.Selection.InsertBreak Type:=7 ' wdPageBreak            End If            t = t + 1        End If    Next    WordDoc.SaveAs2 SaveFile, 16    WordDoc.Close    WordApp.Quit        Set WordDoc = Nothing    Set WordApp = Nothing        MsgBox "成功合并【" & t & "】个文件!"End Sub

合并图片文件为PDF

Private Sub CombinePicturesToPDF()    Dim SinglePDF As Object, CombinePDF As Object    Dim pdfName As String    Dim pageNum As Long    If Me.CkbName Then        If Me.TxbTitle = "" Then            MsgBox "请输入保存的文件名"            Exit Sub        End If        SaveFile = savePath & "\" & Me.TxbTitle & ".PDF"    Else        SaveFile = savePath & "\合并" & Format(Now, "YYYYMMDDhhmmss") & ".PDF"    End If    tempFolder = Environ("TEMP")    Set SinglePDF = CreateObject("AcroExch.PDDoc")    Set CombinePDF = CreateObject("AcroExch.PDDoc")    CombinePDF.Create    t = 0    For Each file In folder.Files        FileExtn = 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" Then        pdfName = ConvertPicToPDF(file, tempFolder)            If SinglePDF.Open(pdfName) Then                pageNum = SinglePDF.GetNumPages                CombinePDF.InsertPages CombinePDF.GetNumPages - 1, SinglePDF, 0, pageNum, 0                SinglePDF.Close            End If            t = t + 1        End If    Next        CombinePDF.Save PDSaveFull, SaveFile    CombinePDF.Close    Set SinglePDF = Nothing    Set CombinePDF = Nothing        MsgBox "成功合并【" & t & "】个文件!"End Sub

自定义函数取得图片转PDF文件名、确认继续

Function ConvertPicToPDF(picName, pdfPath) As String    Dim acroAVDoc As Object    Dim newPDF As Object    Dim acroApp As Object    Dim pdfName As String    Set acroApp = CreateObject("AcroExch.App")    acroApp.Show    Set acroAVDoc = CreateObject("AcroExch.AVDoc")    FileExtn = LCase(Right(picName, Len(picName) - InStrRev(picName, ".") + 1))    'Stop    If FileExtn Like ".jpg" Or FileExtn Like ".jpeg" Or FileExtn Like ".png" Or FileExtn Like ".bmp" Then        pdfName = Mid(picName, InStrRev(picName, "\") + 1, InStrRev(picName, ".") - InStrRev(picName, "\") - 1) & "_" & Format(Now, "YYYYMMDDhhmmss") & ".pdf"        acroAVDoc.Open picName, "Acrobat"        Do Until acroAVDoc.IsValid            DoEvents        Loop        Set newPDF = acroAVDoc.GetPDDoc        newPDF.Save 1, pdfPath & "\" & pdfName ' 1 is AcroAVDocSaveAsType.acSaveFull        newPDF.Close    End If    acroAVDoc.Close 1    ConvertPicToPDF = pdfPath & "\" & pdfNameEnd FunctionFunction wContinue(Msg) As Boolean    '确认继续函数    Dim Config As Long    Dim a As Long    Config = vbYesNo + vbQuestion + vbDefaultButton2    Ans = MsgBox(Msg & Chr(10) & Chr(10) & "是(Y)继续?" & Chr(10) & Chr(10) & "否(N)退出!", Config)    wContinue = Ans = vbYesEnd Function

喜欢就点个、点在看留个言呗!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接