VBA|使用Application对象管理和控制Excel应用程序
Application对象是Excel对象模型的最顶层对象,代表Excel应用程序本身。Application对象提供了大量的属性、方法和事件,供用户操作控制Excel程序。
1 用Application对象打扮应用程序
1.1 用Caption属性设置主窗口标题栏
Private Sub Workbook_Open()
Application.Caption = "工资管理系统"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Caption = ""
End Sub
1.2 用StatusBar属性控制状态栏
Sub 控制状态栏()
Dim i As Long
Application.DisplayStatusBar = True
For i = 1 To ActiveSheet.Rows.Count
If i Mod 100 = 0 Then
Application.StatusBar = "正在处理第 " & i & " 行的数据,请稍候!"
End If
Next
Application.StatusBar = False
End Sub
1.3 用DisplayFormulaBar属性控制编辑栏
Sub 控制编辑栏()
With Application
If .DisplayFormulaBar Then
.DisplayFormulaBar = False
Else
.DisplayFormulaBar = True
End If
End With
End Sub
1.4 用Cursor属性控制鼠标指针形状
Sub 显示鼠标指针形状()
Dim i As Integer
For i = 1 To 3
MsgBox "显示第 " & i & " 种鼠标指针形状!", vbInformation + vbOKOnly
Application.Cursor = i
st = Timer
Do While Timer <= st + 5
DoEvents
Loop
Next
MsgBox "恢复默认鼠标指针形状!", vbInformation + vbOKOnly
Application.Cursor = xlDefault
End Sub
在Excel工作簿中,鼠标指针的形状有4种形式:
xlDefault:默认指针,值为-4143;
xlNorthwestArrow:西北向箭头指针,值为1;
xlWait:沙漏型指针,值为2;
xlIBeam:I形指针,值为3;
2 用Application对象控制应用程序
2.1 用ScreenUpdating属性控制屏幕刷新
在默认情况下,Excel每执行一次操作就会更新一次屏幕,以显示出执行的结果。关闭屏幕刷新,可以提高程序的执行速度。
Sub 屏幕更新()
Dim aTime(2)
Application.ScreenUpdating = True
For i = 1 To 2
If i = 2 Then Application.ScreenUpdating = False
Worksheets(i).Activate
starttime = Timer
For j = 1 To ActiveSheet.Rows.Count
If j Mod 2 = 0 Then
Rows(j).Hidden = True
End If
Next j
stopTime = Timer
aTime(i) = stopTime - starttime
Next i
Application.ScreenUpdating = True
MsgBox "打开屏幕更新,程序执行的时间: " & aTime(1) & " 秒" & Chr(13) & _
"关闭屏幕更新,程序执行的时间: " & aTime(2) & " 秒"
End Sub
2.2 用DisplayAlerts属性控制警报信息
当用户进行一些特定操作(如删除工作表)时,Excel会以对话框的形式提醒用户,需要用户响应才可以进行下一步操作。如果用户不想让Excel进行提示,可以用VBA代码关闭此功能。
Sub 删除工作表()
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub
2.3 用RecentFiles属性显示最近使用的文档
Sub 最近使用文档()
Dim i As Long, j As Long
Dim r As RecentFile
ActiveSheet.Columns(1).Clear
i = 1
For Each r In Application.RecentFiles
ActiveSheet.Cells(i, 1) = r.Name
i = i + 1
Next
End Sub
2.4 用SendKeys方法模拟键盘输入
使用此方法,可以将击键发送给活动应用程序。
Sub 模似输入()
Dim dReturnValue As Double
dReturnValue = Shell("NOTEPAD.EXE", 1) '打开记事本
AppActivate dReturnValue '激活应用程序
Application.SendKeys "~", True
Application.SendKeys "Keybord input demo :", True
Application.SendKeys "~", True
Application.SendKeys " Excel 2010 VBA ! ", True
End Sub
上面的代码运行后,会打开有如下内容的"记事本"窗口,如下图:
2.5 用OnTime方法定时执行过程
以下代码将进行整点报时:
Sub starttime()
Application.OnTime EarliestTime:=TimeSerial((Hour(Now) + 1) Mod 24, 0, 0), _
Procedure:="starttime"
MsgBox "现在时间是:" & Hour(Now) & " 点!"
End Sub
以下代码将取消整点报时:
Sub endtime()
On Error Resume Next
Application.OnTime EarliestTime:=TimeSerial((Hour(Now) + 1) Mod 24, 0, 0), _
Procedure:="starttime", schedule:=False
End Sub
2.6 用WorksheetFunction属性调用内置函数
使用此方法,可以方便地调用Excel工作表函数(注意区别VBA内置函数)。
Sub 查询股票价格()
Dim sStock As String, cPrice As Currency
sStock = InputBox(prompt:="输入股票代码:" & Chr(13) & " (例如:600000) ")
cPrice = Application.WorksheetFunction.VLookup(sStock, _
Worksheets("Sheet1").Range("A1:C5"), 3, 0)
MsgBox "股票" & sStock & "收盘价为:" & cPrice
End Sub
以下代码使用CountIf函数在指定区域生成不重复的随机数:
Sub 生成不重复随机数()
Dim rng As Range, rng1 As Range
Set rng = Application.InputBox(prompt:="选择要保存不重复随机数的单元格区域:", _
Title:="生成随机数", Type:=8)
If rng Is Nothing Then Exit Sub
Randomize
For Each rng1 In rng '选中区域的每个单元格生成随机数
Do
rng1 = Int(Rnd * 100 + 1) '生成1~100的随机数
Loop Until Application.CountIf(rng, rng1) = 1 '循环判断随机数是否有重复
Next
End Sub
2.7 用Goto方法快速跳转
使用此方法可以选定任意工作簿中的任意区域。
Sub 快速跳转()
Application.Goto Reference:=Worksheets("Sheet2").Range("A1:A10"), Scroll:=True
End Sub
2.8 用Union方法合并单元格区域
Sub 合并区域()
Worksheets("Sheet3").Activate
Set unRange = Application.Union(Range("A1:B5"), Range("D1:E5"))
unRange.Formula = "=RAND()"
End Sub
2.9 用OnKey方法自定义功能键
使用此方法,可在设定的特定键或组合键被按下时,运行指定的过程。
Sub 设置自定义功能键()
Application.OnKey "%.", "NextPage"
Application.OnKey "%,", "PrePage"
End Sub
Sub NextPage()
ActiveWindow.LargeScroll down:=1
End Sub
Sub PrePage()
ActiveWindow.LargeScroll up:=1
End Sub
Sub 禁止自定义功能键()
Application.OnKey "%."
Application.OnKey "%,"
End Sub
3 启用并使用Application事件
3.1 启用Application事件
插入类模块EventClassModule,并编写如下代码:
Public WithEvents App As Application
关键字WithEvents说明变数App是用来响应由Application对象触发的事件的对象变数
此时在类模块的"对象"下拉列表框中会出现"App"对象,如下图所示:
类模块中的对象变数 ↑
插入一个新模块,并编写如下代码:
Dim X As New EventClassModule
Sub 启用Application事件()
Set X.App = Application
End Sub
Sub 禁止Application事件()
Set X.App = Nothing
End Sub
3.2 编写Application事件事件过程,保存到类模块EventClassModule中
Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)MsgBox "本工作簿不允许保存修改内容!", vbCritical + vbOKOnly
Cancel = True
End Sub
当保存工作簿时,会弹出不允许保存的对话框。
相关文章
- Google Play 商店应用也不安全,许多 Android 应用程序还在用过时版本核心库
- 免费的 Auto Office L1 系统单机版,提高公司运作效率以达到降低成本
- 如何查看过往 Facebook 按赞互动、留言、被标注的动态活动记录?快速找出你要的内容
- 免费素材资源与线上工具整理,2020年12月号
- Claunch 快速启动免费小工具,可自订 Windows 常用的应用程序、文件、资料夹、网站等等
- 免费可商业使用的 Paper-co 高品质纸张素材库(400多款)
- Vector Club 免费向量图档,可商用并支援 AI 及 EPS 档
- SDelete-Gui 可完全删除重要档案,谁都无法恢复的免费工具
- 适合长辈观看的 Youtube 频道列表,手刀帮爸妈订阅起来
- Xbox 推出家长管理 app !! 控制细路打机时间