Excel Application对象应用大全(一)

 

Application对象是Excel对象模型中最高层级的对象,代表Excel应用程序自身,也包含组成工作簿的许多部分,包括工作簿、工作表、单元格集合以及它们包含的数据。
Application对象包含:
  • 应用程序设置和选项,许多选项与“选项”对话框中的选项相同。
  • 返回顶级对象的方法,例如ActiveCell、ActiveSheet,等等。

本文使用VBA代码示例简要介绍了与Application对象相关的经常使用的对象、方法和属性,其中一些成员能够改变用户与Excel应用程序交互的方式,还能够改变应用程序的外观和式样。熟悉Application对象能够让您扩展和调整Excel的功能,以满足自已的需求。
本文主要介绍的内容如下:
从Application对象中引用对象
Application对象相关的集合

    • AddIns集合
    • Columns集合和Rows集合
    • Dialogs集合
    • Sheets集合

Application对象相关的属性

    • ActiveCell属性
    • ActiveChart属性
    • ActiveSheet属性
    • ActiveWindow属性
    • ActiveWorkbook属性
    • RangeSelection属性
    • ScreenUpdating属性
    • Selection属性
    • StatusBar属性
    • ThisWorkbook属性

Application对象相关的方法

    • FindFile方法和Dialogs集合
    • GetOpenFilename方法
    • GetSaveAsFilename方法
    • InputBox方法
    • Run方法

Application对象相关的事件

    • 激活Application事件监视

使用Application对象执行其它任务

    • 删除工作表而显示提示信息(DisplayAlerts属性)
    • 无须提示用户而保存工作表(DisplayAlerts属性)
    • 使用SendKeys方法发送信息到记事本
    • 安排宏在指定的时间和间隔运行(OnTime方法)

Application对象的其它一些属性和方法

    • Caller属性
    • CutCopyMode属性
    • Evaluate方法
    • OnKey方法
    • ThisCell属性
    • WorksheetFunction属性
    • 改变光标显示(Cursor属性)
    • 获取或改变Excel窗口的状态或大小(WindowState属性)
    • 获取系统信息
    • 自动隐藏公式栏(DisplayFormulaBar属性)
    • 将Excel全屏显示(DisplayFullScreen属性)
    • 获取Excel启动文件夹的路径(StartupPath属性)
    • 检测Excel的版本(Version属性)
    • 打开最近使用过的文档(RecentFiles属性)
    • 文件对话框操作(FileDialog属性)
    • 改变Excel工作簿的名称(Caption属性)
    • 调用Windows的计算器(ActivateMicrosoftApp方法)
    • 暂时停止宏运行(Wait方法)
    • 重新计算工作簿(Calculate方法)
    • 控制函数重新计算(Volatile方法)
    • 获取重叠区域(Intersect方法)
    • 获取路径分隔符(PathSeparator属性)
    • 快速移至指定位置(Goto方法)
    • 关闭Excel(Quit方法)

从Application对象中引用对象
使用Application属性返回Application对象。在引用应用程序之后,要访问Application对象下面的对象,则依次下移对象模型层级。例如,下面的代码设置第一个工作簿的第一个工作表中的第一个单元格的值为20:

Application.Workbooks(1).Worksheets(1).Cells(1, 1) = 20

要引用该单元格,上述代码以Application对象开始,移至第一个工作簿,然后到第一个工作表,最后到达单元格。
下面的示例代码在另一个应用程序中创建一个Excel工作簿,然后打开该工作簿:

Set
 xl = CreateObject("Excel.Sheet"
)
xl.Application.Workbooks.Open "newbook.xls"

可以使用许多属性和方法返回最常用的用户界面对象,例如活动工作表(ActiveSheet属性),而无须Application对象限定。例如,下面的代码:

Application.ActiveSheet.Name = "Monthly Sales"

可以替换为:

ActiveSheet.Name = "Monthly Sales"

然而,在使用简短的引用时必须小心,必须已经选择了正确的对象。如果已经使用诸如Worksheet对象的Activate方法选择了合适的工作簿和工作表,那么能够使用下面的代码引用第一个单元格:

Cells(1, 1) = 20

有一些实例必须使用Application限定引用。例如,OnTime方法、应用程序窗口的Width和Height属性。通常,处理Excel窗口外观的属性或者影响应用程序全部行为的属性需要Application限定,例如DisplayFormulaBar属性用于显示或隐藏公式栏。Calculation方法也需要限定。

Application对象相关的集合
本节介绍与Application对象相关的一些集合。
AddIns集合
AddIns集合代表当前在Excel中装载的所有加载项。就像遍历任何其它集合一样,可以列出应用程序中关于加载项的不同类型的信息。下面的示例列出当前在Excel中装载的加载项的路径和名称:

Sub
 ListAddIns()
Dim myAddin As AddIn
For Each myAddin In AddIns
MsgBox myAddin.FullName
Next
End Sub

Columns集合和Rows集合
这些集合代表当前工作簿中的列和行,可以使用它们分别选择指定的列和行。

Application.Columns(4).Select

上述语句选择D列,就像在工作表中单击该列的标题一样。

