Excel 2010 VBA 入门 065 将多个工作表保存至单独的工作簿中

Excel 2010 VBA 入门 专栏收录该内容
142 篇文章 12 订阅

目录

示例

实现代码

工作簿对象(Workbook)及其表示方法

1.序号表示法

2.工作簿名称表示法

工作簿( Workbook)对象的常用属性

工作簿的新建和保存

获取当前文件的目录

跨工作簿复制工作表

使用Application. PathSeparator获取系统路径分隔符

SaveAs和Save的区别


示例

    如图所示,如何利用VBA将该工作簿中的各个工作表分别保存至单独的工作簿中,并将工作簿名称以工作表标签命名?

部门市场部
  
员工编号姓名
0215林革壮
0233李卫卿
0247申玲
0260孙正发
部门总经办
  
员工编号姓名
0377卢卫
0391赵秀池

 

部门管理部
  
员工编号姓名
0017周汉林
0018骈永富
0020孙玉梅
0023陈亚菁
0026康小芸
0028刘晨
0042齐光
0052于健惠
0060王文群
0066曾国安
0072刘志峰
0080刘玉录
0114俞卫广

 

实现代码

Option Explicit

Sub 将工作表单独保存为工作簿()
    Dim FileName As String
    Dim FilePath As String
    Dim FileFullName As String
    Dim sht As Worksheet
    Dim wbkNew As Workbook
    Dim wbkOld As Workbook
    
    Set wbkOld = thisoworkbook
    FilePath = wbkOld.Path
    
    For Each sht In wbkOld.Worksheets
        FileName = sht.Name & ".xlsx"
        FileFullName = FilePath & Application.PathSeparator & FileName
        Set wbkNew = Workbooks.Add
        sht.Copy before:=wbkNew.Worksheets(1)
        
        If Dir(FileFullName) <> "" Then
            Kill FileFullName
        End If
        
        wbkNew.SaveAs FileFullName
    Next
    
End Sub

工作簿对象(Workbook)及其表示方法

    工作簿对象(Workbook)是Excel中一个基本的对象,它代表一个工作簿。在VBA中,若要表示当前已经打开的某个工作簿,可以采用以下几种表示方式。

1.序号表示法

序号表示法是以工作簿打开的先后顺序来表示的,其语法如下:

Workbooks(indexNo)

    该表达式将返回一个工作簿对象。其中,Workbooks表示当前Excel程序打开的所有工作簿的集合。参数indexNo表示工作簿的序号,该序号从1开始,最大为所有打开的工作簿的数量。

2.工作簿名称表示法

本方法是以工作簿名称作为表示来表示工作簿对象,其语法如下:

Workbooks(name)

    该表达式将返回一个工作簿对象。其中,参数name为工作簿的完整名称,包括文件名和扩展名。

Application. Workbook. Worksheet和 Range的关系

    在Excel中,Excel程序对象(Application)是顶级的对象,往下依次是工作簿对象(Workbook)、工作表对象(Worksheet)和单元格对象(Range)。这是多个层次的父对象和子对象的关系:Range是Worksheet的子对象,Worksheet是Workbook的子对象,Workbook是Application的子对象。

  在Excel VBA中,子对象是依赖于父对象而存在的。也即是说,只有当打开了Excel程序(Appliation对象),才能创建或打开工作簿(Workbook对象),才能选中某个工作表(Worksheet对象),以及对某个单元格区域(Range对象)进行操作。以下表达式完整地表示了某个单元格:

Workbooks(1).Worksheets(1).Range("A1")

该表达式表示的单元格是序号为1的工作簿中第1个工作表的A1单元格。
    在Excel VBA中,允许开发者省略父对象而直接表示子对象,但并非表示该对象的父对象不存在。
    (1)当省略了Workbook对象的表示时,Excel默认是当前激活的工作簿(ActiveWorkbook)对象。如以下两个表达式的意义相同

Worksheets(1).Range("A1")
ActiveWorkbook.Worksheets(1).Range("A1")

    (2)当省略了Worksheet对象时,Excel默认是当前激活的工作表(Activesheet对象)。如以下两个表达式的意义相同

Range("A1")
ActiveWorkbook.Activesheet.Range("A1")

    在一般情况下,开发者应尽量使用完整的表达式精确表示某个对象,反之将可能会造成程序的错误。

工作簿( Workbook)对象的常用属性

工作簿Workbook对象的常用属性

    属  性

    说  明

Name

工作簿名称,文件名+扩展名

FullName

工作簿完整名称。路径+文件名+扩展名

Path

工作簿路径

FileFormat

工作簿类型

Worksheets

也即Sheets属性,返回工作簿中的工作表

IsAddin

是否为加载宏

Password

工作簿打开密码,可以读写

HasPassword

逻辑值,判断工作簿是否有密码

WritePassword

工作簿的写密码

Saved

逻辑值。判断工作簿更改后是否保存

BuiltinDocumentProperties

