VBA|使用Application對象管理和控制Excel應用程序

Application對象是Excel對象模型的最頂層對象,代表Excel應用程序本身。Application對象提供了大量的屬性、方法和事件,供用戶操作控制Excel程序。

VBA|使用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

上面的代碼運行後,會打開有如下內容的“記事本”窗口,如下圖:

VBA|使用Application對象管理和控制Excel應用程序

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”對象,如下圖所示:

VBA|使用Application對象管理和控制Excel應用程序

類模塊中的對象變量 ↑

插入一個新模塊,並編寫如下代碼:

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

當保存工作簿時,會彈出不允許保存的對話框。



相關推薦

推薦中...