Excel-Application对象-开发指南_第1页
Excel-Application对象-开发指南_第2页
Excel-Application对象-开发指南_第3页
Excel-Application对象-开发指南_第4页
Excel-Application对象-开发指南_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ExcelApplication对象开发指南

2009-12-2613:10:21标签:Excel

VBA概述Application对象是MicrosoftOfficeExcel2007对象模型中最高级别的对象,表示Excel程序自身。Application对象提供正在运行的程序的信息、应用于程序实例的选项以及实例中打开的当前对象。因为它是对象模型中最高的对象,Application对象也包含组成一个工作簿的很多部件,包括如工作簿、工作表集合、单元格以及这些对象所包含的数据等。Application对象包括:程序范围的设置和选项。这些选项大部分同“工具”菜单下的“选项”对话框里的内容相同。顶级对象返回的方法,如ActiveCell、ActiveSheet等。在下面几节里,你将通过使用VBA代码示例学习到一些Application对象中经常使用到的对象、方法和属性。关于Application对象模型所有成员的详细资料,请参考Application对象成员。Application对象中其它对象的引用方法你可以使用Application属性返回Application对象。获取一个Application对象后,如需访问它下面的对象,可以在对象模型层级中往下移动。下面示例设置一个工作表的第一个单元格内容为20。Application.Workbooks(1).Worksheets(1).Cells(1,1)=20要表示一个单元格,上面的代码示例从Application对象开始,移到第一个工作簿,再移到第一个工作表,最后到这个单元格。下面示例在另一个Excel程序中创建一个Excel工作簿对象,然后打开一个工作簿。Setxl=CreateObject("Excel.Sheet")xl.Application.Workbooks.Open"newbook.xls"不需要使用“Application”限定词,很多的属性和方法也可以直接被用来返回那些最常用的用户界面对象,如活动工作表(ActiveSheet属性)。例如,除了使用Application.ActiveSheet.Name=“MonthlySales”,你也可以使用ActiveSheet.Name=“MonthlySales”。然而,当使用这个简便表示方法时必需小心,需要选择正确的对象。例如通过使用Worksheet对象的Activate方确定你选择了正确的工作簿和工作表后,你可以使用Cell(1,1)表示第一个单元格。有几种情况你必需使用Application限定词。例如,OnTime对象(本文后面部分将讨论)需要这个限定词,还有程序窗口的Width和Height属性。一般来说,用来处理Excel窗口的外观或影响程序全局行为的属性或方法需要使用Application限定词;例如,DisplayFormlaBar属性用来显示或隐藏公式栏,Calculation方法也需要限定词。Application对象集合这一节详细介绍一些和Application对象相关的集合。AddIns集合

AddIns集合表示所有当前加载的ExcelAdd-in。你可以像枚举其它对象一样在你的程序中列举出关于add-in的不同类型信息。下面的示例列举出当前加载到Excel中的Add-in的路径和名称。SubListAddIns()DimmyAddinAsAddInForEachmyAddinInAddInsMsgBoxmyAddin.FullNameNextEndSubColumns和Rows集合

这两个集合表示活动工作簿中的列和行。分别使用它们选择指定的列和行。Application.Columns(4).Select这个语句选择D列,就像你通过点击用户界面中的列的顶部一样。Application.Rows(5).Select这个语句选择工作表中的第5行,就像你点击行的左边框一样。Dialogs集合

Dialogs集合包括Excel程序中所有的对话框。将在本文中后面部分更详细地讨论Dialogs集合。Sheets集合

Sheets集合返回指定或活动工作簿中所有工作表的集合。Sheets集合可以包含Chart或Worksheet对象。

下面示例打印出活动工作簿中所有的工作表。Application.Sheets.PrintOut这个示例循环工作簿中所有的工作表并打印出包含数据区域的任何工作表。ForiSheet=1ToApplication.Sheets.CountIfNotIsEmpty(Application.Sheets(iSheet).UsedRange)ThenApplication.Sheets(iSheet).PrintOutcopies:=1EndIfNextiSheetApplication对象的属性有很多的属性可以用来访问Excel2007程序的各种对象,多得不能记住或在这里全部讨论。幸运的是只有一部分是你可能经常使用的。ActiveCellActiveChartActiveSheetActiveWindowActiveWorkbookRangeSelectionSelectionStatusBarThisWorkbook下面的内容演示这些常用属性的使用方法。ActiveCell属性

