Skip to content
KARINKARIN
博客主页
项目总览
知识要点
捣鼓折腾
Git笔记
Excel修炼秘籍
github icon
  • 博客主页
    • 项目总览
        • Excel 笔记介绍
          • Excel 快捷键
            • Excel 函数
              • VBA 之 Range 对象
                • VBA 之 Sheet 对象
                  • VBA 之 Workbook 对象
                    • VBA 之 Shape、Chart 对象
                      • VBA 之 Application 对象
                        • 64、取得 Excel 版本信息
                          • 65、取得当前用户名称
                            • 66、Excel 中的“定时器“
                              • 67、设置活动打印机的名称
                                • 68、屏蔽、改变组合键的功能
                                  • 69、设置 Excel 窗口标题栏
                                    • 70、自定义 Excel 状态栏
                                      • 71、灵活退出 Excel
                                        • 72、隐藏 Excel 主窗口
                                          • 1)设置 Application 对象的 Visible 属性
                                            • 2)将窗口移出屏幕
                                              • 3)设置工作簿作为加载宏运行
                                            • VBA 之 使用对话框
                                              • VBA 之 菜单和工具栏
                                                • VBA 之 控件与用户窗体1
                                                  • VBA 之 控件与用户窗体2
                                                    • VBA 之 控件与用户窗体3
                                                      • VBA 之 函数的使用
                                                        • VBA 之 文件操作

                                                        VBA 之 Application 对象

                                                        author iconkarincalendar icon2021年7月2日category icon
                                                        • 笔记
                                                        tag icon
                                                        • Excel
                                                        timer icon大约 11 分钟

                                                        此页内容
                                                        • 64、取得 Excel 版本信息
                                                        • 65、取得当前用户名称
                                                        • 66、Excel 中的“定时器“
                                                        • 67、设置活动打印机的名称
                                                        • 68、屏蔽、改变组合键的功能
                                                        • 69、设置 Excel 窗口标题栏
                                                        • 70、自定义 Excel 状态栏
                                                        • 71、灵活退出 Excel
                                                        • 72、隐藏 Excel 主窗口
                                                          • 1)设置 Application 对象的 Visible 属性
                                                          • 2)将窗口移出屏幕
                                                          • 3)设置工作簿作为加载宏运行

                                                        # 64、取得 Excel 版本信息

                                                        Application 对象的 Version 属性可以返回 Excel 的版本号,如下面的代码所示。

                                                        Sub AppVersion()
                                                          Dim myVersion As String
                                                          Select Case Application.Version
                                                        	  Case "8.0"
                                                        		  myVersion = "97"
                                                        	  Case "9.0"
                                                        		  myVersion = "2000"
                                                        	  Case "10.0"
                                                        		  myVersion = "2002"
                                                        	  Case "11.0"
                                                        		  myVersion = "2003"
                                                        	  Case Else
                                                        		  myVersion = "版本未知"
                                                          End Select
                                                          MsgBox "Excel 版本是: " & myVersion
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8
                                                        9
                                                        10
                                                        11
                                                        12
                                                        13
                                                        14
                                                        15
                                                        16

                                                        代码解析:

                                                        AppVersion 过程返回 Application 对象的 Version 属性值来取得 Excel 版本号。

                                                        应用于 Application 对象的 Version 属性返回 Excel 版本号,语法如下:

                                                        expression.Version
                                                        
                                                        参数expression是必需的,Application对象。
                                                        
                                                        1
                                                        2
                                                        3

                                                        运行 AppVersion 过程结果如图 64-1 所示。

                                                        图 64-1 取得 Excel 版本号

                                                        # 65、取得当前用户名称

                                                        使用 Application 对象的 UserName 属性可以取得当前用户名称,如下面的代码所示。

                                                        Sub UserName()
                                                        	MsgBox "当前用户名是: " & Application.UserName
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3

                                                        代码解析:

                                                        UserName 过程使用消息框显示当前用户名称。

                                                        Application 对象的 UserName 属性返回或设置当前用户的名称。

                                                        运行 UserName 过程效果如图 65-1 所示。

                                                        图 65-1 显示当前用户名称

                                                        # 66、Excel 中的“定时器“

                                                        Excel VBA 并没有提供定时器控件,但是用户可以通过 Application 对象的 OnTime 方法实现简单的定时器功能,如下面的代码所示。

                                                        Sub StartTimer()
                                                        	Sheet1.Cells(1, 2) = Sheet1.Cells(1, 2) + 1
                                                        	Application.OnTime Now + TimeValue("00:00:01"), "StartTimer"
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4

                                                        代码解析:

                                                        StartTimer 过程,使用 Application 对象的 OnTime 方法循环调用 StartTimer 过程实现每隔一秒钟运行一次 StartTimer 过程,从而在B1单元格中不断地显示程序累计运行时间,如图 66-1 所示。

                                                        图 66-1 简单的定时器

                                                        第 2 行代码将 B1 单元格的值在原有的数字上加 1。

                                                        第 3 行代码使用 OnTime 方法在 1 秒后重新调用 StartTimer 过程,使 B1 单元格的值不断的加 1,从而显示程序累计运行时间。

                                                        应用于 Application 对象的 OnTime 方法能够安排一个过程在将来的特定时间运行,语法如下:

                                                        expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
                                                        
                                                        参数expression是必需的,返回一个Application对象。
                                                        参数EarliestTime是必需的,设置指定的过程开始运行的时间。使用Now + TimeValue(time)可以安排从现在开始经过一段时间之后运行某个过程,使用TimeValue(time)可以安排在指定的时间运行某个过程。
                                                        参数Procedure是必需的,设置要运行的过程名称。
                                                        参数LatestTime是可选的,设置过程开始运行的最晚时间。例如将参数LatestTime设置为EarliestTime+10,当时间到了EarliestTime时如果Excel不处于空闲状态,那么Excel将等待10秒,如果在10秒内Excel不能回到空闲状态,则不运行该过程。如果省略该参数,Excel将一直等待到可以运行该过程为止。
                                                        参数Schedule是可选的,如果其值为True(默认值),则安排一个新的OnTime过程,如果其值为False,则清除先前设置的过程。
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7

                                                        取消定时的代码如下:

                                                        Sub EndTimer()
                                                        	On Error GoTo Line
                                                        	Application.OnTime Now + TimeValue("00:00:01"), "StartTimer", , False
                                                        	Sheet1.Cells(1, 2) = 0
                                                        	Exit Sub
                                                        Line:
                                                        	MsgBox "请先按[开始]按钮!"
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8

                                                        代码解析:

                                                        EndTimer 过程取消 StartTimer 过程的定时。

                                                        第 2 行代码错误处理语句,因为如果还没有运行 StartTimer 过程而先运行 EndTimer 过程取消定时,程序会提示错误,如图 66-2 所示,因此使用 On Error GoTo Line 语句在错误发生时执行第 7 行代码显示一个如图 66-3 所示的提示消息框。

                                                        图 66-2 运行错误

                                                        图 66-3 提示消息框

                                                        第 3 行代码将 StartTimer 过程的 Schedule 参数设置为 False,取消定时设置。

                                                        # 67、设置活动打印机的名称

                                                        使用 Application 对象的 ActivePrinter 属性可以设置活动打印机的名称,如下面的代码所示。

                                                        Sub myPrinter()
                                                        	Dim myPrinter As String
                                                        	myPrinter = "HP LaserJet P1008 在 Ne04:"
                                                        	Application.ActivePrinter = myPrinter
                                                        	MsgBox "活动打印机为:" & Left(myPrinter, InStr(myPrinter, "在") - 1)
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6

                                                        代码解析:

                                                        myPrinter 过程将活动打印机设置为“HP LaserJet P1008”。

                                                        第 3 行代码指定需要设置为活动打印机的名称,第 4 行代码通过设置 Application 对象的ActivePrinter 属性将活动打印机设置为“HP LaserJet P1008”。

                                                        第 5 行代码使用消息框显示活动打印机的名称及型号。

                                                        运行 myPrinter 过程结果如图 67-1 所示。

                                                        图 67-1 设置活动打印机

                                                        # 68、屏蔽、改变组合键的功能

                                                        使用 Application 对象的 OnKey 方法可以屏蔽或改变组合键的默认操作,如下面的代码所示。

                                                        Private Sub Workbook_Open()
                                                        	Application.OnKey "^{c}", "myOnKey"
                                                        End Sub
                                                        Sub myOnKey()
                                                        	MsgBox "本工作表禁止复制数据!"
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6

                                                        代码解析:

                                                        第 1 行到第 3 行代码工作簿的 Open 事件,在工作簿打开时使用 OnKey 方法改变 <Ctrl +C> 组合键的功能。

                                                        应用于 Application 对象的 OnKey 方法指定特定键或特定的组合键运行的过程,语法如下:

                                                        expression.OnKey(Key, Procedure)
                                                        
                                                        参数expression是必需的,该表达式返回一个Application 对象。
                                                        参数Key是必需的,用于表示要按的键的字符串,具体请参阅VBA中的帮助。
                                                        参数Procedure是可选的,表示要运行的过程名称的字符串。
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5

                                                        本示例中将过程名称指定为第 4 行到第 6 行代码的“myOnKey”过程,当按下 <Ctrl +C> 组合键时并不会执行复制操作而只显示一个消息框。如果将 Procedure 参数指定为空文本(""),则按 <Ctrl +C> 组合键时不发生任何操作,达到屏蔽组合键的效果。

                                                        如果省略 Procedure 参数,则按下 <Ctrl +C> 组合键时产生 Microsoft Excel 中的正常结果,同时清除先前使用 OnKey 方法所做的特殊击键设置,所以恢复 <Ctrl +C> 组合键的代码如下:

                                                        Application.OnKey "^{c}"
                                                        
                                                        1

                                                        为了不影响其他工作簿的功能,恢复代码就放在工作簿的 Deactivate 事件中,如下面的代码所示:

                                                        Private Sub Workbook_Deactivate()
                                                        	Application.OnKey "^{c}"
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3

                                                        代码解析:

                                                        当工作簿从活动状态转为非活动状态时恢复 <Ctrl +C> 组合键的正常功能。

                                                        # 69、设置 Excel 窗口标题栏

                                                        Excel 主窗口标题栏默认的名称是“Microsoft Excel”,通过设置 Application 对象的 Caption 属性可以改变 Excel 主窗口的标题栏,如下面的代码所示。

                                                        Sub AppCaption()
                                                        	Application.Caption = "修改标题栏名称"
                                                        	MsgBox "下面将恢复默认的标题栏名称!"
                                                        	Application.Caption = Empty
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5

                                                        代码解析:

                                                        第 2 行代码将 Excel 窗口标题设置为“修改标题栏名称”,如图 69-1 所示。

                                                        图 69-1 设置 Excel 窗口标题

                                                        应用于 Application 对象的 Caption 属性设置显示在 Microsoft Excel 主窗口标题栏中的名称,语法如下:

                                                        expression.Caption
                                                        
                                                        1

                                                        第 3 行代码恢复 Microsoft Excel 主窗口标题栏中的名称。如果未设置 Caption 属性("")或将其设置为 Empty(表示未初始化的变量值),则本属性返回默认的“Microsoft Excel”。

                                                        将 Caption 属性设置为常数 vbNullChar(表示值为 0 的字符)可以删除标题栏中的名称,如下面的代码所示。

                                                        Sub DleCaption()
                                                        	Application.Caption = vbNullChar
                                                        	MsgBox "下面将恢复默认的标题栏名称!"
                                                        	Application.Caption =Empty
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5

                                                        代码解析:

                                                        第 2 行代码删除 Excel 主窗口标题栏,结果如图 69-2 所示。

                                                        图 69-2 删除 Excel 窗口标题栏的名称

                                                        # 70、自定义 Excel 状态栏

                                                        Excel 状态栏显示应用程序的当前状态(例如就绪、输入等)或上下文提示信息,通过设置 Application 对象的 Statusbar 属性可以修改状态栏,以显示用户自定义的信息,代码如下:

                                                        Sub myStatusBar()
                                                        	Dim rng As Range
                                                        	For Each rng In Sheet1.Range("A1:D10000")
                                                        		Application.StatusBar = "正在计算单元格 " & rng.Address(0, 0) & " 的数据..."
                                                        		rng = 100
                                                        	Next
                                                        	Application.StatusBar = False
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8

                                                        代码解析:

                                                        myStatusBar 过程在给选定单元格区域赋值的同时,将 Excel 状态栏中的文字设置为正在赋值的单元格地址。

                                                        应用于 Application 对象的 StatusBar 属性返回或设置状态栏中的文字,如果需要恢复默认的状态栏文字,将本属性设为 False 即可。

                                                        运行 myStatusBar 过程 Excel 状态栏如图 70-1 所示。

                                                        图 70-1 自定义 Excel 状态栏

                                                        # 71、灵活退出 Excel

                                                        在使用 Close 方法关闭工作簿时,既使当前只有一个打开的工作簿,也只能关闭工作簿而不能关闭 Excel 程序,而使用 Application 对象的 Quit 方法则会关闭所有打开的工作簿,下面的代码可以做到两者兼顾。

                                                        Sub myQuit()
                                                        	If Workbooks.Count > 1 Then
                                                        		ThisWorkbook.Close
                                                        	Else
                                                        		Application.Quit
                                                        	End If
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7

                                                        代码解析:

                                                        myQuit 过程在关闭 Excel 程序时根据当前打开的工作簿数量决定采用何种方法关闭工作簿。

                                                        第 2 行代码使用 Workbook 集合的 Count 属性判断当前打开的工作簿文件数量。

                                                        第 3 行代码如当前打开两个或两个以上工作簿,使用 Close 方法关闭代码所在的工作簿。关于 Close 方法请参阅 45-1。

                                                        第 5 行代码如果当前只有一个打开的工作簿文件则使用 Quit 方法关闭 Excel 程序。应用于 Application 对象的 Quit 方法退出 Excel 程序,语法如下:

                                                        expression.Quit
                                                        
                                                        参数expression是必需的,返回一个Application对象。
                                                        
                                                        1
                                                        2
                                                        3

                                                        使用 Quit 方法关闭 Excel 程序时,如果有未保存的工作簿处于打开状态,则将弹出一个询问是否要保存所作更改的对话框,为避免对话框出现,可在使用 Quit 方法前保存所有的工作簿,或者将 Application 对象的 DisplayAlerts 属性设置为 False,在退出 Excel 程序时,即使有未保存的工作簿,也不会显示对话框,而且不保存就退出。

                                                        如果一个工作簿的 Saved 属性值为 True,但是并没有将工作簿保存到磁盘上,则 Excel 程序在退出时不会提示保存该工作簿。

                                                        # 72、隐藏 Excel 主窗口

                                                        如果希望在程序启动时或运行过程中隐藏 Excel 主窗口,有以下几种实现方法。

                                                        # 1)设置 Application 对象的 Visible 属性

                                                        当 Application 对象的 Visible 属性设置为 False 时,Application 对象不可见,即能隐藏 Excel 主窗口,如下面的代码所示。

                                                        Private Sub Workbook_Open()
                                                        	Application.Visible = False
                                                        	UserForm1.Show
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4

                                                        代码解析:

                                                        代码工作簿的 Open 事件,在工作簿打开时将 Application 对象的 Visible 属性设置为 False 隐藏 Excel 主窗口。

                                                        显示 Excel 主窗口的方法是将 Application 对象的 Visible 属性重新设置为 True。

                                                        当工作簿文件打开时,隐藏 Excel 主窗口,只显示用户登录窗体,如图 72-1 所示。

                                                        图 72-1 隐藏 Excel 主窗口

                                                        # 2)将窗口移出屏幕

                                                        设置 Application 对象的 Left 属性(从屏幕左边界至 Microsoft Excel 主窗口左边界的距离)和 Top 属性(从屏幕顶端到 Microsoft Excel 主窗口顶端的距离)将 Application 对象移出屏幕外,实现隐藏 Excel 主窗口,如下面的代码所示。

                                                        Private Sub Workbook_Open()
                                                        	Application.WindowState = xlNormal
                                                        	Application.Left = 10000
                                                        	UserForm1.StartUpPosition = 2
                                                        	UserForm1.Show
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6

                                                        代码解析:

                                                        工作簿的 Open 事件过程,设置 Application 对象的 Left 属性为一个大的数值,从而将应用程序窗口移出屏幕。

                                                        第 2 行代码将应用程序窗口设置为正常状态,只有当应用程序窗口正常显示时才能够设置 Application 对象的 Left 属性。

                                                        第 2 行代码将 Application 对象的 Left 属性设置为一个大的数值,从而隐藏 Excel 主窗口。

                                                        第 4 行代码设置用户窗体的 StartUpPosition 属性值为 2,使窗体显示在屏幕的中央。StartUpPosition 属性返回或设置一个值,用来指定用户窗体第一次出现时的位置,请参阅 142 。

                                                        重新显示 Excel 主窗口的方法是将应用程序窗口设置为最大化状态代码如下:

                                                        Application.WindowState = xlMaximized
                                                        
                                                        1

                                                        当工作簿文件打开时,隐藏 Excel 主窗口,只显示用户登录窗体,如图 72-2 所示,与通过设置 Visible 属性实现的效果不同,设置 Left 属性在任务栏中仍然会显示应用程序窗口按钮。

                                                        图 72-2 隐藏 Excel 主窗口

                                                        # 3)设置工作簿作为加载宏运行

                                                        利用加载宏不显示工作簿窗口的特点,设置工作簿作为加载宏运行来隐藏工作簿窗口,如下面的代码所示。

                                                        Private Sub Workbook_Open()
                                                        	ThisWorkbook.IsAddin = True
                                                        	UserForm1.Show
                                                        End Sub
                                                        
                                                        1
                                                        2
                                                        3
                                                        4

                                                        代码解析:

                                                        工作簿的 Open 事件,在工作簿打开时设置其 IsAddin 属性值为 True,指定工作簿作为加载宏运行。

                                                        当工作簿作为加载宏运行时,将有工作薄窗口不可见的特征,从而实现隐藏工作簿窗口的目的,如图 72-3 所示。

                                                        图 72-3 隐藏工作簿窗口

                                                        重新显示 Excel 主窗口的方法是将工作簿的 IsAddin 属性值设置为 False,以显示工作簿窗口。

                                                        edit icon编辑此页open in new window
                                                        上一页
                                                        VBA 之 Shape、Chart 对象
                                                        下一页
                                                        VBA 之 使用对话框
                                                        MIT Licensed
                                                        Copyright © 2022 karin