1、Excel应用工作簿工作表区域等基础对象开发指南Excel应用、工作簿、工作表、区域等基础对象开发指南.txt你站在那不要动!等我飞奔过去!雨停了 天晴了 女人你慢慢扫屋 我为你去扫天下了 你是我的听说现在结婚很便宜,民政局9块钱搞定,我请你吧你个笨蛋啊遇到这种事要站在我后面!跟我走总有一天你的名字会出现在我家的户口本上。 本文由jytang091218贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 Excel Application 对象 开发指南 2009-12-26 13:10:21 概 述 Application 对象是 Microsoft
2、Office Excel 2007 对象模型中最高级别的对象,表示 Excel 程序自身。 Application 对象提供正在运行的程序的信息、应用于程序实例的选项以及实例中打开 的当前对象。因为它是对象模型中最高的对象,Application 对象也包含组成一个工作簿的 很多部件,包括如工作簿、工作表集合、单元格以及这些对象所包含的数据等。 Application 对象包括: 程序范围的设置和选项。这些选项大部分同“工具”菜单下的“选项”对话框里的内容 相同。 顶级对象返回的方法,如 ActiveCell、ActiveSheet 等。 在下面几节里,你将通过使用 VBA 代码示例学习到一些
3、 Application 对象中经常使用到 的对象、 方法和属性。 关于 Application 对象模型所有成员的详细资料, 请参考 Application 对象成员。 Application 对象中其它对象的引用方法 你可以使用 Application 属性返回 Application 对象。获取一个 Application 对象后, 如需访问它下面的对象,可以在对象模型层级中往下移动。 下面示例设置一个工作表的第一个单元格内容为 20。 Application.Workbooks(1).Worksheets(1).Cells(1,1)=20 要表示一个单元格,上面的代码示例从 Appli
4、cation 对象开始,移到第一个工作簿,再 移到第一个工作表,最后到这个单元格。 下面示例在另一个 Excel 程序中创建一个 Excel 工作簿对象,然后打开一个工作簿。 Set xl=CreateObject(Excel.Sheet) xl.Application.Workbooks.Open newbook.xls 不需要使用“Application”限定词,很多的属性和方法也可以直接被用来返回那些最常 用的用户界面对象,如活动工作表 (ActiveSheet 属性)。 例如,除了使用 Application.ActiveSheet.Name = “Monthly Sales” ,你也
5、可以使用 ActiveSheet.Name = “Monthly Sales” 。 然而,当使用这个简便表示方法时必需小心,需要选择正确的对象。例如通过使用 Worksheet 对象的 Activate 方确定你选择了正确的工作簿和工作表后, 你可以使用 Cell(1,1) 表示第一个单元格。 有几种情况你必需使用 Application 限定词。例如,OnTime 对象(本文后面部分将讨论) 需要这个限定词,还有程序窗口的 Width 和 Height 属性。 一般来说,用来处理 Excel 窗口的外观或影响程序全局行为的属性或方法需要使用 Application 限定词;例如, Displ
6、ayFormlaBar 属性用来显示或隐藏公式栏,Calculation 方法也需要限定词。 Application 对象集合 这一节详细介绍一些和 Application 对象相关的集合。 (1) AddIns 集合 AddIns 集合表示所有当前加载的 Excel Add-in。 你可以像枚举其它对象一样在你的程序 中列举出关于 add-in 的不同类型信息。下面的示例列举出当前加载到 Excel 中的 Add-in 的 路径和名称。 Sub ListAddIns() Dim myAddin As AddIn For Each myAddin In AddIns MsgBox myAddi
7、n.FullName Next End Sub (2) Columns 和 Rows 集合 这两个集合表示活动工作簿中的列和行。分别使用它们选择指定的列和行。 Application.Columns(4).Select 这个语句选择 D 列,就像你通过点击用户界面中的列的顶部一样。 Application.Rows(5).Select 这个语句选择工作表中的第 5 行,就像你点击行的左边框一样。 (3) Dialogs 集合 Dialogs 集合包括 Excel 程序中所有的对话框。将在本文中后面部分更详细地讨论 Dialogs 集合。 (4) Sheets 集合 Sheets 集合返回指定或
8、活动工作簿中所有工作表的集合。Sheets 集合可以包含 Chart 或 Worksheet 对象。 下面示例打印出活动工作簿中所有的工作表。 Application.Sheets.PrintOut 这个示例循环工作簿中所有的工作表并打印出包含数据区域的任何工作表。 For iSheet = 1 To Application.Sheets.Count If Not IsEmpty(Application.Sheets(iSheet).UsedRange) Then Application.Sheets(iSheet).PrintOut copies:=1 End If Next iSheet
9、Application 对象的属性 有很多的属性可以用来访问 Excel 2007 程序的各种对象, 多得不能记住或在这里全部讨 论。幸运的是只有一部分是你可能经常使用的。 ActiveCell ActiveChart ActiveSheet ActiveWindow ActiveWorkbook RangeSelection Selection StatusBar ThisWorkbook 下面的内容演示这些常用属性的使用方法。 (1) ActiveCell 属性 Application 对象的 ActiveCell 属性返回一个表示活动工作簿中活动工作表的活动单元 格的 Range 对象。
10、如果你没有指定对象限定词,这个属性返回活动窗口的活动单元格。 注意区别活动单元格和选择的单元格。活动单元格是当前选择中的一个单元格。 选择(Selection)可能包括一个单元格集合,但只有其中一个是活动单元格。 下面示例改变活动单元格的字体格式。注意为确保你操作正确的单元格,工作表集合的 Activate 方法让 Sheet1 成为活动工作表。 Worksheets(Sheet1).Activate With ActiveCell.Font .Bold = True .Italic = True End With (2) ActiveChart 属性 ActiveChart 属性返回表示活动
11、图表的 Chart 对象,不管它是嵌入的图表还是图表工作 表。在一个嵌入的图表被选择或激活时,它就是活动图表。下面的示例使用 ActiveChart 属 性添加一个 3 维柱形图到月销售记录工作表中。 Sub AddChart() Charts.Add With ActiveChart .ChartType = xl3DColumn .SetSourceData Source:=Sheets(Sheet1).Range(B3:H15) .Location Where:=xlLocationAsObject, Name:=Monthly Sales .HasTitle = True .Chart
12、Title.Characters.Text = Monthly Sales by Category End With End Sub (3) ActiveSheet 属性 ActiveSheet 属性返回一个表示当前选中的工作表(顶部工作表)的 Worksheet 对象。 在一个工作簿中只有一个工作表能成为活动工作表。下面的示例显示活动工作表的名称。 MsgBox The name of the active sheet is ; ActiveSheet.Name 下面的示例将活动工作表复制用户指定的次数并放置在 Sheet1 之前。 Sub CopyActiveSheet() Dim x A
13、s Integer x = 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(Sheet1) Next End Sub (4) ActiveWindow 属性 ActiveWindow 属性返回一个表示活动窗口(顶部窗口)的 Window 对象。下面的示例显 示活动窗口的名称(Caption 属性) 。 Ms
14、gBox The name of the active window is ; ActiveWindow.Caption Caption 属性作为活动窗口的名称允许你通过使用友好的名称而不是序号来获得窗口。 下面的示例选择并打印一个工作表,然后对第二个工作表重复此过程。 Sub PrintWorksheet() Application.ScreenUpdating = False Sheets(Sales).Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets(Expenses).Select A
15、ctiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub 在这个例子中,你可能疑惑为什么设置 ScreenUpdating 属性为 False。当 Excel 执行一 系列任务时,屏幕被更新并刷新很多次,这将导致屏幕闪烁。设置 ScreenUpdating 属性为 False 可以消除闪烁。另外,因为电脑处理器不需要暂停来刷新屏幕,这样也可以让大型程 序运行得较快一点。 (5) ActiveWorkbook 属性 ActiveWorkbook 属性返回一个表示活动窗口(顶部窗口)中的工作簿的 Workbook 对象
16、。 这个示例显示活动工作簿的名称。 MsgBox The name of the active workbook is ; ActiveWorkbook.Name 下面示例设置计算模式为手动 (这样其它工作簿将不计算) 然后循环并计算活动工作簿 , 的每个工作表。 Sub CalcBook() Dim wks As Worksheet Application.Calculation = xlManual For Each wks In ActiveWorkbook.Worksheets wks.Calculate Next Set wks = Nothing End Sub (6) Range
17、Selection 属性 RangeSelection 属性返回一个表示指定窗口中工作表里选择的单元格的 Range 对象, 即 使在工作表中一个图表对象已经被选择或激活。这个示例显示活动窗口中工作表所选择单元 格的地址。 MsgBox Application.ActiveWindow.RangeSelection.Address 当你选择了一个范围,RangeSelection 属性和 Selection 对象表示同样一个范围。当你 选择一个图表,RangeSelection 属性返回之前选择的范围。Selection 属性将在下一节中详 细介绍。 这里介绍的语法 RangeSelectio
18、n.Name.Name 在 Office2003 和 2007 中使用时都出现错 误, 如果该代码生效, 必须先设置单元格 A1 的名称。 并且应该不是单元格内容的前三个字符, 而是名称的前三个字符。这应该是原文的疏漏。 下面的示例显示一个单元格中的前三个字符。 Range(A1).Select MsgBox Left(ActiveWindow.RangeSelection.Name.Name, 3) 你可能奇怪为什么使用这样的语法 ActiveWindow.RangeSelection.Name.Name 当你选择一个范围,使用 RangeSelection.Name 方法可以获取像 She
19、et1!$A$1:$B$15 这 样的范围地址。另外,使用 RangeSelection.Name.Name 方法可以获取命名像 MyRange1 这样 的范围本身的名称。 (7) Selection 属性 Selection 属性返回活动窗口中被选择的对象。例如,对于单元格,这个属性返回 Range 对象;对于图表,它返回 Chart 对象。 如果使用属性而没有对象限定符,等于使用 Application.Selection。 这个示例清除 Sheet1 所选的内容。 Worksheets(Sheet1).Activate Selection.Clear 下面的例子将所选范围的总行数保存到变
20、量 NumRows。 NumRows = 0 For Each area In Selection.Areas NumRows = NumRows + area.Rows.Count Next area 这个例子统计所选单元格的总数并在消息框中显示结果。 Sub Count_Selection() Dim cell As Object Dim count As Integer count = 0 For Each cell In Selection count = count + 1 Next cell MsgBox count & item(s) selected End Sub (8) S
21、tatusBar 属性 StatusBar 属性返回或设置状态栏的文本。这个属性允许你更改在 Excel 窗口底部的状 态栏中显示的信息。它对在运算过程需要较长时间来完成时让用户知道正在运行的进度非常 有帮助。 如果 Excel 控制状态栏时 StatusBar 属性返回 False。另外,如需恢复默认状态栏文本, 只需设置属性值为 False 即可;甚至在状态栏隐藏时也有效。 例如,使用下面的方式对每个处理的文件你可以给 StatusBar 属性赋值。 Dim FileNum As Integer FileNum = 0 For Each file in Files Do something
22、 here. Application.StatusBar = Now processing File ; FileNum FileNum = FileNum + 1 Next 然后当过程结束,你需要使用下面的语句将状态栏设置回正常状态。 Application.StatusBar = False 你可以创建你自己的过程使用 StatusBar 属性显示一个宏或其它过程的进度。 Sub ShowStatusBarProgress() Dim i As Long Dim pctDone As Double Dim numSquares As Long Const MAXSQR As Long =
23、15 For i = 1 To 30 pctDone = i / 30 numSquares = pctDone * MAXSQR Application.StatusBar = Application.Rept(Chr(31), numSquares) Application.Wait Now + TimeSerial(0, 0, 1) Next i Application.StatusBar = False End Sub 这个例子在状态栏上显示最大 15 个方块 (由常数 MAXSQR 定义)这个方块通过使用 ASCII 。 字符 31 来产生。这个缺少关于宏需要多长时间的视觉指示,它仅
24、表明宏正在进行。Wait 方 法模拟一个宏需要长时间来执行。 (9) ThisWorkbook 属性 ThisWorkbook 属性返回一个表示当前运行的宏代码所在工作簿的 Workbook 对象。 这个属性允许载入宏定义包含代码的工作簿。 这种情况下 ActiveWorkbook 属性并不起作 用,因为活动工作簿可能并不是包含载入宏代码的工作簿。换句话说,ActiveWorkbook 属性 不返回载入宏工作簿;它返回调用载入宏的工作簿。如果你使用你的 Visual Basic 代码创建 载入宏,你应该使用 ThisWorkbook 属性来限定任何必须运行在包含载入宏的工作簿上的语 句。 下面
25、示例关闭包含示例代码的工作簿。如果对工作簿的修改不被保存。 ThisWorkbook.Close SaveChanges:=False 下面的示例循环每个打开的工作簿并关闭它。然后关闭包含这个代码的工作簿。 Private oExcel As Excel.Application Private wbk As Excel.Workbook Sub CloseOpenWrkBks() Dim wrkb As Workbook For Each wbk In Application.Workbooks If wrkb.Name ThisWorkbook.Name Then wbk.Close Tru
26、e End If Next wbk ThisWorkbook.Close True End Sub Application 对象方法 除了 Application 对象属性外,下面将介绍一些更加常用的方法。 (1) FindFile 方法和 Dialogs 集合 同 GetOpenFilename 方法不同,FindFile 方法显示 Open 对话框并允许用户打开一个文 件。如果新文件成功打开,此方法返回 True。如果用户取消对话框,此方法返回 False。 下面示例显示一个消息框提示用户打开一个指定文件, 然后显示 Open 对话框。 如果用户 不能打开文件,显示一个消息框。 Sub O
27、penFile1( ) Dim bSuccess As Boolean Msgbox Please locate the MonthlySales.xls file. bSuccess = Application.FindFile If Not bSuccess Then Msgbox File not open. End If End Sub 你也可以通过使用 Dialogs 集合细目的其中一个打开特别的对话框来完成同样的事情。 使用 Dialogs 集合的一个好处是当你使用 Show 方法时, 你可以传递参数给它来修改内置对话 框的默认行为。例如,xlDialogOpen 的参数有: fi
28、le_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”在文件名下拉列表框中,用户不需 要选择文件就可以在对话框中显示文件名。 Sub Op
29、enFile2( ) Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Show arg1:=Book1.xls End Sub Dialogs 集合最激动人心的部分是你可以使用它显示任何 Excel 对话框-大约 250 种。 你 可以通过下面的步骤查看 Dialogs 集合的完整对话框列表。 打开 Visual Basic 编辑器。 单击菜单“视图”-“对象浏览器” ,显示对象浏览器窗口,也可以按 F2。 在搜索框中输入 xlBuiltInDialog。 单击 Search 按钮。 (2) GetOpenFilename 方法 GetOpe
30、nFilename 方法显示标准“打开”对话框并返回用户选择的文件名,实际上并未 打开任何文件。GetOpenFilename 方法给你最大的控制从你的程序中打开一个工作簿,因为 它所做的就是以字符串返回用户选择的文件完整路径和文件名。获得文件名后接着做什么就 取决于你自己了。例如,你可能传递结果给 OpenText 方法。 这个方法的语法如下(所有的参数都是可选的) : GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect) 参数 FileFilter 是一个定义过滤条件(如*.txt,*.xla)的字
31、符串; FilterIndx 指定默认文件过滤条件的序号,从 1 到 FileFilter 中的过滤器数目; Title 指定对话框的标题; ButtonText 只用于 Macintosh 系统; MultiSelect 是一个 Boolean 值,表示可以多选文件。 下面的例子显示“打开”对话框,并在文件类型下拉框中使用文本文件(*.txt)过滤条 件,然后使用消息框显示用户的选择。 Dim fileToOpen As String fileToOpen = Application.GetOpenFilename(Text Files (*.txt), *.txt) If fileToOp
32、en Then MsgBox Open & fileToOpen End If (3) InputBox 方法 就像你估计的,InputBox 方法显示一个对话框提示用户输入一个值。这个方法通过指定 期望从用户获取的数据类型允许你有选择性地输入。 InputBox 方法语法如下: InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type) 其中: Prompt 是显示在对话框中的信息,在这里你可以让用户知道你期望的数据类型。 Title 是在对话框顶部显示的标题。 Default 是最初显示的默认值。 Left 和 Top 用来指定对话框的位置。这些值以屏幕的左上角为参考点,单位是磅。 HelpFile 和 HelpContextID 指定一个帮助文件。如果使用这些参数,在对话框中将包括一个 Help 按钮。 Type 是返回的数据类型,默认值是 Text。允许的数据类型如下表。 Value Type 0 公式,以字符串返回,只需要此参数 1 数值,你也可以在此包括一个返回一个数值的公式 2 文本(字符串) 4 逻辑数值(True 或 False) 8 一个单元格引用,Range 对象 16 一个错误数值,如#N/A 64 数值列表 注意:如果 Type 为 8,你必须使用 Set
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2