Application对象的ActiveCell属性返回一个表示活动工作簿中活动工作表的活动单元格的Range对象。如果你没有指定对象限定词,这个属性返回活动窗口的活动单元格。注意区别活动单元格和选择的单元格。活动单元格是当前选择中的一个单元格。选择(Selection)可能包括一个单元格集合,但只有其中一个是活动单元格。下面的示例改变活动单元格的字体格式。注意为了确保你操作正确的单元格,工作表集合的Activate方法让Sheet1成为活动工作表。Worksheets("Sheet1").ActivateWithActiveCell.Font.Bold=True.Italic=TrueEndWithActiveChart属性

ActiveChart属性返回表示活动图表的Chart对象,不管它是嵌入的图表还是图表工作表。在一个嵌入的图表被选择或激活时,它就是活动图表。下面的示例使用ActiveChart属性添加一个3维柱形图到月销售记录工作表中。SubAddChart()Charts.AddWithActiveChart.ChartType=xl3DColumn.SetSourceDataSource:=Sheets("Sheet1").Range("B3:H15").LocationWhere:=xlLocationAsObject,Name:="MonthlySales".HasTitle=True.ChartTitle.Characters.Text=MonthlySalesbyCategoryEndWithEndSubActiveSheet属性

ActiveSheet属性返回一个表示当前选中的工作表(顶部工作表)的Worksheet对象。在一个工作簿中只有一个工作表能成为活动工作表。下面的示例显示活动工作表的名称。MsgBox"Thenameoftheactivesheetis"&ActiveSheet.Name下面的示例将活动工作表复制用户指定的次数并放置在Sheet1之前。SubCopyActiveSheet()DimxAsIntegerx=InputBox("Enternumberoftimestocopyactivesheet")Fornumtimes=1Tox'PutcopiesinfrontofSheet1.ActiveWorkbook.ActiveSheet.Copy_Before:=ActiveWorkbook.Sheets("Sheet1")NextEndSubActiveWindow属性

ActiveWindow属性返回一个表示活动窗口(顶部窗口)的Window对象。下面的示例显示活动窗口的名称(Caption属性)。MsgBox"Thenameoftheactivewindowis"&ActiveWindow.CaptionCaption属性作为活动窗口的名称允许你通过使用友好的名称而不是序号来获得窗口。下面的示例选择并打印一个工作表,然后对第二个工作表重复此过程。SubPrintWorksheet()Application.ScreenUpdating=FalseSheets("Sales").SelectActiveWindow.SelectedSheets.PrintOutCopies:=1,Collate:=TrueSheets("Expenses").SelectActiveWindow.SelectedSheets.PrintOutCopies:=1,Collate:=TrueEndSub在这个例子中,你可能疑惑为什么设置ScreenUpdating属性为False。当Excel执行一系列任务时,屏幕被更新并刷新很多次,这将导致屏幕闪烁。设置ScreenUpdating属性为False可以消除闪烁。另外,因为电脑处理器不需要暂停来刷新屏幕,这样也可以让大型程序运行得较快一点。ActiveWorkbook属性

ActiveWorkbook属性返回一个表示活动窗口(顶部窗口)中的工作簿的Workbook对象。这个示例显示活动工作簿的名称。MsgBox"Thenameoftheactiveworkbookis"&ActiveWorkbook.Name下面示例设置计算模式为手动(这样其它工作簿将不计算),然后循环并计算活动工作簿的每个工作表。SubCalcBook()DimwksAsWorksheetApplication.Calculation=xlManualForEachwksInActiveWorkbook.Worksheetswks.CalculateNextSetwks=NothingEndSubRangeSelection属性

