Application对象 - EXCEL VBA(14)
Application对象是EXCEL对象模型的最顶层对象,代表EXCEL运用程序本身。Application对象提供了大量的属性、方法和事件供用户调用。
使用VBA在EXCEL环境下开发应用程序,就是访问和控制EXCEL各个对象的过程。所以,了解EXCEL对象模型是VBA编程的重要基础之一。“VBA编程 = VBA语法+EXCEL对象模型”。VBA是面向对象的程序设计语言,将其嵌入EXCEL后,就可以直接访问EXCEL的各个对象。
导读
- Application对象介绍
Application对象常用属性Application对象常用方法Application对象常用事件
- Application对象运用
控制EXCEL文档状态控制应用程序模拟键盘输入调用EXCEL工作表快速跳转和合并单元格
- Application对象介绍
启用Application事件编写Application事件过程
一、Application对象介绍
1、Application对象常用属性
Application对象提供了很多属性,通过这些属性完成控制EXCEL的状态、获取对象的引用等操作。
I、控制EXCEL的状态
属性 | 备注 |
DisplayFormulaBar | 设置该属性为True显示编辑栏 |
DisplayScrollBars | 设置该属性为True所有工作簿显示滚动条 |
DisplayStatusBar | 设置该属性为True显示状态栏 |
StatusBar | 返回或设置状态栏中的文字 |
WindowState | 返回或设置窗口的状态 |
II、获取对象的引用
许多Application对象的属性可以用来返回其它的对象,返回对象的属性主要有以下几种:
对象 | 备注 |
ActiveCell | 返回一个Range对象,指活动窗口(最上方的窗口)中的活动单元格区域 |
ActiveChart | 返回一个Chart对象,指嵌入的活动图表 |
ActiveSheet | 返回活动工作表对象 |
ActiveWindow | 返回活动窗口对象 |
ActiveWorkBook | 返回一个WorkBook对象,指当前窗口 |
Cells | 返回一个Range对象,值活动表格的所有行列。Cells对象的Item属性可以具体确定行、列索引 |
Selection | 返回活动表格中的选定对象 |
Sheets | 返回Sheets集合,指活动工作簿中的所有工作表 |
WorkBooks | 返回WorkBooks集合,表示所有打开的工作簿/td> |
WorkSheetFunction | VBA用于调用EXCEL工作表函数的对象 |
2、Application对象常用方法
Application对象提供了很多允许执行操作的方法,下面是一些常用的方法:
方法 | 备注 |
Calculate | 指计算打开的工作簿,工作簿中的某个工作表或指定单元格区域。如sheets("sheet1").Calculate,表示sheet1中的公式重新计算 |
Evaluate | 允许用字符串形式创建引用,并且在需要的时候转换成一个对象引用或求出表达式的值 |
Goto | 用于在工作簿中导航到指定的单元格或区域 |
Quit | 退出EXCEL程序。如果不需要系统显示对话框询问是否保存,可在使用Quit前设置语句DisplayAlerm=FalseDisplayAlerm=FalseDisplayAlerm=FalseDisplayAlerm=False |
OnTime | 指定一个过程在将来特定时间运行 |
Undo | 撤销最后一次用户界面操作 |
Union | 返回两个或多个区域的合并区域 |
3、Application对象常用事件
在EXCEL对象模型中,大部分对象(Workbook、Worksheet、Range)都提供了事件接口,能满足程序设计的需要,用户可以不用Application对象事件。常用Application对象事件主要有以下几种:
事件 | 备注 |
NewWorkbook | 建立新工作簿时触发此事件 |
SheetActivate | 激活任何工作簿触发事件 |
SheetChange | 工作表单元格内容发生变化触发此事件 |
SheetDeactivate | 停用任何工作簿触发事件 |
WindowActivate | 窗口激活时触发该事件 |
WindowDeactivate | 窗口停用时触发此事件 |
WindowResize | 调整窗口大小时触发事件 |
WorkBookActivate | 激活任何工作簿触发事件 |
WorkBookBeforeClose | 关闭工作簿前触发事件 |
WorkBookBeforeSave | 保存工作簿前触发事件 |
WorkBookNewSheet | 在打开的工作簿中建立新表触发事件 |
WorkBookOpen | 打开工作簿时触发事件 |
二、Application对象运用
1、控制EXCEL文档状态
Application对象代表整个EXCEL应用程序,通过Application对象的属性就可以设置应用程序的各个选项。
"控制EXCEL文档状态样例代码
Application.Caption = "银河统计" "在EXCEL文档标题栏文档名称后面添加标题
Application.StatusBar = "银河统计" ""银河统计"显示在屏幕左下角状态栏中
Application.DisplayFormulaBar = False "屏蔽EXCEL公式编辑栏(设置属性值为True恢复)
"控制指针形状(xlDefault:默认;xlNorthwestArrow:西北向箭头;
"xlIBeam:I型指针;xlWait:沙漏型指针)
Application.Cursor = xlDefault "程序或过程结束时应恢复默认设置
2、控制应用程序
通过Application对象的相关属性,还可以对EXCEL应用程序的运行状态进行控制。例如,关闭屏幕刷新、禁止弹出警告对话框。
通常,EXCEL每执行一次操作就会更新一次屏幕,使用VBA操作EXCEL也是如此,这样会导致程序运行速度下降。关闭屏幕更新可以加快程序运行速度。注意程序运行结束后恢复程序更新功能。
正常情况下,当用户删除工作表或保存修改过的文件时,将弹出确认对话框,可以使用Application对象的DisplayAlerts属性屏蔽对话框。
"控制应用程序样例代码
Application.ScreenUpdating = False "关闭屏幕更新(EXCEL单元格操作前)
Application.ScreenUpdating = True "恢复屏幕更新(EXCEL单元格操作后)
Application.DisplayAlerts = False "关闭提示警告对话框
Application.DisplayAlerts = True "恢复提示警告对话框
Application.RecentFiles.Maximum = 5 "利用RecentFiles属性设定最近使用文件数量(1-9)
MsgBox Application.RecentFiles.Count "返回最近文件数
MsgBox Application.RecentFiles.Item(1).Name "返回第一个最近使用文件路径和名称
3、模拟键盘输入
使用Application对象的SendKeys方法,可以模拟用户点击键盘发送指令给应用程序。
语法:
Application.SendKeys(Keys, Wait)
【Keys:以文本形式发送给应用程序的键或组合键】
【Wait:逻辑值,如果为True,处理完按键后再执行程序】
"模拟键盘输入样例代码
Dim rValue As Double
rValue = Shell("NOTEPAD.EXE", 1)
AppActivate rValue
Application.SendKeys "~", True
Application.SendKeys "Keybord input demo: ", True
Application.SendKeys "~", True
Application.SendKeys "Excel 2007 VBA!", True
注:在SendKeys方法中,"~"表示Enter键
4、调用EXCEL工作表
Application对象的WorksheetFunction属性可以方便地调用EXCEL工作表函数。现有EXCEL文档如下图:
"调用EXCEL工作表样例代码
Dim oRange As Object
Dim oRange1 As Object
Dim oRange2 As Object
Dim oRange3 As Object
Dim oSum As Double
Dim oCountif As Integer
Dim oCountifs As Integer
Set oRange = Worksheets("sheet3").Range("C2:E10")
oSum = Application.WorksheetFunction.Sum(oRange)
MsgBox oSum
Set oRange1 = Worksheets("sheet3").Range("C2:C21")
oCountif = Application.WorksheetFunction.CountIf(oRange1, ">=" & 60)
MsgBox oCountif
Set oRange1 = Worksheets("sheet3").Range("C2:C21")
Set oRange2 = Worksheets("sheet3").Range("D2:D21")
Set oRange3 = Worksheets("sheet3").Range("E2:E21")
oCountifs = Application.WorksheetFunction.CountIfs(oRange1, ">=60", oRange2, ">=60", oRange3, ">=60")
MsgBox oCountifs
Set oRange1 = Worksheets("sheet3").Range("B2:B21")
oCountif = Application.WorksheetFunction.CountIf(oRange1, "王?")
MsgBox oCountif
注:可以在条件中使用通配符问号“?”和星号“*”,如果要查找实际的问号“?”和星号“*”,可在该字符前键入波形符“~”
5、快速跳转和合并单元格
"快速跳转和合并单元格样例代码
Dim oRange As Object
Application.Goto reference:=Worksheets("sheet1").Range("C21:C25"), Scroll:=True
Worksheets("sheet4").Activate
Set oRange = Application.Union(Range("C1:C10"), Range("D1:D10"))
oRange.Formula = "=RAND()"
三、用户动作处理(响应)
1、启用Application事件
激活Application事件需要如下步骤:
- 建立类模块:例如,在VBE中建立类模块oArray
- 声明引用对象:代码为,
Public WithEvents App As Application
- 选择对象变量App:在类模块声明带有事件的新对象后,该对象变量出现在类模块的的【对象】下拉列表中,如图:
- 选择事件:在【对象】下拉列表中前面声明的事件变量,该对象有效事件将列在【过程】下拉列表中,选择事件后即可进行编程。如图:
- 建立模块并添加激活代码:建立模块oMethod,编写代码如下:
Dim X As New oArray
Sub InitializeApp()
Set X.App = Application
End Sub
注:oArray为类模块名称。经过以上设置,EXCEL即可捕获Application对象的事件。对于Application对象事件的代码必须写在类模块oArray中
2、编写Application事件过程
激活Application事件需要如下步骤:
- 事件编程:例如,在App【对象】下拉列表中的【过程】中选择事件SheetChange,如图:
- 编写事件代码:
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox 123456789
End Sub
- 事件调用:在某一过程中引用模块过程InitializeApp,代码为, Call InitializeApp
注:调用过程InitializeApp,EXCEL单元格内容改变后将激活运行对象事件App_SheetChange
通过使用Application对象,可以实现对Excel应用程序的自动化操作和控制,例如打开、关闭、保存工作簿,导航到不同的单元格或工作表,执行各种计算和数据处理操作,运行宏等。Application对象是Excel VBA编程中的一个重要对象,掌握其属性和方法的使用可以提高VBA编程的效率和灵活性。