Excel应用工作簿工作表区域等基础对象开发指南.docx
- 文档编号:17636253
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:131
- 大小:75.31KB
Excel应用工作簿工作表区域等基础对象开发指南.docx
《Excel应用工作簿工作表区域等基础对象开发指南.docx》由会员分享,可在线阅读,更多相关《Excel应用工作簿工作表区域等基础对象开发指南.docx(131页珍藏版)》请在冰点文库上搜索。
Excel应用工作簿工作表区域等基础对象开发指南
ExcelApplication对象开发指南
2009-12-2613:
10:
21
概述
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对象相关的集合。
(1)AddIns集合
AddIns集合表示所有当前加载的ExcelAdd-in。
你可以像枚举其它对象一样在你的程序中列举出关于add-in的不同类型信息。
下面的示例列举出当前加载到Excel中的Add-in的路径和名称。
SubListAddIns()
DimmyAddinAsAddIn
ForEachmyAddinInAddIns
MsgBoxmyAddin.FullName
Next
EndSub
(2)Columns和Rows集合
这两个集合表示活动工作簿中的列和行。
分别使用它们选择指定的列和行。
Application.Columns(4).Select
这个语句选择D列,就像你通过点击用户界面中的列的顶部一样。
Application.Rows(5).Select
这个语句选择工作表中的第5行,就像你点击行的左边框一样。
(3)Dialogs集合
Dialogs集合包括Excel程序中所有的对话框。
将在本文中后面部分更详细地讨论Dialogs集合。
(4)Sheets集合
Sheets集合返回指定或活动工作簿中所有工作表的集合。
Sheets集合可以包含Chart或Worksheet对象。
下面示例打印出活动工作簿中所有的工作表。
Application.Sheets.PrintOut
这个示例循环工作簿中所有的工作表并打印出包含数据区域的任何工作表。
ForiSheet=1ToApplication.Sheets.Count
IfNotIsEmpty(Application.Sheets(iSheet).UsedRange)Then
Application.Sheets(iSheet).PrintOutcopies:
=1
EndIf
NextiSheet
Application对象的属性
有很多的属性可以用来访问Excel2007程序的各种对象,多得不能记住或在这里全部讨论。
幸运的是只有一部分是你可能经常使用的。
ActiveCell
ActiveChart
ActiveSheet
ActiveWindow
ActiveWorkbook
RangeSelection
Selection
StatusBar
ThisWorkbook
下面的内容演示这些常用属性的使用方法。
(1)ActiveCell属性
Application对象的ActiveCell属性返回一个表示活动工作簿中活动工作表的活动单元格的Range对象。
如果你没有指定对象限定词,这个属性返回活动窗口的活动单元格。
注意区别活动单元格和选择的单元格。
活动单元格是当前选择中的一个单元格。
选择(Selection)可能包括一个单元格集合,但只有其中一个是活动单元格。
下面示例改变活动单元格的字体格式。
注意为确保你操作正确的单元格,工作表集合的Activate方法让Sheet1成为活动工作表。
Worksheets("Sheet1").Activate
WithActiveCell.Font
.Bold=True
.Italic=True
EndWith
(2)ActiveChart属性
ActiveChart属性返回表示活动图表的Chart对象,不管它是嵌入的图表还是图表工作表。
在一个嵌入的图表被选择或激活时,它就是活动图表。
下面的示例使用ActiveChart属性添加一个3维柱形图到月销售记录工作表中。
SubAddChart()
Charts.Add
WithActiveChart
.ChartType=xl3DColumn
.SetSourceDataSource:
=Sheets("Sheet1").Range("B3:
H15")
.LocationWhere:
=xlLocationAsObject,Name:
="MonthlySales"
.HasTitle=True
.ChartTitle.Characters.Text=MonthlySalesbyCategory
EndWith
EndSub
(3)ActiveSheet属性
ActiveSheet属性返回一个表示当前选中的工作表(顶部工作表)的Worksheet对象。
在一个工作簿中只有一个工作表能成为活动工作表。
下面的示例显示活动工作表的名称。
MsgBox"Thenameoftheactivesheetis"&ActiveSheet.Name
下面的示例将活动工作表复制用户指定的次数并放置在Sheet1之前。
SubCopyActiveSheet()
DimxAsInteger
x=InputBox("Enternumberoftimestocopyactivesheet")
Fornumtimes=1Tox
'PutcopiesinfrontofSheet1.
ActiveWorkbook.ActiveSheet.Copy_
Before:
=ActiveWorkbook.Sheets("Sheet1")
Next
EndSub
(4)ActiveWindow属性
ActiveWindow属性返回一个表示活动窗口(顶部窗口)的Window对象。
下面的示例显示活动窗口的名称(Caption属性)。
MsgBox"Thenameoftheactivewindowis"&ActiveWindow.Caption
Caption属性作为活动窗口的名称允许你通过使用友好的名称而不是序号来获得窗口。
下面的示例选择并打印一个工作表,然后对第二个工作表重复此过程。
SubPrintWorksheet()
Application.ScreenUpdating=False
Sheets("Sales").Select
ActiveWindow.SelectedSheets.PrintOutCopies:
=1,Collate:
=True
Sheets("Expenses").Select
ActiveWindow.SelectedSheets.PrintOutCopies:
=1,Collate:
=True
EndSub
在这个例子中,你可能疑惑为什么设置ScreenUpdating属性为False。
当Excel执行一系列任务时,屏幕被更新并刷新很多次,这将导致屏幕闪烁。
设置ScreenUpdating属性为False可以消除闪烁。
另外,因为电脑处理器不需要暂停来刷新屏幕,这样也可以让大型程序运行得较快一点。
(5)ActiveWorkbook属性
ActiveWorkbook属性返回一个表示活动窗口(顶部窗口)中的工作簿的Workbook对象。
这个示例显示活动工作簿的名称。
MsgBox"Thenameoftheactiveworkbookis"&ActiveWorkbook.Name
下面示例设置计算模式为手动(这样其它工作簿将不计算),然后循环并计算活动工作簿的每个工作表。
SubCalcBook()
DimwksAsWorksheet
Application.Calculation=xlManual
ForEachwksInActiveWorkbook.Worksheets
wks.Calculate
Next
Setwks=Nothing
EndSub
(6)RangeSelection属性
RangeSelection属性返回一个表示指定窗口中工作表里选择的单元格的Range对象,即使在工作表中一个图表对象已经被选择或激活。
这个示例显示活动窗口中工作表所选择单元格的地址。
MsgBoxApplication.ActiveWindow.RangeSelection.Address
当你选择了一个范围,RangeSelection属性和Selection对象表示同样一个范围。
当你选择一个图表,RangeSelection属性返回之前选择的范围。
Selection属性将在下一节中详细介绍。
这里介绍的语法RangeSelection.Name.Name在Office2003和2007中使用时都出现错误,如果该代码生效,必须先设置单元格A1的名称。
并且应该不是单元格内容的前三个字符,而是名称的前三个字符。
这应该是原文的疏漏。
下面的示例显示一个单元格中的前三个字符。
Range("A1").Select
MsgBoxLeft(ActiveWindow.RangeSelection.Name.Name,3)
你可能奇怪为什么使用这样的语法
ActiveWindow.RangeSelection.Name.Name
当你选择一个范围,使用RangeSelection.Name方法可以获取像Sheet1!
$A$1:
$B$15这样的范围地址。
另外,使用RangeSelection.Name.Name方法可以获取命名像MyRange1这样的范围本身的名称。
(7)Selection属性
Selection属性返回活动窗口中被选择的对象。
例如,对于单元格,这个属性返回Range对象;对于图表,它返回Chart对象。
如果使用属性而没有对象限定符,等于使用Application.Selection。
这个示例清除Sheet1所选的内容。
Worksheets("Sheet1").ActivateSelection.Clear
下面的例子将所选范围的总行数保存到变量NumRows。
NumRows=0
ForEachareaInSelection.Areas
NumRows=NumRows+area.Rows.Count
Nextarea
这个例子统计所选单元格的总数并在消息框中显示结果。
SubCount_Selection()
DimcellAsObject
DimcountAsInteger
count=0
ForEachcellInSelection
count=count+1
Nextcell
MsgBoxcount&"item(s)selected"
EndSub
(8)StatusBar属性
StatusBar属性返回或设置状态栏的文本。
这个属性允许你更改在Excel窗口底部的状态栏中显示的信息。
它对在运算过程需要较长时间来完成时让用户知道正在运行的进度非常有帮助。
如果Excel控制状态栏时StatusBar属性返回False。
另外,如需恢复默认状态栏文本,只需设置属性值为False即可;甚至在状态栏隐藏时也有效。
例如,使用下面的方式对每个处理的文件你可以给StatusBar属性赋值。
DimFileNumAsInteger
FileNum=0
ForEachfileinFiles
'Dosomethinghere.
Application.StatusBar="NowprocessingFile"&FileNum
FileNum=FileNum+1
Next
然后当过程结束,你需要使用下面的语句将状态栏设置回正常状态。
Application.StatusBar=False
你可以创建你自己的过程使用StatusBar属性显示一个宏或其它过程的进度。
SubShowStatusBarProgress()
DimiAsLong
DimpctDoneAsDouble
DimnumSquaresAsLong
ConstMAXSQRAsLong=15
Fori=1To30
pctDone=i/30
numSquares=pctDone*MAXSQR
Application.StatusBar=Application.Rept(Chr(31),numSquares)
Application.WaitNow+TimeSerial(0,0,1)
Nexti
Application.StatusBar=False
EndSub
这个例子在状态栏上显示最大15个方块(由常数MAXSQR定义)。
这个方块通过使用ASCII字符31来产生。
这个缺少关于宏需要多长时间的视觉指示,它仅表明宏正在进行。
Wait方法模拟一个宏需要长时间来执行。
(9)ThisWorkbook属性
ThisWorkbook属性返回一个表示当前运行的宏代码所在工作簿的Workbook对象。
这个属性允许载入宏定义包含代码的工作簿。
这种情况下ActiveWorkbook属性并不起作用,因为活动工作簿可能并不是包含载入宏代码的工作簿。
换句话说,ActiveWorkbook属性不返回载入宏工作簿;它返回调用载入宏的工作簿。
如果你使用你的VisualBasic代码创建载入宏,你应该使用ThisWorkbook属性来限定任何必须运行在包含载入宏的工作簿上的语句。
下面示例关闭包含示例代码的工作簿。
如果对工作簿的修改不被保存。
ThisWorkbook.CloseSaveChanges:
=False
下面的示例循环每个打开的工作簿并关闭它。
然后关闭包含这个代码的工作簿。
PrivateoExcelAsExcel.Application
PrivatewbkAsExcel.Workbook
SubCloseOpenWrkBks()
DimwrkbAsWorkbook
ForEachwbkInApplication.Workbooks
Ifwrkb.Name<>ThisWorkbook.NameThen
wbk.CloseTrue
EndIf
Nextwbk
ThisWorkbook.CloseTrue
EndSub
Application对象方法
除了Application对象属性外,下面将介绍一些更加常用的方法。
(1)FindFile方法和Dialogs集合
同GetOpenFilename方法不同,FindFile方法显示Open对话框并允许用户打开一个文件。
如果新文件成功打开,此方法返回True。
如果用户取消对话框,此方法返回False。
下面示例显示一个消息框提示用户打开一个指定文件,然后显示Open对话框。
如果用户不能打开文件,显示一个消息框。
SubOpenFile1()
DimbSuccessAsBoolean
Msgbox"PleaselocatetheMonthlySales.xlsfile."
bSuccess=Application.FindFile
IfNotbSuccessThen
Msgbox"Filenotopen."
EndIf
EndSub
你也可以通过使用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"
EndSub
Dialogs集合最激动人心的部分是你可以使用它显示任何Excel对话框-大约250种。
你可以通过下面的步骤查看Dialogs集合的完整对话框列表。
打开VisualBasic编辑器。
单击菜单“视图”->“对象浏览器”,显示对象浏览器窗口,也可以按F2。
在搜索框中输入xlBuiltInDialog。
单击Search按钮。
(2)GetOpenFilename方法
GetOpenFilename方法显示标准“打开”对话框并返回用户选择的文件名,实际上并未打开任何文件。
GetOpenFilename方法给你最大的控制从你的程序中打开一个工作簿,因为它所做的就是以字符串返回用户选择的文件完整路径和文件名。
获得文件名后接着做什么就取决于你自己了。
例如,你可能传递结果给OpenText方法。
这个方法的语法如下(所有的参数都是可选的):
GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)
参数
FileFilter是一个定义过滤条件(如*.txt,*.xla)的字符串;
FilterIndx指定默认文件过滤条件的序号,从1到FileFilter中的过滤器数目;
Title指定对话框的标题;
ButtonText只用于Macintosh系统;
MultiSelect是一个Boolean值,表示可以多选文件。
下面的例子显示“打开”对话框,并在文件类型下拉框中使用文本文件(*.txt)过滤条件,然后使用消息框显示用户的选择。
DimfileToOpenAsString
fileToOpen=Application.GetOpenFilename("TextFiles(*.txt),*.txt")
IffileToOpen<>""Then
MsgBox"Open"&fileToOpen
EndIf
(3)InputBox方法
就像你估计的,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)
下面的例子要求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Excel 应用 工作 区域 基础 对象 开发 指南