Application对象是Excel VBA中最顶层的对象,代表整个Excel程序,它是所有其他Excel对象的父对象,通过它可以访问和控制Excel的各种功能和属性.
作为VBA编程的起点,Application对象允许你控制Excel的行为,访问工作簿、工作表、单元格等,以及执行各种Excel操作。
大多数情况下,可以省略Application前缀,直接使用其属性或方法
Sub CompareActiveCell()
' 使用Application前缀
Dim cell1 As Range
Set cell1 = Application.ActiveCell
' 不使用Application前缀
Dim cell2 As Range
Set cell2 = ActiveCell
' 两种方式效果相同
MsgBox "cell1地址: " & cell1.Address & vbNewLine & _
"cell2地址: " & cell2.Address
End Sub
使用With语句可以简化代码,提高效率
Sub UsingWithStatement()
With Application
' 关闭屏幕刷新和自动计算
.ScreenUpdating = False
.Calculation = xlCalculationManual
' 在这里执行你的代码
' ...
' 恢复屏幕刷新和自动计算
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
1.常用属性
ActiveCell返回当前活动单元格(选中单元格的第一个)
即使选中多个单元格,也是返回这些单元格中的第一个
Sub ShowActiveCell()
' 声明一个Range对象变量
Dim activeCell As Range
' 将当前活动单元格赋值给变量
Set activeCell = Application.ActiveCell
' 显示活动单元格的地址
MsgBox "当前活动单元格是: " & activeCell.Address
End Sub
ActiveWorkbook返回当前活动工作簿
Sub ShowActiveWorkbook()
' 声明一个Workbook对象变量
Dim activeWB As Workbook
' 将当前活动工作簿赋值给变量
Set activeWB = Application.ActiveWorkbook
' 显示活动工作簿的名称
MsgBox "当前活动工作簿是: " & activeWB.Name
End Sub
Calculation属性设置或返回计算模式
Sub ToggleCalculation()
' 检查当前计算模式
If Application.Calculation = xlCalculationAutomatic Then
' 如果是自动计算,则改为手动计算
Application.Calculation = xlCalculationManual
MsgBox "计算模式已更改为手动"
Else
' 如果是手动计算,则改为自动计算
Application.Calculation = xlCalculationAutomatic
MsgBox "计算模式已更改为自动"
End If
End Sub
ScreenUpdating属性控制屏幕刷新
Sub FastProcessing()
' 关闭屏幕刷新以加快处理速度
Application.ScreenUpdating = False
' 这里放置你的代码逻辑
' ...
' 完成后重新开启屏幕刷新
Application.ScreenUpdating = True
End Sub
InputBox方法 线束输入框并获取用户输入
Sub GetUserInput()
' 声明变量存储用户输入
Dim userInput As String
' 使用InputBox方法获取用户输入
userInput = Application.InputBox("请输入你的名字:", "用户输入")
' 显示用户输入的内容
MsgBox "你好, " & userInput & "!"
End Sub
2.取得Excel版本信息(以及年份)
Application对象的Version属性可以返回Excel的版本号,通过版本号也可以得到Excel的年代版本
Sub GetDetailedExcelInfo()
' 声明变量
Dim excelVersion As String
Dim excelYear As String
Dim excelBuild As Long
Dim excelName As String
Dim excelPath As String
Dim excelBitness As String
' 获取Excel版本信息
excelVersion = Application.Version
excelBuild = Application.Build
excelName = Application.Name
excelPath = Application.Path
' 确定Excel的位数
If InStr(1, Application.OperatingSystem, "x64") > 0 Then
excelBitness = "64位"
Else
excelBitness = "32位"
End If
' 根据版本号判断Excel年份
Select Case Left(excelVersion, 2)
Case "8."
excelYear = "97"
Case "9."
excelYear = "2000"
Case "10"
excelYear = "2002 (XP)"
Case "11"
excelYear = "2003"
Case "12"
excelYear = "2007"
Case "14"
excelYear = "2010"
Case "15"
excelYear = "2013"
Case "16"
excelYear = "2016/2019/365"
Case Else
excelYear = "未知版本"
End Select
' 创建详细的信息字符串
Dim detailedInfo As String
detailedInfo = "Excel详细信息:" & vbNewLine & _
"版本号: " & excelVersion & vbNewLine & _
"对应年份: Excel " & excelYear & vbNewLine & _
"构建号: " & excelBuild & vbNewLine & _
"应用程序名称: " & excelName & vbNewLine & _
"应用程序路径: " & excelPath & vbNewLine & _
"位数: " & excelBitness
' 显示消息框
MsgBox detailedInfo, vbInformation, "Excel版本信息"
' 在即时窗口中也输出这些信息
Debug.Print detailedInfo
End Sub
3.取得当前的Excel用户名称
Sub ShowUserName()
' 显示当前Excel用户名
MsgBox "当前Excel用户名是: " & Application.UserName, vbInformation, "用户名信息"
' 在即时窗口中也输出这个信息
Debug.Print "当前Excel用户名是: " & Application.UserName
End Sub
4.在Excel中的“定时器”
ExcelVBA并没有提供定时器控件,但是可以通过Application对象的OnTime方法实现简单的定时器功能
Application.OnTime方法的基本语法:
Application.OnTime EarliestTime, Procedure, [LatestTime], [Schedule]
EarliestTime: 指定过程运行的时间(日期和时间)。
Procedure: 要运行的过程名称(字符串)。
LatestTime: 可选参数,指定过程最晚运行时间。
Schedule: 可选参数,布尔值,True 表示安排过程运行,False 表示取消已安排的过程。
(下面的代码运行报错)
Sub StartTimer()
Sheet1.Cells(1, 2) = Sheet1.Cells(1, 2) + 1 '指定单元格的数值+1
Application.OnTime Now + TimeValue("00:00:01"), "StartTimer" '每隔一秒调用过程本身
End Sub
5.设置活动打印机的名称
Application对象的ActivePrinter属性可以设置活动打印机的名称
Application.ActivePrinter = "打印机名称"
更具体的例子
Sub 设置活动打印机()
' 声明一个变量来存储打印机名称
Dim printerName As String
' 设置打印机名称
printerName = "HP LaserJet Pro MFP M126nw"
' 使用On Error语句来处理可能的错误
On Error Resume Next
' 设置活动打印机
Application.ActivePrinter = printerName
' 检查是否有错误发生
If Err.Number <> 0 Then
MsgBox "设置打印机失败。错误信息: " & Err.Description, vbExclamation, "错误"
Else
MsgBox "成功设置打印机为: " & printerName, vbInformation, "成功"
End If
' 关闭错误处理
On Error GoTo 0
End Sub
6.屏蔽、更改组合键的功能
使用Application对象的OnKey方法可以屏蔽或改变组合键的默认操作
基本语法:
Application.OnKey(Key, [Procedure])
Key: 要定义的键或键组合(字符串)
Procedure: 可选参数,指定按下键时要运行的过程(如果省略,则恢复键的正常功能)
键的表示方法:
^ 表示Ctrl键
表示Shift键
% 表示Alt键
{F1}、{F2}等表示功能键
当您使用OnKey方法禁用或重新映射快捷键时,这些更改只在当前的Excel会话中有效。当您关闭Excel后,所有的快捷键都会恢复到默认设置。
如果您想要在每次打开Excel时自动应用这些更改,可以将这些代码放在工作簿的Open事件中:
Private Sub Workbook_Open()
Call 禁用多个快捷键
End Sub
Sub 禁用新建工作簿快捷键()
' 禁用Ctrl+N组合键
Application.OnKey "^n", ""
End Sub
Sub 恢复新建工作簿快捷键()
' 恢复Ctrl+N组合键的默认功能
Application.OnKey "^n"
End Sub
Sub 禁用多个快捷键()
' 禁用Ctrl+N (新建工作簿)
Application.OnKey "^n", ""
' 禁用Ctrl+P (打印)
Application.OnKey "^p", ""
' 禁用Ctrl+S (保存)
Application.OnKey "^s", ""
MsgBox "已禁用Ctrl+N, Ctrl+P, Ctrl+S快捷键", vbInformation, "快捷键已禁用"
End Sub
Sub 恢复多个快捷键()
' 恢复Ctrl+N
Application.OnKey "^n"
' 恢复Ctrl+P
Application.OnKey "^p"
' 恢复Ctrl+S
Application.OnKey "^s"
MsgBox "已恢复Ctrl+N, Ctrl+P, Ctrl+S快捷键的默认功能", vbInformation, "快捷键已恢复"
End Sub
Sub 重映射F1键()
' 将F1键映射到自定义过程
Application.OnKey "{F1}", "自定义帮助"
End Sub
Sub 自定义帮助()
' 这是F1键将会执行的自定义过程
MsgBox "这是自定义帮助信息", vbInformation, "自定义帮助"
End Sub
Sub 恢复F1键()
' 恢复F1键的默认功能
Application.OnKey "{F1}"
End Sub
7.自定义Excel状态栏
Excel左下角的状态栏显示应用程序的当前状态(如就绪、输入等)或上下文提示信息,通过设置Application对象的Statusbar属性可以修改状态栏,以显示用户自定义的信息
Sub 修改状态栏()
' 设置状态栏文本
Application.StatusBar = "这是一条自定义状态栏消息"
End Sub
Sub 显示当前时间()
' 设置状态栏显示当前时间
Application.StatusBar = "当前时间: " & Format(Now, "yyyy-mm-dd hh:mm:ss")
End Sub
8.隐藏Excel主窗口
如果希望在程序启动时或运行过程中隐藏Excel主窗口,有以下几种方法实现
设置Application对象的Visible属性
Application.Visible=False
将屏幕移出窗口
设置Application对象的Left属性(从屏幕左边界至Excel窗口左边界的距离)和/或Top属性,将Application对象移出屏幕外
Sub 将Excel窗口移出屏幕()
Dim originalLeft As Long
Dim originalTop As Long
' 保存原始位置
originalLeft = Application.Left
originalTop = Application.Top
' 将Excel窗口移到屏幕外
Application.Left = -20000
Application.Top = -20000
' 执行一些操作
' ...
' 将Excel窗口移回原位
Application.Left = originalLeft
Application.Top = originalTop
End Sub
设置工作簿为加载宏运行
利用加载宏不显示工作簿窗口的特点,设置工作簿作为加载宏运行来隐藏工作簿窗口
Private Sub Workbook_Open()
ThisWorkbook.IsAdin=True
UserForm1.Show
End Sub
Private Sub Workbook_Open()
这是工作簿的Open事件过程。每次工作簿被打开时,这个过程都会自动运行。
ThisWorkbook.IsAddin = True
这行代码将当前工作簿的IsAddin属性设置为True,effectively把工作簿转换为加载项模式。
在加载项模式下,工作簿的行为会有所不同,比如默认情况下不显示工作表。
UserForm1.Show
这行代码显示名为UserForm1的用户窗体。
这允许您在加载项启动时立即与用户交互。
1 thought on “5.Application对象——《VBA常用技巧代码解析》”