02 工作簿

在当前路径下按选择的名单批量创建或删除工作簿

  用Excel_VBA,按指定的名单,可以批量创建工作簿、工作表、Word文档等等。

批量删除当前路径下的指定工作簿的过程和创建的过程几乎一致,只不过一个是"Workbooks.Add 工作簿"的过程,一个是"Kill 工作簿"的过程,这里用一个示例中的两段代码来演示。

如图所示,按照工作表的名单,在当前工作簿中批量创建(删除)工作表:
点击放大的图片

运行视频:

源码下载:

描述:

  根据指定名单在当前路径下批量创建或删除工作簿

VBA实现过程:
  • 1.ThisWorkbook.Path,当前工作簿所在的路径;
  • 2.Set newWb = Workbooks.Add,创建一个工作簿;
  • 3.newWb.SaveAs Filename:=,保存工作簿,后跟一个完整路径 + 工作簿名称 + 后缀;
  • 4.newWb.Close SaveChanges:=False,不保存关闭;
  • 5.Dir(file_path_name),Dir函数,检查特定文件是否存在,参数是一个完整的文件路径,包含路径和文件名称和后缀,比如Dir(C:\文件夹1\文件1.txt),检查“C:\文件夹1\”路径下的“文件1.txt”是否存在,如果存在该文件,则返回文件名称“文件1.txt”,不存在则返回空。
示例代码(批量创建)
复制成功!
1

Sub 工作表名单批量创建工作簿()

    Dim Name_list, rng As Range
    Dim Str_name As String
    Dim file_path As String
    Dim newWb As Workbook

    file_path = ThisWorkbook.Path & "\"               '获取当前工作簿所在完整路径


    On Error Resume Next                                '在错误发生时,仍可以继续运行
    Set Name_list = Application.InputBox("选择工作表名单", "提示_", Type:=8)          '选择工作表名单
    If Err.Number > 0 Then MsgBox "未选择内容": Exit Sub                              '未选择时退出
    If WorksheetFunction.CountA(Name_list) = 0 Then MsgBox "选择的内容为空": Exit Sub '选择的单元格区域内容都是空时也退出

    ' 禁用屏幕更新和警告
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


    For Each rng In Name_list                           '遍历名单
        Str_name = rng.Value                            '单元格内容赋值作为工作表名称
        If Len(Str_name) Then                           '如果名称非空
            Err.Clear
            Set newWb = Workbooks.Add                   '新建一个工作簿
            newWb.SaveAs Filename:=file_path & Str_name & ".xlsx"   '保存工作簿在当前路径下,名字用名单的名字
            newWb.Close SaveChanges:=False              '不保存关闭新工作簿

        End If
    Next rng

    ' 恢复屏幕更新和警告
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

    MsgBox "工作簿批量创建完成"  '过程结束告知!

End Sub

示例代码(批量删除)
复制成功!
1

Sub 工作表名单批量删除工作簿()
    Dim Name_list, rng As Range
    Dim Str_name As String
    Dim file_path, file_path_name As String
    Dim newWb As Workbook

    file_path = ThisWorkbook.Path & "\"               '获取当前工作簿所在完整路径


    On Error Resume Next                                '在错误发生时,仍可以继续运行
    Set Name_list = Application.InputBox("选择工作表名单", "提示_", Type:=8)          '选择工作表名单
    If Err.Number > 0 Then MsgBox "未选择内容": Exit Sub                              '未选择时退出
    If WorksheetFunction.CountA(Name_list) = 0 Then MsgBox "选择的内容为空": Exit Sub '选择的单元格区域内容都是空时也退出


    ' 禁用屏幕更新和警告
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For Each rng In Name_list                           '遍历名单
        Str_name = rng.Value                            '单元格内容赋值作为工作表名称
        If Len(Str_name) Then                           '如果名称非空
            Err.Clear
            file_path_name = file_path & Str_name & ".xlsx"

            If Dir(file_path_name) <> "" Then         '检查文件是否存在,如果存在就删除
                Kill file_path_name
            End If

        End If
    Next rng

    ' 恢复屏幕更新和警告
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

    MsgBox "工作簿批量删除完成"  '过程结束告知!

End Sub

请开发者喝杯咖啡 请开发者喝杯咖啡!