RangeSelection属性返回一个表示指定窗口中工作表里选择的单元格的Range对象,即使在工作表中一个图表对象已经被选择或激活。这个示例显示活动窗口中工作表所选择单元格的地址。MsgBoxApplication.ActiveWindow.RangeSelection.Address当你选择了一个范围,RangeSelection属性和Selection对象表示同样一个范围。当你选择一个图表,RangeSelection属性返回之前选择的范围。Selection属性将在下一节中详细介绍。这里介绍的语法RangeSelection.Name.Name在Office2003和2007中使用时都出现错误,如果该代码生效,必须先设置单元格A1的名称。并且应该不是单元格内容的前三个字符,而是名称的前三个字符。这应该是原文的疏漏。下面的示例显示一个单元格中的前三个字符。Range("A1").SelectMsgBoxLeft(ActiveWindow.RangeSelection.Name.Name,3)你可能奇怪为什么使用这样的语法ActiveWindow.RangeSelection.Name.Name当你选择一个范围,使用RangeSelection.Name方法可以获取像Sheet1!$A$1:$B$15这样的范围地址。另外,使用RangeSelection.Name.Name方法可以获取命名像MyRange1这样的范围本身的名称。Selection属性

Selection属性返回活动窗口中被选择的对象。例如,对于单元格,这个属性返回Range对象;对于图表,它返回Chart对象。如果使用属性而没有对象限定符,等于使用Application.Selection。这个示例清除Sheet1所选的内容。Worksheets("Sheet1").ActivateSelection.Clear下面的例子将所选范围的总行数保存到变量NumRows。NumRows=0ForEachareaInSelection.AreasNumRows=NumRows+area.Rows.CountNextarea这个例子统计所选单元格的总数并在消息框中显示结果。SubCount_Selection()DimcellAsObjectDimcountAsIntegercount=0ForEachcellInSelectioncount=count+1NextcellMsgBoxcount&"item(s)selected"EndSubStatusBar属性

StatusBar属性返回或设置状态栏的文本。这个属性允许你更改在Excel窗口底部的状态栏中显示的信息。它对在运算过程需要较长时间来完成时让用户知道正在运行的进度非常有帮助。如果Excel控制状态栏时StatusBar属性返回False。另外,如需恢复默认状态栏文本,只需设置属性值为False即可;甚至在状态栏隐藏时也有效。例如,使用下面的方式对每个处理的文件你可以给StatusBar属性赋值。DimFileNumAsIntegerFileNum=0ForEachfileinFiles'Dosomethinghere.Application.StatusBar="NowprocessingFile"&FileNumFileNum=FileNum+1Next然后当过程结束,你需要使用下面的语句将状态栏设置回正常状态。Application.StatusBar=False你可以创建你自己的过程使用StatusBar属性显示一个宏或其它过程的进度。SubShowStatusBarProgress()DimiAsLongDimpctDoneAsDoubleDimnumSquaresAsLongConstMAXSQRAsLong=15Fori=1To30pctDone=i/30numSquares=pctDone*MAXSQRApplication.StatusBar=Application.Rept(Chr(31),numSquares)Application.WaitNow+TimeSerial(0,0,1)NextiApplication.StatusBar=FalseEndSub这个例子在状态栏上显示最大15个方块(由常数MAXSQR定义)。这个方块通过使用ASCII字符31来产生。这个缺少关于宏需要多长时间的视觉指示,它仅表明宏正在进行。Wait方法模拟一个宏需要长时间来执行。ThisWorkbook属性

ThisWorkbook属性返回一个表示当前运行的宏代码所在工作簿的Workbook对象。这个属性允许载入宏定义包含代码的工作簿。这种情况下ActiveWorkbook属性并不起作用,因为活动工作簿可能并不是包含载入宏代码的工作簿。换句话说,ActiveWorkbook属性不返回载入宏工作簿;它返回调用载入宏的工作簿。如果你使用你的VisualBasic代码创建载入宏,你应该使用ThisWorkbook属性来限定任何必须运行在包含载入宏的工作簿上的语句。下面示例关闭包含示例代码的工作簿。如果对工作簿的修改不被保存。ThisWorkbook.CloseSaveChanges:=False下面的示例循环每个打开的工作簿并关闭它。然后关闭包含这个代码的工作簿。PrivateoExcelAsExcel.ApplicationPrivatewbkAsExcel.WorkbookSubCloseOpenWrkBks()DimwrkbAsWorkbookForEachwbkInApplication.WorkbooksIfwrkb.Name<>ThisWorkbook.NameThenwbk.CloseTrueEndIfNextwbkThisWorkbook.CloseTrueEndSubApplication对象方法除了Application对象属性外,下面将介绍一些更加常用的方法。FindFile方法和Dialogs集合

