分享

VBA常用代码解析(第十讲)

 wdmexcel 2015-08-21

048 保存指定工作表为工作簿文件

如果需要将工作簿中的工作表单独保存为一个工作簿文件,可以使用Worksheet对象的Copy方法,将指定的工作表复制到一个新建的工作簿,如下面的代码所示。

Sub SheetCopy()

On ErrorGoTo line

ActiveSheet.Copy

ActiveWorkbook.CloseSaveChanges:=TrueFilename:=ThisWorkbook.Path & '\SheetCopy.xls'

ExitSub

line:

ActiveWorkbook.CloseFalse

End Sub

代码解析:

SheetCopy过程将活动工作表单独保存为一个工作簿文件。

2行代码错误处理语句。备份过程中,如果已存在同名工作簿,会出现提示,如果选择了“否”或“取消”,此时新工作簿已经建立,在执行4行代码时发生错误,使程序中断,所以使用GoTo语句执行第7行代码,关闭新建立的工作簿并且不保存。

3行代码使用Copy方法新建一个工作簿,新工作簿中包含复制的工作表。应用于Worksheet对象的Copy方法将指定工作表复制到工作簿的另一位置,语法如下:

Copy (BeforeAfter)

其中,参数Before是可选的,用来指定工作表,复制的工作表将置于此工作表之前。参数After是可选的,用来指定工作表,复制的工作表将置于此工作表之后。

不能同时指定Before参数和After参数。当Copy方法省略参数时,应用程序将新建一个空工作簿(新建工作簿将成为活动窗口),并将Copy方法引用的工作表复制到该空工作簿中。

4行代码使用Workbook对象的Close方法关闭新建的工作簿。应用于Workbooks集合和Workbook对象的Close方法请参阅▲45-1

如果需要将工作簿中的几个工作表单独保存为一个工作簿文件时,可以以数组的形式指定要复制的工作表,如下面的代码所示。

Sub ArrSheetCopy()

On ErrorGoTo line

Worksheets(Array('Sheet1''Sheet2')).Copy

ActiveWorkbook.SaveAsFilename:=ThisWorkbook.Path & '\ArrSheetCopy.xls'

ActiveWorkbook.CloseSaveChanges:=True

ExitSub

line:

ActiveWorkbook.CloseFalse

End Sub

代码解析:

ArrSheetCopy过程将“Sheet1和“Sheet2工作表单独保存为一个工作簿文件。

4行代码使用SaveAs方法保存活动工作簿,关于SaveAs方法请参阅▲47-2

049 打印预览时不触发事件

在工作表打印之前或进行打印预览时,会触发工作簿的BeforePrint事件。在某些情况下希望在打印预览时能禁止触发该事件,例如工作表中,用户在打印时使用下面的代码将流水号的数值自动加1

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Sheet1.Range('J1')= Sheet1.Range('J1') 1

End Sub但是在打印预览时并不希望流水号的数值自动加1,此时,需要修改系统的打印预览功能,如下面的代码所示。

Private Sub Workbook_Open()

DimCmdCtrls As CommandBarControls

DimCmd As CommandBarControl

SetCmdCtrls = Application.CommandBars.FindControls(ID:=109)

ForEach Cmd In CmdCtrls

Cmd.OnAction = 'ThisWorkbook.MyPrint'

Next

End Sub

代码解析:

工作簿的Open事件过程,在打开工作簿时,修改系统中所有打印预览命令按钮和菜单项的动作,指定其OnAction属性为ThisWorkbook代码窗口中的公用过程MyPrint

4行代码使用FindControls方法将所有打印预览命令按钮和菜单项赋给变量CmdCtrlsFindControls方法返回符合指定条件的CommandBarControls集合,语法如下:

expression.FindControls(TypeIdTagVisible)

其中参数expression是必需的,该表达式返回一个CommandBars集合。

参数Id是可选的,要查找控件的标识符。打印预览命令控件的标识符为109

5行到第7行代码遍历所有打印预览命令控件,指定其OnAction属性为ThisWorkbook代码窗口中的公用过程MyPrintOnAction属性返回或设置一个VisualBasic 的过程名,该过程在用户单击或更改某命令栏控件的值时运行。

MyPrint过程代码如下:

Public Sub MyPrint()

WithApplication

.EnableEvents = False

.ActiveSheet.PrintPreview EnableChanges:=False

.EnableEvents = True

EndWith

End Sub

代码解析:

MyPrint过程通过禁止对象事件,使工作表打印预览时不触发工作簿的BeforePrint事件。

3行代码将Application对象的EnableEvents属性设置为False,禁用事件,使事件不能触发。

4行代码使用PrintPreview方法对工作表执行打印预览。PrintPreview方法以打印效果显示指定的对象,该方法只有一个参数EnableChanges,用来指定是否可以修改页面设置,当其值为False时,禁止在打印预览时修改页面设置,默认值为True

5行代码将Application对象的EnableEvents属性设置为True,启用事件。

为了在工作簿时恢复默认的打印预览设置,在ThisWorkbook代码窗口写入以下代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

DimCmdCtrls As CommandBarControls

DimCmd As CommandBarControl

SetCmdCtrls = Application.CommandBars.FindControls(ID:=109)

ForEach Cmd In CmdCtrls

Cmd.OnAction = ““

Next

End Sub

代码解析:

工作簿的BeforeClose事件过程,关闭工作簿时将所有打印预览命令按钮和菜单项的OnAction属性恢复为默认的动作。经过以上设置,工作表只有在进行打印时“流水号”数值才自动加1

050 设置工作簿文档属性信息

使用DocumentProperties集合对象的BuiltinDocumentProperties属性可以设置文档的属性信息,如下面的代码所示。

Sub WbBuiltin()

WithThisWorkbook

.BuiltinDocumentProperties('Title')= 'Wordbook(工作簿)对象'

.BuiltinDocumentProperties('Subject')= '设置工作簿的文档属性信息'

.BuiltinDocumentProperties('Author')= 'yuanzhuping'

.BuiltinDocumentProperties('Company')= 'tzzls'

.BuiltinDocumentProperties('Comments')= '工作簿文档属性信息'

.BuiltinDocumentProperties('Keywords')= 'Excel VBA'

EndWith

MsgBox'工作簿文档属性信息设置完毕!'

End Sub

代码解析:

WbBuiltin过程设置代码所在工作簿的属性信息,应用于Workbook对象的BuiltinDocumentProperties属性返回一个DocumentProperties集合,该集合代表指定工作簿的所有内置文档属性,本属性返回的是内置文档属性的整个集合。通过指定属性的名称或集合中的索引号返回集合中的单个成员(一个DocumentProperty对象)

3行代码设置标题,第4行代码设置主题,第5行代码设置作者,第6行代码设置公司,第7行代码设置备注,第8行代码设置关键字。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多