Application.Rows(5).Select

上述语句选择第5行,就像在工作表中单击该行的行边一样。
Dialogs集合
Dialogs集合由应用程序中所有的对话框组成。本文后面将详细介绍该集合。
Sheets集合
Sheets对象返回指定工作簿或活动工作簿中所有工作表的集合。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

Application对象相关的属性
在Excel 2007应用程序中,有大量的属性用来访问不同的对象。这里,只探讨经常使用的属性。

  • ActiveCell
  • ActiveChart
  • ActiveSheet
  • ActiveWindow
  • ActiveWorkbook
  • RangeSelection
  • ScreenUpdating
  • Selection
  • StatusBar
  • ThisWorkbook

ActiveCell属性
Application对象的ActiveCell属性返回Range对象,代表活动工作簿的活动工作表中的活动单元格。如果没有指定对象限定,那么该属性返回活动窗口中的活动单元格。
注意区分活动单元格和单元格选区。活动单元格是当前选区里的单个单元格,选区可能包含很多单元格,但仅有一个单元格是活动单元格。
下面的示例改变活动单元格的字体格式。注意确保正在处理正确的单元格,Worksheets集合的Activate方法使工作表Sheet1为活动工作表。

Worksheets("Sheet1"
).Activate
With ActiveCell.Font
.Bold = True
.Italic = True
End With

ActiveChart属性
ActiveChart属性返回Chart对象,代表活动图表,无论该图表是嵌入式图表还是图表工作表。当嵌入式图表被选择或者被激活时,该图表是活动图表。下面的示例使用ActiveChart属性在工作表Monthly Sales中添加一个三维柱形图:

Sub
 AddChart()
Charts.Add
With ActiveChart
.ChartType = xl3DColumn
.SetSourceData Source:=Sheets("Sheet1" ).Range("B3:H15" )
.Location Where:=xlLocationAsObject, Name:="Monthly Sales"
.HasTitle = True
.ChartTitle.Characters.Text = "Monthly Sales by Category"
End With
End Sub

ActiveSheet属性
ActiveSheet属性返回Worksheet对象,代表当前所选择的工作表(在顶部的工作表)。在一个工作簿中仅仅有一个工作表是活动工作表。下面的示例显示活动工作表的名字:

MsgBox "活动工作表的名字是"
 & ActiveSheet.Name

下面的示例由用户指定复制活动工作表的次数并复制活动工作表,将复制的工作表放置到工作表Sheet1的前面:

Sub
 CopyActiveSheet()
Dim x As Integer , numtimes As Integer
x = InputBox("请输入复制活动工作表的次数" )
For numtimes = 1 To x
'在工作表Sheet1的前面放置工作表副本
ActiveWorkbook.ActiveSheet.Copy _
Before:=ActiveWorkbook.Sheets("Sheet1" )
Next
End Sub

ActiveWindow属性
ActiveWindow属性返回Window对象,代表活动窗口(在顶部的窗口)。下面的示例显示活动窗口的名称(Caption属性):

MsgBox "活动窗口的名称是"
 & ActiveWindow.Caption

Caption属性返回活动窗口的名称,允许使用名称而不是索引号来更清楚地访问该窗口。
下面的示例选择并打印工作表,然后对第二个工作表重复这一过程:

Sub
 PrintWorksheet()
Application.ScreenUpdating = False
Sheets("Sales" ).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Expenses" ).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

在该示例中,您可能奇怪为什么将ScreenUpdating属性设置为False。当Excel执行一系列操作任务时,屏幕被更新并且被刷新许多次,这导致屏幕闪烁。设置ScreenUpdating属性为False消除这些闪烁。此外,因为计算机处理器无须为刷新屏幕而暂停,这能使大的应用程序运行得更快。
ActiveWorkbook属性
ActiveWorkbook属性返回Workbook对象,代表活动窗口中的工作簿。下面的示例显示活动工作簿的名称:

MsgBox "活动工作簿的名称是"
 & ActiveWorkbook.Name

下面的示例设置计算模式为手动,然后遍历并计算活动工作簿中的每个工作表:

Sub
 CalcBook()
Dim wks As Worksheet
Application.Calculate = xlManual
For Each wks In ActiveWorkbook.Worksheets
wks.Calculate
Next
Set wks = Nothing
End Sub

RangeSelection属性
RangeSelection属性返回Range对象,代表在指定的窗口的工作表中所选择的单元格,即使是工作表中激活或选择的图形对象。下面的示例显示活动窗口的工作表中所选择的单元格的地址:

MsgBox Application.ActiveWindow.RangeSelection.Address

当选择单元格区域时,RangeSelection属性和Selection对象代表相同的单元格区域。当选择图形时,RangeSelection属性返回以前的单元格选区。关于Selection属性的更多介绍参见下节。
下面的示例显示单元格中头三个字符:

Range("A1"
).Select

MsgBox Left(ActiveWindow.RangeSelection, 3)

下面的示例显示单元格名称的头三个字符:

Range("A1"
).Select

MsgBox Left(ActiveWindow.RangeSelection.Name.Name, 3)