同GetOpenFilename方法不同,FindFile方法显示Open对话框并允许用户打开一个文件。如果新文件成功打开,此方法返回True。如果用户取消对话框,此方法返回False。下面示例显示一个消息框提示用户打开一个指定文件,然后显示Open对话框。如果用户不能打开文件,显示一个消息框。SubOpenFile1()DimbSuccessAsBooleanMsgbox"PleaselocatetheMonthlySales.xlsfile."bSuccess=Application.FindFileIfNotbSuccessThenMsgbox"Filenotopen."EndIfEndSub你也可以通过使用Dialogs集合细目的其中一个打开特别的对话框来完成同样的事情。使用Dialogs集合的一个好处是当你使用Show方法时,你可以传递参数给它来修改内置对话框的默认行为。例如,xlDialogOpen的参数有:file_text,update_links,read_only,format,prot_pwd,write_res_pwd,ignore_rorec,file_origin,custom_delimit,add_logical,editable,file_access,notify_logical,converter.注意:如需查找某个特定的对话框的参数,在Excel帮助文档的“内置对话框参数列表”中找到相应的对话框常数。下面的例子显示“打开”对话框并设置“Book1.xls”在文件名下拉列表框中,用户不需要选择文件就可以在对话框中显示文件名。SubOpenFile2()Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Showarg1:="Book1.xls"EndSubDialogs集合最激动人心的部分是你可以使用它显示任何Excel对话框-大约250种。你可以通过下面的步骤查看Dialogs集合的完整对话框列表。打开VisualBasic编辑器。单击菜单“视图”->“对象浏览器”,显示对象浏览器窗口,也可以按F2。在搜索框中输入xlBuiltInDialog。单击Search按钮。GetOpenFilename方法

GetOpenFilename方法显示标准“打开”对话框并返回用户选择的文件名,实际上并未打开任何文件。GetOpenFilename方法给你最大的控制从你的程序中打开一个工作簿,因为它所做的就是以字符串返回用户选择的文件完整路径和文件名。获得文件名后接着做什么就取决于你自己了。例如,你可能传递结果给OpenText方法。这个方法的语法如下(所有的参数都是可选的):GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)参数FileFilter是一个定义过滤条件(如*.txt,*.xla)的字符串;FilterIndx指定默认文件过滤条件的序号,从1到FileFilter中的过滤器数目;Title指定对话框的标题;ButtonText只用于Macintosh系统;MultiSelect是一个Boolean值,表示可以多选文件。下面的例子显示“打开”对话框,并在文件类型下拉框中使用文本文件(*.txt)过滤条件,然后使用消息框显示用户的选择。DimfileToOpenAsStringfileToOpen=Application.GetOpenFilename("TextFiles(*.txt),*.txt")IffileToOpen<>""ThenMsgBox"Open"&fileToOpenEndIfInputBox方法

就像你估计的,InputBox方法显示一个对话框提示用户输入一个值。这个方法通过指定期望从用户获取的数据类型允许你有选择性地输入。

InputBox方法语法如下:InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextID,Type)其中:

Prompt是显示在对话框中的信息,在这里你可以让用户知道你期望的数据类型。

Title是在对话框顶部显示的标题。

Default是最初显示的默认值。

Left和Top用来指定对话框的位置。这些值以屏幕的左上角为参考点,单位是磅。

HelpFile和HelpContextID指定一个帮助文件。如果使用这些参数,在对话框中将包括一个Help按钮。

Type是返回的数据类型,默认值是Text。允许的数据类型如下表。ValueType

0公式,以字符串返回,只需要此参数

1数值,你也可以在此包括一个返回一个数值的公式

2文本(字符串)

4逻辑数值(True或False)

8一个单元格引用,Range对象

16一个错误数值,如#N/A