文件属性中的设定

工作簿的新建和保存

工作簿的新建使用工作簿集合对象(Workbooks)的Add方法添加,其语法为:

Workbooks.Add([Template])

该表达式将返回一个工作簿对象。
    其中,可选参数Template为新建工作簿时所使用的模板,可以为以保存模板的名称或者是作为模板的工作簿的完整路径。
    当使用Add方法创建完工作簿后,该工作簿就存在于计算机内存中。若要将工作簿保存在硬盘中,则必须使用Workbook的SaveAs方法进行保存,其语法为

Workbook.SaveAs(FileName,FileFormat,Password,WriteResPassword,ReadOnlyRecommende d,CreateBackup,AccessMode,ConflictResolution,AddToMru)

参数FileName为文本,表示工作簿的完整路径,包含路径和文件名。

可选参数FileFormat表示存储的格式,可以为表中的任意常量(限于篇幅,仅;了常用的常量)。

工作簿SaveAs方法的fileformat参数(常用类型)

    常  量

   

    说  明

xlAddIn

18

Excel 2007加载项

xlAddIn8

18

Microsoft Excel 97-2003加载项

xlCSV

6

CSV

xlCSVMac

22

Macintosh CSV

xlCSVMSDOS

24

MSDOS CSV

xlCSVWindows

23

Windows CSv

xlExcel12

50

Microsoft Excel 2007工作簿

xlExcel8

56

Microsft Excel97-2003工作簿

xlExcel9795

43

Excel9795

xlIntIMacro

25

国际宏

xlOpenXMLAddIn

55

XML加载项

xlOpenXMLTemplate

54

XML模板

xlOpenXMLTemplateMacroEnabled

53

启用的XML模板宏

xlOpenXMLWorkbook

51

XML工作簿

xlOpenXMLWorkbookMacroEnabled

52

 启用宏的XML工作簿宏

xlTemplate

17

模板

xlWorkbookDefault

51

默认工作簿

xlWorkbookNormal

-4143

常规工作簿

  • 可选参数Password为文本,表示工作簿打开的密码(最长不超过15位)。
  • 可选参数WriteResPassword为文本,表示工作簿写保护的密码。当设置了该参数后,打开文件时必须提供密码才可以编辑,否则文件为只读。
  • 可选参数ReadOnlyRecommended为逻辑值,当为True时,则在打开文件时会有提示框提示文件只读。
  • 可选参数CreateBackup为逻辑值,当为True时,表示创建一个备份。
  • 可选参数AccessMode为文件共享模式,可以为xINoChange(不改变共享模式)、xIShared(共享)或xIExclusive(独占模式)。
  • 可选参数ConflictResolution为冲突模式管理。
  • 可选参数AddToMru为逻辑值,当为True时,表示将该文件添加到最近文件的列表中。

获取当前文件的目录

    本例中,需要使用VBA打开与当前文件相同目录下的工作簿,可以直接将Open方法的FileName参数设置为文件目录。但一般情况下,文件所在的路径可能为任何路径。为使程序设计更具备通用性,通常以相对路径的形式表示多个工作簿之间的关系。如本例需要获取当前工作簿相同路径下的工作簿,首先需要获取工作簿的路径。开发者可以使用Workbook的Path属性来获取当前工作簿的路径。如果要获取当前代码所在工作簿的路径,则需要使用Thisworkbook对象的Path属性。
    Thisworkbook对象是所有工作簿默认代表工作簿的对象名称(CodeName)。开发者可以在VBE的“属性窗口”中对此名称进行修改,如图所示。

当在VBA代码中使用该名称时,则表示的是代码所在的工作簿对象。

跨工作簿复制工作表

    使用工作表对象的Copy方法可以实现跨工作簿复制工作表,其必须指定Before或者After参数中的一个,以表示复制的结果存放在某个工作表对象之前或者之后。此时,作为参数的工作表对象表达式必须完整,必须包括其所在的工作簿。如以下表达式表示将Workbookl工作簿中的第一个工作表复制到Workbook2工作簿中的第一个工作表之前

Workbook1.Worksheets(1).Copy Before:=Workbook2.Worksheets(1)

使用Application. PathSeparator获取系统路径分隔符

    Windows系统中默认的路径分隔符是(\)。在VBA程序中,也可以使用Application对象的PathSeperator属性获取系统路径的分隔符。在Windows系统中,该属性将默认为文本字符“\”。使用PathSeparator属性可增强程序的兼容性,使程序可在使用非Windows默认路径分隔符的系统中运行正确。

SaveAs和Save的区别

    开发者可以使用Save方法保存工作表,Save方法不带任何参数。
    当新文件创建后且未被保存之前,使用Save方法后会打开Excel的“另存为”对话框。而当文件已经存在于硬盘之后,则立即执行保存。使用不带任何参数的SaveAs方法,其等同于使用Save方法。
 

 

 

 

  • 0
    点赞
  • 0
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值