DownOL 软件仓库– 软件下载,字节世界与新知

VBA|使用Application对象管理和控制Excel应用程序

发表于:2025-05-04 作者:创始人
编辑最后更新 2025年05月04日,Application对象是Excel对象模型的最顶层对象,代表Excel应用程序本身。Application对象提供了大量的属性、方法和事件,供用户操作控制Excel程序。1 用Applicatio

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

当保存工作簿时,会弹出不允许保存的对话框。

2022-05-09 12:51:40
0