excel学习库

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

Excel VBA 批量创建EXCEL工作簿、批量移动文件

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

☆本期内容概要☆

  • 按数字序列创建EXCEL工作簿

  • 批量移动文件夹下指定文件

大家好,我是冷水泡茶,今天在EXCELHOME论坛上看到一篇求助的帖子:

楼主的需求是这样子的:

想到我们分享过拆分Excel VBA 总表按项目拆分明细表/考勤表按部门拆分为单独文件)、分享过合并Excel VBA 合并文件夹下所有EXCEL明细表),移动倒是值得试一下:

1、为了演示的需要,我们创建模拟文件:

Sub CreateFile()    Dim FileSystem As Object    Dim files As Object    Dim file As Object    Dim fileFolder As String    Dim fileName As String    Dim fileNumbers As Integer    On Error Resume Next    Application.ScreenUpdating = False    fileNumbers = InputBox("请输入文件数量:", "输入文件数量", 10)    numbers = CInt(fileNumbers)    If numbers < 1 Then        MsgBox "文件数量输入有误,必须是大于等于1的整数!"        Exit Sub    End If    If Not wContinue("即将创建文件,此操作将先删除文件夹下所有文件!") Then Exit Sub    Set fso = CreateObject("Scripting.FileSystemObject")    fileFolder = ThisWorkbook.Path & "\A"    Set files = fso.GetFolder(fileFolder).files    For Each file In files        fso.DeleteFile file.Path    Next    Set fso = Nothing    For i = 1 To numbers        fileName = i & ".xlsx"        If Not IsFileExists(fileFolder & "\" & fileName) Then            Workbooks.Add            ActiveWorkbook.SaveAs fileName:=fileFolder & "\" & fileName            ActiveWorkbook.Close        End If    Next    Application.ScreenUpdating = True    MsgBox "文件创建成功!"End Sub

代码解析:

(1)前面有一些检查,输入文件数量必须是大于等于1的整数

(2)通过FileSystemObject对象删除文件夹下所有文件,原来的思路是检查一下即将新建的文件存不存在,不存在才新建,这样速度更快些,但是为了确保文件夹下只有本次新建的文件,还是删除重建吧。

(3)在接下来的循环创建文件的代码中,仍然是有检查文件是否存在,理论上是不会有文件存在,但是以防万一出错嘛。

2、移动文件:

Sub MoveFilesInFolder()    Dim FileSystem As Object    Dim SourceFile As Object    Dim destFile As String    Dim SourceFolder As String, DestinationFolder As String    Dim arrFile()    Dim ws As Worksheet    Dim lastRow As Integer    On Error Resume Next    Set ws = ThisWorkbook.Sheets("Sheet1")    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row    arrFile = ws.Range("A1:A" & lastRow)    SourceFolder = ThisWorkbook.Path & "\A"    DestinationFolder = ThisWorkbook.Path    '确保源文件夹和目标文件夹存在    If Dir(SourceFolder, vbDirectory) = "" Then        MsgBox "源文件夹不存在!", vbExclamation        Exit Sub    End If    If Dir(DestinationFolder, vbDirectory) = "" Then        MsgBox "目标文件夹不存在!", vbExclamation        Exit Sub    End If    If Not wContinue("即将移动文件!") Then Exit Sub    '创建文件系统对象    Set FileSystem = CreateObject("Scripting.FileSystemObject")        '获取源文件夹下的所有文件    For i = 1 To UBound(arrFile, 1)        If arrFile(i, 1) <> "" Then            For Each SourceFile In FileSystem.GetFolder(SourceFolder).files                If SourceFile.Name = arrFile(i, 1) & ".xlsx" Then                    destFile = DestinationFolder & "\" & SourceFile.Name                    If IsFileExists(destFile) Then                        Kill destFile                    End If                    '移动文件                    FileSystem.MoveFile SourceFile.Path, destFile                End If            Next        End If    Next    MsgBox "文件移动成功!"End Sub

代码解析:这个过程参考我们的Excel VBA 电子发票管理助手中的代码

(1)把要移动的文件名装入数组,即sheet1表的A列。

(2)仍然使用文件系统对象来移动文件。通过循环数组,把数组中的每一个值加上扩展名,就是正确的文件名,我们先检查它在目标文件夹中存不存在,如果存在则删除它,防止移动时出现覆盖提示,造成程序中断。

(3)把文件移动到目标文件夹。

3、两个自定义函数:

Function IsFileExists(iFileName)    Dim myFile As Object    Set myFile = CreateObject("Scripting.FileSystemObject")    IsFileExists = myFile.FileExists(iFileName)End FunctionFunction wContinue(Msg) As Boolean    '确认继续函数    Dim Config As Long    Dim a As Long    Config = vbYesNo + vbDefaultButton2 + vbQuestion    Ans = MsgBox(Msg & Chr(10) & "是(Y)继续?" & Chr(10) & "否(N)返回!", Config, "请确认操作!")     wContinue = Ans = vbYesEnd Function

好,今天就到这吧。欢迎点赞、留言、分享,谢谢大家,我们下期再会。

发表评论:

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

«    2024年8月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接