64数值列表注意:如果Type为8,你必须使用Set语句将结果赋值给一个Range对象,如下例所示SetmyRange=Application.InputBox(prompt:="Sample",type:=8)下面的例子要求用户输入打印活动工作表的份数。注意Type参数表明此方法要求输入数字。SubPrintActiveSheet()DimTotalCopiesAsLong,NumCopiesAsLongDimsPromptAsString,sTitleAsStringsPrompt="Howmanycopiesdoyouwant?"sTitle="Printstheactivesheet"TotalCopies=Application.InputBox(Prompt:=sPrompt,Title:=sTitle,Default:=1,Type:=1)ForNumCopies=1ToTotalCopiesActiveSheet.PrintOutNextNumCopiesEndSubRun方法

Run方法执行一个宏或调用一个函数。你可以使用这个方法运行一个用VBA或Excel宏语言写的宏,或者运行一个动态链接库(DLL)或Excel加载宏(XLL)中的函数。XLL是Excel的加载宏,你可以使用任何支持创建DLLs的编译器来创建它。下面是此方法的语法:Run(Macro,Arg1,,Arg30)Macro是要执行的宏或函数的名字。Arg1到Arg30是你需要传递给宏或函数的任何参数。下面的例子使用Run方法调用一个过程来设置一个范围中单元格的字体为粗体。注意你也可以使用Call方法来达到同样的结果。SubUseRunMethod()DimwksAsWorksheetDimrngAsRangeSetwks=Worksheets("Sheet2")Setrng=wks.Range("A1:A10")Application.Run"MyProc",rng'Youcouldaccomplishthesamethingwith:'CallMyProc(rng)EndSubSubMyProc(rngAsRange)Withrng.Font.Bold=TrueEndWithEndSubApplication对象事件Application对象也提供几个事件让你可以用来监控整个Excel程序的动作。要使用Application事件,你必须激活Application事件监控。请按照以下步骤操作:1.创建一个类。在VBE窗口中,单击“插入”–>“类模块”

2.在“属性”栏中,更改类的名称为appEventClass。

3.在类模块的代码窗口,输入:PublicWithEventsApplyAsApplication现在Application级的事件可以使用了。

4.现在测试一下,在代码窗口的对象列表中,单击“Apply”。

5.在代码窗口中的过程列表中,单击Apply_WorkbookOpen.这样将在代码窗口中添加一个自动生成的过程用于Apply_WorkbookOpen事件。

6.修改该过程如下:PrivateSubApply_WorkbookOpen(ByValWbAsWorkbook)MsgBox"你打开了工作簿。"EndSub7.重复以上步骤加入Apply_WorkbookBeforeClose事件。修改该事件的代码如下:PrivateSubAppl_WorkbookBeforeClose(ByValWbAsWorkbook,CancelAsBoolean)MsgBox"你关闭了工作簿。"EndSub8.接着,创建一个变量用来代表在类模块中创建的Application对象。在VBAProject的Project栏,双击ThisWorkbook节点打开代码窗口。

9.加入下面的语句。DimApplicationClassAsNewAppEventClass通过在ThisWorkbook代码窗口中添加以下过程来建立一个声明的对象到Application对象的关联。PrivateSubWorkbook_Open()SetApplicationClass.Appl=ApplicationEndSub10.保存并关闭工作簿。

11.现在打开该工作簿来测试代码。Apply_WorkbookOpen事件将显示对话框。

12.关闭工作簿,Apply_WorkbookBeforeClose将显示对话框。

13.回到AppEventClass类模块,单击过程列表将显示很多你可以在程序中用来监控动作的事件。理解事件怎样被激发并以何种顺序激发对理解你的程序很重要。在类模块中加入其它事件,并插入消息框,然后尝试不同的动作看看什么时候什么事件将被激活。Application对象的其它用法除了一些常用的对象外,你还可以在Excel程序中使用Application对象的其它的一些功能。下面讨论部分用法。删除工作表时不弹出提示窗口

在下面的例子中,首先关闭任何询问是否需要删除工作表的警告消息框,然后删除工作表,再设置使警告消息框生效。SubDeleteSheet()Application.DisplayAlerts=FalseActiveSheet.DeleteApplication.DisplayAlerts=TrueEndSub保存工作簿时无提示