命令RangeSelection.Name.Name返回单元格名称。
ScreenUpdating属性
ScreenUpdating属性用于控制屏幕刷新,可将其值设置为True或False。通常,Excel开启了屏幕刷新(即该属性值为True),因此在代码执行时,Excel会随着代码的操作而不断更新屏幕显示,这样在运行处理涉及到多个工作表或单元格中的大量数据的代码(选择或激活对象)时,屏幕会不停闪烁,并且会占用CPU的处理时间,从而降低程序的运行速度。
可以在程序代码的开始部分设置ScreenUpdating属性为False,即Application.ScreenUpdating=False,以关闭屏幕刷新,这样不仅能够使代码运行更快,而且使得界面对用户更为友好。在程序结束前,将该属性设置为True,以恢复Excel对屏幕更新的控制。
然而,在宏运行的过程中,如果需要显示用户窗体或者内置对话框,建议先恢复屏幕刷新,否则拖动用户窗体时,会在屏幕上产生橡皮擦的效果。当然,在显示该对象后,可以重新关闭屏幕刷新。
Selection属性
Selection属性返回活动窗口中所选择的对象。例如,对于单元格,该属性返回Range对象;对于图表,该属性返回Chart对象。如果使用该属性时没有限定引用,则等价于Application.Selection。
下面的示例清除工作表Sheet1中的选区(假设选区是单元格区域):

Worksheets("Sheet1"
).Activate
Selection.Clear

下面的示例在变量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 & "项被选择"
End Sub

下面的示例确保在输入数据之前选择的是工作表:

Sub
 EnterDataInWorksheet()
If TypeName(ActiveSheet) <> "Worksheet" _
Or TypeName(Selection) <> "Range" Then
MsgBox "本程序仅用于单元格区域" , vbCritical
Exit Sub
End If
Range("A1" ).Value = 20
End Sub

StatusBar属性
StatusBar属性返回或设置状态栏中的文本。该属性允许改变显示在Excel窗口底部的状态栏中的信息,这特别有助于使用户了解需要花时间完成的操作处理的进度。因此,状态栏是一种告知用户当前程序信息的极好方式,并且状态栏不会干扰用户,也易被开发者利用。
如果Excel控制状态栏,则StatusBar属性返回False。此外,要恢复缺省的状态栏文本,只需设置该属性为False,即使隐藏了状态栏。
例如,下面的示例将现在正在处理的文件赋值给状态栏:

Sub
 test()
Dim FileNum As Integer
FileNum = 0
For Each file In Files
Application.StatusBar = "现在正在处理文件" & FileNum
FileNum = FileNum + 1
Next
End Sub

然后,当程序结束时,使用下面的语句将状态栏恢复为正常:

Application.StatusBar = False

这是通知Excel并清空状态栏的最简单的方式。除非重新启动Excel,否则状态栏中会一直保持着使用Application.StatusBar所显示的文本,因此应该在合适的地方使用Application.StatusBar = False语句,尤其是应该考虑发生错误时如何恢复状态栏。另外,在使用状态栏时,需要选择一个合适的更新间隔,使之既不会影响程序性能又能为用户提供有用的信息。
可以创建自已的过程来使用StatusBar属性,以显示宏或其它过程的进度:

Sub
 ShowStatusBarProgress()
Dim i As Long
Dim pctDone As Double
Dim numSquares As Long

Const MAXSQR As Long = 15

For i = 1 To 30
pctDone = i / 30
numSquares = pctDone * MAXSQR
Application.StatusBar = Application.WorksheetFunction.Rept(Chr(60), numSquares)
Application.Wait Now + TimeSerial(0, 0, 1)
Next i

Application.StatusBar = False
End Sub

本示例随着程序的运行逐渐显示由常量MAXSQR定义的15个小于符号,小于符号使用ASCⅡ字符60生成。本示例没有指示过程执行多长时间,只是显示了执行的进度。Wait方法摸拟宏占用的执行时间。
要在VBA代码中使用状态栏,首先确定在用户界面中是否显示了状态栏(因为用户极有可能关闭了显示状态栏的选项),并且在状态栏使用完毕后,应将其恢复到用户原先的设置,因此在程序开始前,将状态栏的信息保存到一个变量中:

bStatusBarInfo=Application.DisplayStatusBar

然后,将DisplayStatusBar属性设置为True,以确保显示状态栏。在程序结束前,将状态栏恢复到原先的设置:

Application.DisplayStatusBar=bStatusBarInfo

ThisWorkbook属性
ThisWorkbook属性返回Workbook对象,代表当前正运行的宏所在的工作簿。该属性允许加载项引用包含代码的工作簿。ActiveWorkbook属性在该实例中不会工作,因为活动工作簿可能不是包含加载项代码的工作簿。换句话说,ActiveWorkbook属性不会返回加载项工作簿,它返回调用加载项的工作簿。如果从VB代码创建了一个加载项,应该使用ThisWorkbook属性限定必须在编译到该加载项的工作簿中运行的语句。
下面的示例关闭包含示例代码的工作簿,如果修改了该工作簿,则不会保存修改。

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 True
End If
Next wbk
ThisWorkbook.Close True
End Sub

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值