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

下载本文档

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

文档简介

1、Excel Application对象 开发指南 2009-12-26 13:10:21标签:Excel VBA概述Application 对象是 Microsoft Office Excel 2007对象模型中最高级别的对象, 表示 Excel 程序 自身。 Application 对象提供正在运行的程序的信息、 应用于程序实例的选项以及实例中打开 的当前对象。 因为它是对象模型中最高的对象, Application 对象也包含组成一个工作簿的很 多部件,包括如工作簿、工作表集合、单元格以及这些对象所包含的数据等。Application 对象包括:程序范围的设置和选项。这些选项大部分同“工具

2、”菜单下的“选项”对话框里的 内容相同。顶级对象返回的方法,如 ActiveCell 、 ActiveSheet 等。在下面几节里, 你将通过使用 VBA 代码示例学习到一些 Application 对象中经常使用到的对 象、方法和属性。关于 Application 对象模型所有成员的详细资料,请参考 Application 对象 成员 。Application 对象中其它对象的引用方法你可以使用 Application 属性返回 Application 对象。获取一个 Application 对象后,如需访问 它下面的对象, 可以在对象模型层级中往下移动。 下面示例设置一个工作表的第一个单元

3、格 内容为 20。Application.Workbooks(1.Worksheets(1.Cells(1,1=20要表示一个单元格,上面的代码示例从 Application 对象开始,移到第一个工作簿,再移到 第一个工作表,最后到这个单元格。下面示例在另一个 Excel 程序中创建一个 Excel 工作簿对象,然后打开一个工作簿。Set xl=CreateObject("Excel.Sheet"xl.Application.Workbooks.Open "newbook.xls"不需要使用“ Application ”限定词,很多的属性和方法也可以直接

4、被用来返回那些最常用的 用 户 界 面 对 象 , 如 活 动 工 作 表 (ActiveSheet属 性 。 例 如 , 除 了 使 用 Application.ActiveSheet.Name = “ Monthly Sales ” , 你 也 可 以 使 用 ActiveSheet.Name = “ Monthly Sales ” 。然而,当使用这个简便表示方法时必需小心,需要选择正确的对象。例 如通过使用 Worksheet 对象的 Activate 方确定你选择了正确的工作簿和工作表后,你可以使 用 Cell(1,1表示第一个单元格。有几种情况你必需使用 Application 限定

5、词。例如, OnTime 对象 (本文后面部分将讨论 需要 这个限定词,还有程序窗口的 Width 和 Height 属性。一般来说,用来处理 Excel 窗口的外 观或影响程序全局行为的属性或方法需要使用 Application 限定词; 例如, DisplayFormlaBar 属性用来显示或隐藏公式栏, Calculation 方法也需要限定词。Application 对象集合这一节详细介绍一些和 Application 对象相关的集合。AddIns 集合AddIns 集合表示所有当前加载的 Excel Add-in。 你可以像枚举其它对象一样在你的程序中列 举出关于 add-in 的不

6、同类型信息。下面的示例列举出当前加载到 Excel 中的 Add-in 的路径 和名称。Sub ListAddIns(Dim myAddin As AddInFor Each myAddin In AddInsMsgBox myAddin.FullNameNextEnd SubColumns 和 Rows 集合这两个集合表示活动工作簿中的列和行。分别使用它们选择指定的列和行。 Application.Columns(4.Select这个语句选择 D 列,就像你通过点击用户界面中的列的顶部一样。 Application.Rows(5.Select这个语句选择工作表中的第 5行,就像你点击行的左边

7、框一样。Dialogs 集合Dialogs 集合包括 Excel 程序中所有的对话框。 将在本文中后面部分更详细地讨论 Dialogs 集 合。Sheets 集合Sheets 集合返回指定或活动工作簿中所有工作表的集合。 Sheets 集合可以包含 Chart 或 Worksheet 对象。下面示例打印出活动工作簿中所有的工作表。Application.Sheets.PrintOut这个示例循环工作簿中所有的工作表并打印出包含数据区域的任何工作表。For iSheet = 1 To Application.Sheets.CountIf Not IsEmpty(Application.Sheet

8、s(iSheet.UsedRange ThenApplication.Sheets(iSheet.PrintOut copies:=1End IfNext iSheetApplication 对象的属性有很多的属性可以用来访问 Excel 2007程序的各种对象,多得不能记住或在这里全部讨论。 幸运的是只有一部分是你可能经常使用的。ActiveCellActiveChartActiveSheetActiveWindowActiveWorkbookRangeSelectionSelectionStatusBarThisWorkbook下面的内容演示这些常用属性的使用方法。ActiveCell 属

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

10、d = True.Italic = TrueEnd WithActiveChart 属性ActiveChart 属性返回表示活动图表的 Chart 对象, 不管它是嵌入的图表还是图表工作表。 在 一个嵌入的图表被选择或激活时,它就是活动图表。下面的示例使用 ActiveChart 属性添加 一个 3维柱形图到月销售记录工作表中。Sub AddChart(Charts.AddWith ActiveChart.ChartType = xl3DColumn.SetSourceData Source:=Sheets("Sheet1".Range("B3:H15"

11、.Location Where:=xlLocationAsObject, Name:="Monthly Sales".HasTitle = True.ChartTitle.Characters.Text = Monthly Sales by CategoryEnd WithEnd SubActiveSheet 属性ActiveSheet 属性返回一个表示当前选中的工作表(顶部工作表的 Worksheet 对象。 在一个 工作簿中只有一个工作表能成为活动工作表。下面的示例显示活动工作表的名称。 MsgBox "The name of the active sheet

12、 is " & ActiveSheet.Name下面的示例将活动工作表复制用户指定的次数并放置在 Sheet1之前。Sub CopyActiveSheet(Dim x As Integerx = InputBox("Enter number of times to copy active sheet"For numtimes = 1 To x' Put copies in front of Sheet1.ActiveWorkbook.ActiveSheet.Copy _Before:=ActiveWorkbook.Sheets("Shee

13、t1"NextEnd SubActiveWindow 属性ActiveWindow 属性返回一个表示活动窗口(顶部窗口的 Window 对象。下面的示例显示 活动窗口的名称(Caption 属性 。MsgBox "The name of the active window is " & ActiveWindow.CaptionCaption 属性作为活动窗口的名称允许你通过使用友好的名称而不是序号来获得窗口。 下面的示例选择并打印一个工作表,然后对第二个工作表重复此过程。Sub PrintWorksheet(Application.ScreenUpdati

14、ng = FalseSheets("Sales".SelectActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=TrueSheets("Expenses".SelectActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=TrueEnd Sub在这个例子中,你可能疑惑为什么设置 ScreenUpdating 属性为 False 。当 Excel 执行一系列 任务时,屏幕被更新并刷新很多次,这将导致屏幕闪烁。设置 ScreenUpda

15、ting 属性为 False 可以消除闪烁。 另外, 因为电脑处理器不需要暂停来刷新屏幕, 这样也可以让大型程序运行 得较快一点。ActiveWorkbook 属性ActiveWorkbook 属性返回一个表示活动窗口 (顶部窗口 中的工作簿的 Workbook 对象。这个 示例显示活动工作簿的名称。MsgBox "The name of the active workbook is " & ActiveWorkbook.Name下面示例设置计算模式为手动(这样其它工作簿将不计算 ,然后循环并计算活动工作簿的 每个工作表。Sub CalcBook(Dim wks A

16、s WorksheetApplication.Calculation = xlManualFor Each wks In ActiveWorkbook.Worksheetswks.CalculateNextSet wks = NothingEnd SubRangeSelection 属性RangeSelection 属性返回一个表示指定窗口中工作表里选择的单元格的 Range 对象,即使在 工作表中一个图表对象已经被选择或激活。 这个示例显示活动窗口中工作表所选择单元格的 地址。MsgBox Application.ActiveWindow.RangeSelection.Address当你选择

17、了一个范围, RangeSelection 属性和 Selection 对象表示同样一个范围。当你选择一 个图表, RangeSelection 属性返回之前选择的范围。 Selection 属性将在下一节中详细介绍。 这里介绍的语法 RangeSelection.Name.Name 在 Office2003和 2007中使用时都出现错误,如 果该代码生效,必须先设置单元格 A1的名称。并且应该不是单元格内容的前三个字符,而 是名称的前三个字符。这应该是原文的疏漏。下面的示例显示一个单元格中的前三个字符。Range("A1".SelectMsgBox Left(Active

18、Window.RangeSelection.Name.Name, 3你可能奇怪为什么使用这样的语法ActiveWindow.RangeSelection.Name.Name当你选择一个范围,使用 RangeSelection.Name 方法可以获取像 Sheet1!$A$1:$B$15这样的 范围地址。 另外, 使用 RangeSelection.Name.Name 方法可以获取命名像 MyRange1这样的范 围本身的名称。Selection 属性Selection 属性返回活动窗口中被选择的对象。 例如, 对于单元格, 这个属性返回 Range 对象; 对 于 图 表 , 它 返 回 Ch

19、art 对 象 。 如 果 使 用 属 性 而 没 有 对 象 限 定 符 , 等 于 使 用 Application.Selection 。这个示例清除 Sheet1所选的内容。Worksheets("Sheet1".Activate Selection.Clear下面的例子将所选范围的总行数保存到变量 NumRows 。NumRows = 0For Each area In Selection.AreasNumRows = NumRows + area.Rows.CountNext area这个例子统计所选单元格的总数并在消息框中显示结果。Sub Count_Selec

20、tion(Dim cell As ObjectDim count As Integercount = 0For Each cell In Selectioncount = count + 1Next cellMsgBox count & " item(s selected"End SubStatusBar 属性StatusBar 属性返回或设置状态栏的文本。 这个属性允许你更改在 Excel 窗口底部的状态栏中 显示的信息。它对在运算过程需要较长时间来完成时让用户知道正在运行的进度非常有帮 助。如果 Excel 控制状态栏时 StatusBar 属性返回 False

21、 。另外,如需恢复默认状态栏文本,只需 设置属性值为 False 即可;甚至在状态栏隐藏时也有效。例如,使用下面的方式对每个处理的文件你可以给 StatusBar 属性赋值。Dim FileNum As IntegerFileNum = 0For Each file in Files' Do something here.Application.StatusBar = "Now processing File " & FileNumFileNum = FileNum + 1Next然后当过程结束,你需要使用下面的语句将状态栏设置回正常状态。 Applicat

22、ion.StatusBar = False你可以创建你自己的过程使用 StatusBar 属性显示一个宏或其它过程的进度。Sub ShowStatusBarProgress(Dim i As LongDim pctDone As DoubleDim numSquares As LongConst MAXSQR As Long = 15For i = 1 To 30pctDone = i / 30numSquares = pctDone * MAXSQRApplication.StatusBar = Application.Rept(Chr(31, numSquaresApplication.W

23、ait Now + TimeSerial(0, 0, 1Next iApplication.StatusBar = FalseEnd Sub这个例子在状态栏上显示最大 15个方块 (由常数 MAXSQR 定义 。 这个方块通过使用 ASCII字符 31来产生。这个缺少关于宏需要多长时间的视觉指示,它仅表明宏正在进行。 Wait 方 法模拟一个宏需要长时间来执行。ThisWorkbook 属性ThisWorkbook 属性返回一个表示当前运行的宏代码所在工作簿的 Workbook 对象。这个属 性允许载入宏定义包含代码的工作簿。这种情况下 ActiveWorkbook 属性并不起作用,因为 活动

24、工作簿可能并不是包含载入宏代码的工作簿。换句话说, ActiveWorkbook 属性不返回 载入宏工作簿; 它返回调用载入宏的工作簿。 如果你使用你的 Visual Basic代码创建载入宏, 你应该使用 ThisWorkbook 属性来限定任何必须运行在包含载入宏的工作簿上的语句。 下面示例关闭包含示例代码的工作簿。如果对工作簿的修改不被保存。 ThisWorkbook.Close SaveChanges:=False下面的示例循环每个打开的工作簿并关闭它。然后关闭包含这个代码的工作簿。Private oExcel As Excel.ApplicationPrivate wbk As Ex

25、cel.WorkbookSub CloseOpenWrkBks(Dim wrkb As WorkbookFor Each wbk In Application.WorkbooksIf wrkb.Name <> ThisWorkbook.Name Thenwbk.Close TrueEnd IfNext wbkThisWorkbook.Close TrueEnd SubApplication 对象方法除了 Application 对象属性外,下面将介绍一些更加常用的方法。FindFile 方法和 Dialogs 集合同 GetOpenFilename 方法不同, FindFile 方

26、法显示 Open 对话框并允许用户打开一个文件。 如果新文件成功打开,此方法返回 True 。如果用户取消对话框,此方法返回 False 。下面示例显示一个消息框提示用户打开一个指定文件,然后显示 Open 对话框。如果用户不 能打开文件,显示一个消息框。Sub OpenFile1( Dim bSuccess As BooleanMsgbox "Please locate the MonthlySales.xls file."bSuccess = Application.FindFileIf Not bSuccess ThenMsgbox "File not op

27、en."End IfEnd Sub你也可以通过使用 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_

28、logical, converter.注意:如需查找某个特定的对话框的参数,在 Excel 帮助文档的“内置对话框参数列表”中 找到相应的对话框常数。下面的例子显示“打开”对话框并设置“ Book1.xls ”在文件名下拉列表框中,用户不需要 选择文件就可以在对话框中显示文件名。Sub OpenFile2( Application.Dialogs(XlBuiltInDialog.xlDialogOpen.Show arg1:="Book1.xls"End SubDialogs 集合最激动人心的部分是你可以使用它显示任何 Excel 对话框 -大约 250种。你可以 通过下面

29、的步骤查看 Dialogs 集合的完整对话框列表。1. 打开 Visual Basic编辑器。2. 单击菜单“视图” ->“对象浏览器” ,显示对象浏览器窗口,也可以按 F2。3. 在搜索框中输入 xlBuiltInDialog 。4. 单击 Search 按钮。GetOpenFilename 方法GetOpenFilename 方法显示标准“打开”对话框并返回用户选择的文件名,实际上并未打开 任何文件。 GetOpenFilename 方法给你最大的控制从你的程序中打开一个工作簿,因为它所 做的就是以字符串返回用户选择的文件完整路径和文件名。 获得文件名后接着做什么就取决 于你自己了。

30、例如,你可能传递结果给 OpenText 方法。这个方法的语法如下(所有的参数 都是可选的 :GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect参数 FileFilter 是一个定义过滤条件 (如 *.txt,*.xla的字符串; FilterIndx 指定默认文件过滤条 件的序号,从 1到 FileFilter 中的过滤器数目; Title 指定对话框的标题; ButtonText 只用于 Macintosh 系统; MultiSelect 是一个 Boolean 值,表示可以多选文件。下面的例子显示

31、“打开”对话框,并在文件类型下拉框中使用文本文件(*.txt过滤条件, 然后使用消息框显示用户的选择。Dim fileToOpen As StringfileToOpen = Application.GetOpenFilename("Text Files (*.txt, *.txt"If fileToOpen <> "" ThenMsgBox "Open " & fileToOpenEnd IfInputBox 方法就像你估计的, InputBox 方法显示一个对话框提示用户输入一个值。 这个方法通过指定期望 从用

32、户获取的数据类型允许你有选择性地输入。InputBox 方法语法如下 :InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type其中:Prompt 是显示在对话框中的信息,在这里你可以让用户知道你期望的数据类型。Title 是在对话框顶部显示的标题。Default 是最初显示的默认值。Left 和 Top 用来指定对话框的位置。这些值以屏幕的左上角为参考点,单位是磅。 HelpFile 和 HelpContextID 指定一个帮助文件。如果使用这些参数,在对话框中将包括一个 Help 按钮。Type 是返

33、回的数据类型,默认值是 Text 。允许的数据类型如下表。Value Type0 公式,以字符串返回,只需要此参数1 数值,你也可以在此包括一个返回一个数值的公式2 文本(字符串4 逻辑数值(True 或 False 8 一个单元格引用, Range 对象16 一个错误数值,如 #N/A64 数值列表注意:如果 Type 为 8,你必须使用 Set 语句将结果赋值给一个 Range 对象,如下例所示 Set myRange = Application.InputBox(prompt := "Sample", type := 8下面的例子要求用户输入打印活动工作表的份数。 注

34、意 Type 参数表明此方法要求输入数字。 Sub PrintActiveSheet(Dim TotalCopies As Long, NumCopies As LongDim sPrompt As String, sTitle As StringsPrompt = "How many copies do you want?"sTitle = "Prints the active sheet"TotalCopies = Application.InputBox(Prompt:=sPrompt, Title:=sTitle, Default:=1, Typ

35、e:=1For NumCopies = 1 To TotalCopiesActiveSheet.PrintOutNext NumCopiesEnd SubRun 方法Run 方法执行一个宏或调用一个函数。你可以使用这个方法运行一个用 VBA 或 Excel 宏语 言写的宏,或者运行一个动态链接库(DLL 或 Excel 加载宏(XLL 中的函数。 XLL 是 Excel 的加载宏, 你可以使用任何支持创建 DLLs 的编译器来创建它。 下面是此方法的语法: Run(Macro, Arg1, , Arg30Macro 是要执行的宏或函数的名字。 Arg1到 Arg30是你需要传递给宏或函数的任何

36、参数。 下面的例子使用 Run 方法调用一个过程来设置一个范围中单元格的字体为粗体。注意你也 可以使用 Call 方法来达到同样的结果。Sub UseRunMethod(Dim wks As WorksheetDim rng As RangeSet wks = Worksheets("Sheet2"Set rng = wks.Range("A1:A10"Application.Run "MyProc ", rng' You could accomplish the same thing with:' Call MyPr

37、oc(rngEnd SubSub MyProc(rng As RangeWith rng.Font.Bold = TrueEnd WithEnd SubApplication 对象事件Application 对象也提供几个事件让你可以用来监控整个 Excel 程序的动作。要使用Application 事件,你必须激活 Application 事件监控。请按照以下步骤操作:1. 创建一个类。在 VBE 窗口中,单击“插入” >“类模块”2. 在“属性”栏中,更改类的名称为 appEventClass 。3. 在类模块的代码窗口,输入 :Public WithEvents Apply As

38、Application现在 Application 级的事件可以使用了。4. 现在测试一下,在代码窗口的对象列表中,单击“ Apply ” 。5. 在代码窗口中的过程列表中,单击 Apply_WorkbookOpen. 这样将在代码窗口中添加一个 自动生成的过程用于 Apply_WorkbookOpen事件。6. 修改该过程如下:Private Sub Apply_WorkbookOpen(ByVal Wb As WorkbookMsgBox "你打开了工作簿。 "End Sub7. 重复以上步骤加入 Apply_WorkbookBeforeClose事件。修改该事件的代码

39、如下:Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As BooleanMsgBox "你关闭了工作簿。 "End Sub8. 接着,创建一个变量用来代表在类模块中创建的 Application 对象。在 VBA Project 的 Project 栏,双击 ThisWorkbook 节点打开代码窗口。9. 加入下面的语句。Dim ApplicationClass As New AppEventClass通过在 ThisWorkbook 代码窗口中添加以下过程来建立一个声明的对象到 App

40、lication 对象的 关联。Private Sub Workbook_Open(Set ApplicationClass.Appl = ApplicationEnd Sub10. 保存并关闭工作簿。11. 现在打开该工作簿来测试代码。 Apply_WorkbookOpen事件将显示对话框。12. 关闭工作簿, Apply_WorkbookBeforeClose将显示对话框。13. 回到 AppEventClass 类模块,单击过程列表将显示很多你可以在程序中用来监控动作的 事件。理解事件怎样被激发并以何种顺序激发对理解你的程序很重要。在类模块中加入其它事件, 并插入消息框,然后尝试不同的动

41、作看看什么时候什么事件将被激活。Application 对象的其它用法除了一些常用的对象外,你还可以在 Excel 程序中使用 Application 对象的其它的一些功能。 下面讨论部分用法。删除工作表时不弹出提示窗口在下面的例子中,首先关闭任何询问是否需要删除工作表的警告消息框,然后删除工作表, 再设置使警告消息框生效。Sub DeleteSheet(Application.DisplayAlerts = FalseActiveSheet.DeleteApplication.DisplayAlerts = TrueEnd Sub保存工作簿时无提示这个例子在保存工作簿时没有提示用户。Sub

42、SaveWorksheet(Application.DisplayAlerts = FalseActiveWorkbook.SaveAs "C:MonthlySales.xls"Application.DisplayAlerts = TrueEnd Sub使用 SendKeys 发送信息到 Notepad 程序下面的例子使用 SendKeys 语句从 Excel 语句中复制一个区域的数据到 Notepad 程序中,并 保存为文本文件。Sub SKeys(Range("A1:D15".Copy ' Copy the range.SendKeys &

43、quot;% n", True ' Minimize Excel.Shell "notepad.exe", vbNormalFocus ' Start Notepad.SendKeys "V", True ' Past the range data into Notepad.SendKeys "%FA", True ' Specify SaveAs.SendKeys "SalesData.txt", True ' Provide a file name.SendKe

44、ys "%S", True ' Save the file.Close notepadEnd Sub这个例子首先复制一个区域的数据到剪贴板,然后最小化 Excel ,启动 Notepad ,然后从剪 贴板复制数据到 Notepad ,最后指定文件名并保存文件,再关闭 Notepad 。在指定时间或间隔运行一个宏你可以使用 Application 对象的 OnTime 方法在指定的时间或以固定时间间隔运行一个过程。 OnTime 方法的语法如下:Application.OnTime(EarliestTime, Procedure, LatestTime, Schedu

45、le参数 EarliestTime 表示什么使用运行名称为参数 Procedure 的过程。可选参数 LatestTime 和 Schedule 变量分别表示运行过程的最后时间和是否新建一个过程来运行还是取消现有的过 程。假如开始运行时 Excel 很忙,你需要指定一个时间范围来调用过程时参数 LatestTime 很有帮助。下面的示例每 5分钟运行指定的过程 YourProcApplication.OnTime EarliestTime:= Now + TimeValue("00:05:00, _Procedure := "YourProc"下面的示例每天正午的

46、时候运行过程 YourProc.Application.OnTime _EarliestTime:=TimeValue("12:00:00", _Procedure:="YourProc"下面的示例每 5分钟调用 AutoSave 过程。如果你关闭工作簿,调用 Cleanup 过程来取消前 面设置的 OnTime 。Private Sub Workbook_Open(Application.OnTime Now + TimeValue("00:05:00", "AutoSave"End SubPrivate Sub

47、 Workbook_BeforeClose(Cancel As BooleanOn Error Resume NextApplication.OnTime Now + TimeValue("00:05:00", "CleanUp", , FalseEnd Sub注意:Workbook_Open和 Workbook_BeforeClose事件包含在 Workbook 模块中。 AutoSave 和 CleanUp 过程应该位于标准模块中。结论这篇文章仅介绍 Application 对象的一部分成员。还有其他成员让你的用户以新的方式同 Excel 程序交互和

48、改变你程序的外观。 熟悉 Application 对象的使用将让你按照你自己的要求 扩展和采用 Excel 的功能。moreWorkbook 对象 应用示例 2009-12-29 21:37:01标签:vba WorkbookWorkbook 对象代表一个工作簿, Workbooks 集合对象则代表同一 Excel 进程中打开的所有 工作簿对象。使用 Add 方法在 Workbooks 集合中创建新工作簿,所创建的工作簿为活动工作簿。其语法 为:Workbooks.Add(Template参数 Template 可选, 决定如何创建新工作簿。 如果将该参数设置为已存在的 Excel 模板文件

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

50、 CreateNewWorkbook1(MsgBox "将创建一个新工作簿 ."Workbooks.AddEnd Sub应用示例 2:创建一个新工作簿并命名工作表且添加数据Sub CreateNewWorkbook2(Dim wb As WorkbookDim ws As WorksheetDim i As LongMsgBox "将创建一个新工作簿 , 并预设工作表格式 ."Set wb = Workbooks.AddSet ws = wb.Sheets(1ws.Name = "产品汇总表 "ws.Cells(1, 1 = &quo

51、t;序号 "ws.Cells(1, 2 = "产品名称 "ws.Cells(1, 3 = "产品数量 "For i = 2 To 10ws.Cells(i, 1 = i - 1Next iEnd Sub应用示例 3:创建带有指定数量工作表的工作簿Sub testNewWorkbook(MsgBox "创建一个带有 10个工作表的新工作簿 "Dim wb As WorkbookSet wb = NewWorkbook(10End SubFunction NewWorkbook(wsCount As Integer As Wor

52、kbook' 创建带有由变量 wsCount 提定数量工作表的工作簿,工作表数在 1至 255之间Dim OriginalWorksheetCount As LongSet NewWorkbook = NothingIf wsCount < 1 Or wsCount > 255 Then Exit FunctionOriginalWorksheetCount = Application.SheetsInNewWorkbookApplication.SheetsInNewWorkbook = wsCountSet NewWorkbook = Workbooks.AddAppl

53、ication.SheetsInNewWorkbook = OriginalWorksheetCountEnd Function自定义函数 NewWorkbook 可以创建最多带有 255个工作表的工作簿。本测试示例创建一个 带有 10个工作表的新工作簿。Open 方法用于打开一个现有的工作簿,其语法为:Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify,

54、 Converter, AddToMru, Local, CorruptLoad可以看到, 该方法具有很多参数, 但大多数参数都很少用到。 在这些参数中, 除参数 FileName 必须外,其它参数都可选。参数 FileName 指定要打开的工作簿文件的名称,参数 UpdateLinks 指定更新工作簿中链接 的方式,参数 ReadOnly 用来设置是否以只读方式打开工作簿。如果需要使用密码来打开工 作簿,则应该将参数 Password 设置为该密码;如果需要使用密码打开工作簿但没有指定密 码, 则会弹出询问密码的对话框。 参数 AddToMru 指定是否将工作簿添加到最近使用的文件 列表中,

55、建议将其设置为 True ,默认值为 False 。应用示例 4:以只读方式打开某工作簿Sub openWorkbook2(Dim fname As StringMsgBox "将 D 盘中的 <测试 .xls>工作簿以只读方式打开 "fname = "D:测试 .xls"Workbooks.Open Filename:=fname, ReadOnly:=TrueEnd Sub使用 Item 属性返回 Workbooks 集合中特定的工作簿。例如:Workbooks.Item(1返回 Workbooks 集合中的第一个工作簿。由于 Item

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

57、作簿,例如: Workbooks("MyWorkbook".Activate使用 Workbooks 集合对象的 Count 属性来 获得当前打开的工作簿数,例如:Workbooks.Count如果工作簿以只读方式打开,那么 ReadOnly 属性的值为 True 。属性使用 Workbook 对象的 Name 属性可以返回工作簿的名称。例如,下面的函数可以返回当前 工作簿的名称:Function MyName( As StringMyName = ThisWorkbook.NameEnd Function使用 Workbook 对象的 FullName 属性可以返回工作簿

58、的路径和名称。例如,下面的函数可 以返回当前工作簿的路径和名称:Function MyName( As StringMyName = ThisWorkbook.NameEnd Function使用 Workbook 对象的 Path 属性可以返回工作簿文件的路径。使用 Workbook 对象的 CodeName 属性返回工作簿对象的代码名。上述属性均为只读属性。应用示例 5:一些工作簿通用属性示例Sub testGeneralWorkbookInfo(MsgBox "本工作簿的名称为 " & ActiveWorkbook.NameMsgBox "本工作簿带

59、完整路径的名称为 " & ActiveWorkbook.FullNameMsgBox "本工作簿对象的代码名为 " & ActiveWorkbook.CodeNameMsgBox "本工作簿的路径为 " & ActiveWorkbook.PathIf ActiveWorkbook.ReadOnly ThenMsgBox "本工作簿已经是以只读方式打开 "ElseMsgBox "本工作簿可读写 ."End IfIf ActiveWorkbook.Saved ThenMsgBox "本工作簿已保存 ."ElseMsgBox "本工作簿需要保存 ."End IfEnd Sub使用 Save 方法保存对工作簿所作的所有更改,其语法为:Workbook.Save应用示例 6:保存已存在的所有工作簿Sub SaveAllWorkbooks(Dim wbk As WorkbookFor Each wbk In WorkbooksIf wbk.Path <> "" Then wbk.SaveNe

温馨提示

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

评论

0/150

提交评论