这个例子在保存工作簿时没有提示用户。SubSaveWorksheet()Application.DisplayAlerts=FalseActiveWorkbook.SaveAs"C:MonthlySales.xls"Application.DisplayAlerts=TrueEndSub使用SendKeys发送信息到Notepad程序

下面的例子使用SendKeys语句从Excel语句中复制一个区域的数据到Notepad程序中,并保存为文本文件。SubSKeys()Range("A1:D15").Copy'Copytherange.SendKeys"%n",True'MinimizeExcel.Shell"notepad.exe",vbNormalFocus'StartNotepad.SendKeys"^V",True'PasttherangedataintoNotepad.SendKeys"%FA",True'SpecifySaveAs.SendKeys"SalesData.txt",True'Provideafilename.SendKeys"%S",True'Savethefile.ClosenotepadEndSub这个例子首先复制一个区域的数据到剪贴板,然后最小化Excel,启动Notepad,然后从剪贴板复制数据到Notepad,最后指定文件名并保存文件,再关闭Notepad。在指定时间或间隔运行一个宏

你可以使用Application对象的OnTime方法在指定的时间或以固定时间间隔运行一个过程。OnTime方法的语法如下:Application.OnTime(EarliestTime,Procedure,LatestTime,Schedule)参数EarliestTime表示什么使用运行名称为参数Procedure的过程。可选参数LatestTime和Schedule变量分别表示运行过程的最后时间和是否新建一个过程来运行还是取消现有的过程。假如开始运行时Excel很忙,你需要指定一个时间范围来调用过程时参数LatestTime很有帮助。下面的示例每5分钟运行指定的过程YourProcApplication.OnTimeEarliestTime:=Now+TimeValue("00:05:00),_Procedure:="YourProc"下面的示例每天正午的时候运行过程YourProc.Application.OnTime_EarliestTime:=TimeValue("12:00:00"),_Procedure:="YourProc"下面的示例每5分钟调用AutoSave过程。如果你关闭工作簿,调用Cleanup过程来取消前面设置的OnTime。PrivateSubWorkbook_Open()Application.OnTimeNow+TimeValue("00:05:00"),"AutoSave"EndSubPrivateSubWorkbook_BeforeClose(CancelAsBoolean)OnErrorResumeNextApplication.OnTimeNow+TimeValue("00:05:00"),"CleanUp",,FalseEndSub注意:Workbook_Open和Workbook_BeforeClose事件包含在Workbook模块中。AutoSave和CleanUp过程应该位于标准模块中。结论这篇文章仅介绍Application对象的一部分成员。还有其他成员让你的用户以新的方式同Excel程序交互和改变你程序的外观。熟悉Application对象的使用将让你按照你自己的要求扩展和采用Excel的功能。[@more@]Workbook对象应用示例

2009-12-2921:37:01标签:vba

WorkbookWorkbook对象代表一个工作簿,Workbooks集合对象则代表同一Excel进程中打开的所有工作簿对象。

[应用1]创建新工作簿(Add方法)

使用Add方法在Workbooks集合中创建新工作簿,所创建的工作簿为活动工作簿。其语法为:

Workbooks.Add(Template)

参数Template可选,决定如何创建新工作簿。如果将该参数设置为已存在的Excel模板文件名称,那么将以该文件作为模板创建工作簿。该参数可以为下列XlWBATemplate常量之一:xlWBATChart(值-4109,代表图表)、xlWBATExcel4IntlMacroSheet(值4)、xlWBATExcel4MacroSheet(值3)、xlWBATWorksheet(值-4167,代表工作表)。在创建新工作簿时,如果指定该参数,那么将创建包含指定类型工作表的工作簿;如果省略该参数,那么将创建包含一定数量空工作表的工作簿,工作表数为SheetsInNewWorkbook属性所设置的数量。

应用示例1:创建一个新工作簿SubCreateNewWorkbook1()MsgBox"将创建一个新工作簿."Workbooks.AddEndSub应用示例2:创建一个新工作簿并命名工作表且添加数据SubCreateNewWorkbook2()DimwbAsWorkbookDimwsAsWorksheetDimiAsLongMsgBox"将创建一个新工作簿,并预设工作表格式."Setwb=Workbooks.AddSetws=wb.Sheets(1)ws.Name="产品汇总表"ws.Cells(1,1)="序号"ws.Cells(1,2)="产品名称"ws.Cells(1,3)="产品数量"Fori=2To10ws.Cells(i,1)=i-1NextiEndSub应用示例3:创建带有指定数量工作表的工作簿SubtestNewWorkbook()MsgBox"创建一个带有10个工作表的新工作簿"DimwbAsWorkbookSetwb=NewWorkbook(10)EndSubFunctionNewWorkbook(wsCountAsInteger)AsWorkbook'创建带有由变量wsCount提定数量工作表的工作簿,工作表数在1至255之间DimOriginalWorksheetCountAsLongSetNewWorkbook=NothingIfwsCount<1OrwsCount>255ThenExitFunctionOriginalWorksheetCount=Application.SheetsInNewWorkbookApplication.SheetsInNewWorkbook=wsCountSetNewWorkbook=Workbooks.AddApplication.SheetsInNewWorkbook=OriginalWorksheetCountEndFunction自定义函数NewWorkbook可以创建最多带有255个工作表的工作簿。本测试示例创建一个带有10个工作表的新工作簿。

[应用2]打开工作簿(Open方法)

Open方法用于打开一个现有的工作簿,其语法为:Workbooks.Open(FileName,UpdateLinks,ReadOnly,Format,Password,WriteResPassword,IgnoreReadOnlyRecommended,Origin,Delimiter,Editable,Notify,Converter,AddToMru,Local,CorruptLoad)可以看到,该方法具有很多参数,但大多数参数都很少用到。在这些参数中,除参数FileName必须外,其它参数都可选。

参数FileName指定要打开的工作簿文件的名称,参数UpdateLinks指定更新工作簿中链接的方式,参数ReadOnly用来设置是否以只读方式打开工作簿。如果需要使用密码来打开工作簿,则应该将参数Password设置为该密码;如果需要使用密码打开工作簿但没有指定密码,则会弹出询问密码的对话框。参数AddToMru指定是否将工作簿添加到最近使用的文件列表中,建议将其设置为True,默认值为False。

应用示例4:以只读方式打开某工作簿SubopenWorkbook2()DimfnameAsStringMsgBox"将D盘中的<测试.xls>工作簿以只读方式打开"fname="D:测试.xls"Workbooks.OpenFilename:=fname,ReadOnly:=TrueEndSub[应用3]访问特定的工作簿

使用Item属性返回Workbooks集合中特定的工作簿。例如:Workbooks.Item(1)返回Workbooks集合中的第一个工作簿。由于Item属性是缺省的属性,因此上述代码也可以简写为:Workbooks(1)然而,使用索引号来指定工作簿是不可靠的,最好使用工作簿的具体名称来指定特定的工作簿,例如:Workbooks("MyBook.xlsx")注意,当用户使用“新建”命令创建一个新工作簿(假设该工作簿系统默认名称为Book2)时,在没有保存该工作簿前,应该使用下面的代码指定该工作簿:Workbooks("Book2")此时,如果使用下面的代码指定该工作簿:Workbooks("Book2.xlsx")将会产生运行时错误:下标越界。

[应用4]激活工作簿(Activate方法)使用Activate方法激活指定的工作簿,例如:Workbooks("MyWorkbook").Activate[应用5]获得当前打开的工作簿数(Count属性)使用Workbooks集合对象的Count属性来获得当前打开的工作簿数,例如:Workbooks.Count[应用6]判断工作簿是否是只读的(ReadOnly属性)

如果工作簿以只读方式打开,那么ReadOnly属性的值为True。

[应用7]获得工作簿的路径和名称(Name属性、FullName属性、Path属性、CodeName属性)

使用Workbook对象的Name属性可以返回工作簿的名称。例如,下面的函数可以返回当前工作簿的名称:FunctionMyName()AsStringMyName=ThisWorkbook.NameEndFunction使用Workbook对象的FullName属性可以返回工作簿的路径和名称。例如,下面的函数可以返回当前工作簿的路径和名称:FunctionMyName()AsStringMyName=ThisWorkbook.NameEndFunction使用Workbook对象的Path属性可以返回工作簿文件的路径。使用Workbook对象的CodeName属性返回工作簿对象的代码名。

上述属性均为只读属性。

应用示例5:一些工作簿通用属性示例SubtestGeneralWorkbookInfo()MsgBox"本工作簿的名称为"&ActiveWorkbook.NameMsgBox"本工作簿带完整路径的名称为"&ActiveWorkbook.FullNameMsgBox"本工作簿对象的代码名为"&ActiveWorkbook.CodeNameMsgBox"本工作簿的路径为"&ActiveWorkbook.PathIfActiveWorkbook.ReadOnlyThenMsgBox"本工作簿已经是以只读方式打开"ElseMsgBox"本工作簿可读写."EndIfIfActiveWorkbook.SavedThenMsgBox"本工作簿已保存."ElseMsgBox"本工作簿需要保存."EndIfEndSub[应用8]保存工作簿(Save方法)

使用Save方法保存对工作簿所作的所有更改,其语法为:Workbook.Save应用示例6:保存已存在的所有工作簿SubSaveAllWorkbooks()DimwbkAsWorkbookForEachwbkInWorkbooksIfwbk.Path<>""Thenwbk.SaveNextwbkEndSub如果某工作簿的Path属性值为空,则表明该工作簿为新建工作簿,还没有保存。而本过程仅保存所有已存在的(即已经保存过的)工作簿。

[应用9]保存工作簿(SaveAs方法)

使用SaveAs方法在指定的文件中保存对工作簿所做的更改,其语法为:Workbook.SaveAs(FileName,FileFormat,Password,WriteResPassword,ReadOnlyRecommended,CreateBackup,AccessMode,ConflictResolution,AddToMru,TextCodepage,TextVisualLayout,Local)所有参数均为可选参数。其中参数FileName指定要保存文件的文件名,可以包含完整的路径,如果不指定路径,Excel将文件保存到当前文件夹中。参数FileFormat指定保存文件时使用的文件格式。如果文件夹中存在相同名称的工作簿,则提示是否替换原工作簿。

参数Password用于指定文件的保护密码,是一个区分大小写的字符串(最长不超过15个字符)。参数WriteResPassword指定文件的写保护密码,如果文件保存时带有密码,但打开文件时没有输入密码,则该文件以只读方式打开。

将参数ReadOnlyRecommended设置为True,则在打开文件时显示一条消息,提示该文件以只读方式打开。将参数CreateBackup设置为True,以创建一个备份文件。

参数AccessMode和参数ConflictResolution用来解决访问和冲突问题。

将参数AddToMru设置为True,以添加工作簿到最近使用的文件列表中。默认值为False。

应用示例7:创建新工作簿并保存SubAddSaveAsNewWorkbook()DimWkAsWorkbookSetWk=Workbooks.AddApplication.DisplayAlerts=FalseWk.SaveAsFilename:="D:SalesData.xlsx"EndSub这里使用了Add方法和SaveAs方法,添加一个新工作簿并将该工作簿以文件名SalesData.xlsx保存在D盘中。其中,语句Application.DisplayAlerts=False表示禁止弹出警告对话框。

应用示例8:另存已有的工作簿SubSaveWorkbook2()DimoldNameAsString,newNameAsStringDimfolderNameAsString,fnameAsStringoldName=ActiveWorkbook.NamenewName="new"&oldNameMsgBox"将<"&oldName&">以<"&newName&">的名称保存"folderName=Application.DefaultFilePathfname=folderName&""&newNameActiveWorkbook.SaveAsfnameEndSub上述代码将当前工作簿以一个新名(即new加原名)保存在默认文件夹中。

应用示例9:备份工作簿SubCreateBak1()MsgBox"保存工作簿并建立备份工作簿"ActiveWorkbook.SaveAsCreateBackup:=TrueEndSub上述代码在当前文件夹中建立工作簿的备份。SubCreateBak2()MsgBox"保存工作簿时,若已建立了备份,则将出现包含True的信息框,否则出现False."MsgBoxActiveWorkbook.CreateBackupEndSub[应用10]保存工作簿副本(SaveCopyAs方法)

使用SaveCopyAs方法保存指定工作簿的一份副本,但不会修改已经打开的工作簿,其语法为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论