前言
很喜愛 VBA,喜歡使用她對 Excel 操作實現所需的功能,更喜歡使用 VBA控制 Excel 以及
實現結果後的那種感覺。
一直都想對 ExcelVBA 進行系統的整理和歸納,但由於對 Excel 及 VBA 瞭解得不夠深入,
總覺得無從下手。再加上又是利用少得可憐的業餘時間進行學習,時斷時續,學習的主線和
思路也經常因為工作或其它的事情而打斷。但喜歡學習的人總會擠得出時間來的,要想掌握
或者是精通一門知識和技術不能有任何藉口。幸運的是,有網路這個大平臺,更有ExcelHome 眾多網友的幫助和鼓勵,這幾個月,總算堅持了下來。對 Excel 的癡迷沒有停
留在頭腦和心中,而是體現在了具體的行動以及積極的學習和參與上來,因此,收穫很大,
感覺水準也有明顯的提高。
現在,我計畫利用點滴的業餘時間,將基本的 ExcelVBA操作用簡短的實例進行演示,編輯
成《ExcelVBA 程式設計入門範例》,以此對 ExcelVBA 基礎知識進行一次歸納和整理,從而理
清學習 ExcelVBA的線條,同時也希望能對熱衷於 Excel 的朋友以及 ExcelVBA初學者快速
瞭解和步入 ExcelVBA程式設計殿堂有所幫助。這是我第一次償試對所學知識進行較大規模的整理,希望大家能多提改進意見和建議,以利於改進和提高,也有助於以後的學習和編寫出更
好的作品呈獻給大家。
主要內容和特點
《ExcelVBA 程式設計入門範例》主要是以一些基礎而簡短的 VBA 實例來對 ExcelVBA 中的常
用物件及其屬性和方法進行講解,包括應用程式物件、視窗、工作簿、工作表、儲存格和單
元格區域、圖表、樞紐分析表、形狀、控制項、功能表和工具列、説明助手、格式化操作、檔操作、以及常用方法和函數及技巧等方面的應用示例。這些例子都比較基礎,很容易理解,
因而,很容易調試並得以實現,讓您通過具體的實例來熟悉 ExcelVBA程式設計。
■分 16章共 14個專題,以具體實例來對大多數常用的 ExcelVBA物件進行講解;
■一般而言,每個實例都很簡短,用來說明使用 VBA實現 Excel 某一功能的操作;
■各章內容主要是實例,即 VBA代碼,配以簡短的說明,有些例子可能配以必要的圖
片,以便於理解;
■您可以對這些實例進行擴充或組合,以實現您想要的功能或更複雜的操作。
VBE編輯器及 VBA代碼輸入和調試的基本知識
在學習這些實例的過程中,最好自已動手將它們輸入到 VBE 編輯器中調試運行,來查看它
們的結果。當然,您可以偷賴,將它們複製/粘貼到代碼編輯視窗後,進行調試運行。下麵,
對 VBE編輯器介面進行介紹,並對 VBA代碼輸入和調試的基本知識進行簡單的講解。
啟動 VBE編輯器
一般可以使用以下三種方式來打開 VBE編輯器:
■使用工作表功能表“工具——巨集——Visual Basic編輯器”命令,如圖 00-01所示;
■在 Visual Basic工具列上,按“Visual Basic編輯器”按鈕,如圖 00-02所示;
ExcelVBA>>ExcelVBA程式設計入門範例>>前言(fanjy)
2006年9月7日 http://fanjy.- 2 - https://www.wendangku.net/doc/f016427371.html,
■按Alt+F11複合鍵。
圖00-01:選擇功能表“工具——巨集——Visual Basic編輯器”命令來打開VBE編輯器
圖00-02:選擇Visual Basic工具列上的“Visual Basic編輯器”命令按鈕來打開VBE編輯器
此外,您也可以使用下面三種方式打開 VBE編輯器:
■在任一工作表標籤上按一下滑鼠右鍵,在彈出的功能表中選擇“查看代碼”,則可進入
VBE編輯器訪問該工作表的代碼模組,如圖 00-03所示;
■在工作簿視窗左上角的 Excel 圖示上按一下滑鼠右鍵,在彈出的功能表中選擇“查看代
碼”,則可進入 VBE編輯器訪問活動工作簿的 ThisWorkbook 代碼模組,如圖 00-04
所示;
■選擇功能表“工具——巨集——巨集”命令打開巨集對話方塊,若該工作簿中有巨集程式,則單擊該對話方塊中的“編輯”按鈕即可進行 VBE編輯器代碼模組,如圖 00-05所示。ExcelVBA>>ExcelVBA程式設計入門範例>>前言(fanjy)
2006年9月7日 http://fanjy.- 3 - https://www.wendangku.net/doc/f016427371.html,
圖00-03:右擊工作表標籤彈出功能表並選擇“查看代碼”打開VBE編輯器
圖00-04:右擊Excel 圖示彈出功能表並選擇“查看代碼”打開VBE編輯器
圖00-05:在巨集對話方塊中按一下“編輯”按鈕打開VBE編輯器
VBE編輯器視窗簡介
剛打開 VBE編輯器時,所顯示的視窗如圖 00-06所示,其中沒有代碼模組視窗。
ExcelVBA>>ExcelVBA程式設計入門範例>>前言(fanjy)
2006年9月7日 http://fanjy.- 4 - https://www.wendangku.net/doc/f016427371.html,
圖00-06:剛打開VBE編輯器時的視窗
可以在“工程資源管理器”中按兩下任一物件打開代碼視窗,或者選擇功能表“插入——模組”
或“插入——類別模組”來打開代碼視窗。一般 VBE編輯器視窗及各組成部件名稱如圖 00-07
所示,可以通過“視圖”功能表中的功能表項目選擇所出現的視窗。同時,可以在“工程屬性”窗
口中設置或修改相應物件的屬性。
圖00-07:VBE編輯器視窗
下面是帶有使用者表單的 VBE 編輯器視窗,如圖 00-08 所示。選擇 VBE 功能表“插入——用
戶表單”,即可插入一個使用者表單。當插入使用者表單後,在“工程資源管理器”視窗中會出
現一個使用者表單物件,“工程屬性”視窗顯示當前使用者表單的屬性,可對相關屬性進行設置
或修改。同時,在使用者表單上用滑鼠按一下,會出現“控制項工具箱”。在“工程資源管理器”
視窗按兩下使用者表單圖示,會出現相應的使用者表單;在使用者表單圖示或者是在使用者表單上按一下滑鼠右鍵,然後在彈出的功能表中選擇“查看代碼”,則會出現使用者表單代碼視窗。
ExcelVBA>>ExcelVBA程式設計入門範例>>前言(fanjy)
2006年9月7日 http://fanjy.- 5 - https://www.wendangku.net/doc/f016427371.html,
圖00-08:VBE編輯器視窗(帶有使用者表單)
在 VBE編輯器中輸入 VBA代碼
如前所述,您可以選擇 VBE 功能表“插入——使用者表單/模組/類別模組”來插入模組或使用者窗
體以及相應的代碼視窗。此外,您也可以在“工程資源管理器”中按一下滑鼠右鍵,從彈出的
功能表中選擇“插入——使用者表單/模組/類別模組”來實現上面的操作。在獲取相應的代碼模組
視窗後,就可以輸入 VBA代碼了。
在 VBE編輯器的代碼模組中輸入 VBA代碼,通常有以下幾種方法:
■手工鍵盤輸入;
■使用巨集錄製器,即選擇功能表“工具——巨集——錄製新巨集”命令,將所進行的操作自
動錄製成宏代碼;
■複製/粘貼代碼,即將現有的代碼複製後,粘貼到相應的代碼模組中;
■導入代碼模組,即在 VBE編輯器中選擇功能表“檔——導入檔”或在“工程資源
管理器”的任一物件上右擊滑鼠選擇功能表“導入檔”,選擇相應的代碼檔導入。
如果不想要某個模組了,可以選擇功能表“檔——移除模組”,也可以在相應的模組上按一下
滑鼠右鍵,從彈出的功能表中選擇“移除模組”。此時,會彈出一個警告框,詢問在移除模組
前是否將其匯出,可以根據需要進行選擇。
也可以選擇功能表“檔——匯出檔”或在相應的模組上按一下滑鼠右鍵後,從彈出的功能表中
選擇“匯出檔”,將移除的模組保存在相應的資料夾中。這樣,以後可以對其進行導入,
從而加以利用。
調試 VBA代碼
在 VBE 編輯器的功能表中,有兩項與調試運行有關的功能表項目,即“調試”菜單和“運行”菜
單,它們提供了各種調試和運行的手段。在我現階段進行代碼調試時,常用到的有以下幾個:
■逐語句。可以按F8鍵對代碼按順序一條一條語句運行,從而找出語句或邏輯錯誤。
■設置中斷點。在可能存在問題的語句處設置中斷點(可通過在相應代碼前的空白部位單
擊,將會出現一個深紅色的橢圓即中斷點),當程式運行至中斷點處時,會中止運行。
■在語句的適當部位設置 Debug.Print語句,運行後其結果會顯示在“立即視窗”中,
可以此測試或跟蹤變數的值。
■在“立即窗口”中測試。對值的測試或跟蹤,也可以以“?”開頭,在“立即窗口”
中輸入需要測試值的語句,按 Enter 回車鍵後將立即出現結果;對執行語句的測試,
可直接在“立即視窗”中輸入,按 Enter 回車鍵後將執行。
■可以按 F5鍵直接運行游標所在位置的副程式。
在執行程式後,必須在 Excel 工作表中查看所得到的結果。可以用滑鼠按一下 VBE 編輯器左
上角的 Excel 圖示或者是按 Alt+F11複合鍵切換到 Excel 介面。
(當然,對程式碼的調試有很多方法和技巧,留待以後對 VBA進一步研究和理解更透徹後
一併討論。)
利用 VBA説明系統
如果遇到疑問或錯誤,可以利用 Excel 自帶的 VBA説明系統。
■可以在如圖 00-09 所示的部位輸入需要幫助的關鍵字,按 Enter 回車鍵後將會出現
相關主題。用滑鼠按一下相應的主題即會出現詳細的説明資訊。
圖00-09:説明搜索視窗
■可以按 F2鍵,調出“物件流覽器”視窗(如圖 00-10所示),在搜索文字方塊中輸入需
要説明的關鍵字,將會在“搜索結果”中出現一系列相關的物件及方法、屬性清單,
按一下相應的對象則會在“類”和“成員”清單方塊中顯示相應的物件和方法、屬性成
員列表,在成員列表中相應的項目上按 F1 鍵即會出現詳細的説明資訊。(“對象瀏
覽器”是一個很好的幫助工具,值得好好研究)
圖00-10:物件流覽器視窗
參考資料
《ExcelVBA程式設計入門範例》參考或引用了以下書籍和資料:
(1)Excel 2003高級 VBA程式設計寶典
(2)Excel 2003與 VBA程式設計從入門到精通(中文版)
(3)巧學巧用 Excel 2003 VBA與宏(中文版)
(4)ExcelVBA應用程式專業設計實用指南
(5)ExcelVBA應用開發與實例精講
(6)一些網上資源
更多的資訊
關於 ExcelVBA 的更多參考和學習資源,可以在 https://www.wendangku.net/doc/f016427371.html, 上查找,有疑問也可
以在 ExcelHome 論壇中提問。您也可以登錄我的博客 https://www.wendangku.net/doc/f016427371.html,,上
面有很多 Excel 的學習資料。同時,歡迎與我聯繫交流,我的 e-mail 是:xhdsxfjy@https://www.wendangku.net/doc/f016427371.html,。“學習 Excel,使用 VBA對 Excel 進行控制操作是我很熱衷的業餘愛好之一。”——fanjy
第一章 Excel 應用程式物件(Application 物件)及其常用方法
基本操作應用示例
Application 物件代表整個 Microsoft Excel 應用程式,帶有 175 個屬性和 52 個方法,可以
設置整個應用程式的環境或配置應用程式。
示例 01-01:體驗開/關螢幕更新(ScreenUpdating屬性)
Sub 關閉螢幕更新()
MsgBox "順序切換工作表 Sheet1→Sheet2→Sheet3→Sheet2,先開啟螢幕更新,然後
關閉螢幕更新"
Worksheets(1).Select
MsgBox "目前螢幕中顯示工作表 Sheet1"
Application.ScreenUpdating = True
Worksheets(2).Select
MsgBox "顯示 Sheet2了嗎?"
Worksheets(3).Select
MsgBox "顯示 Sheet3了嗎?"
Worksheets(2).Select
MsgBox "下面與前面執行的程式碼相同,但關閉螢幕更新功能"
Worksheets(1).Select
MsgBox "目前螢幕中顯示工作表 Sheet1" & Chr(10) & "關屏螢幕更新功能"
Application.ScreenUpdating = False
Worksheets(2).Select
MsgBox "顯示 Sheet2了嗎?"
Worksheets(3).Select
MsgBox "顯示 Sheet3了嗎?"
Worksheets(2).Select
Application.ScreenUpdating = True
End Sub
示例說明:ScreenUpdating 屬性用來控制螢幕更新。當運行一個巨集程式處理涉及到多個工作表或儲存格中的大量資料時,若沒有關閉螢幕更新,則會佔用CPU 的處理時間,從而降低程式的運行速度,而關閉該屬性則可顯著提高程式運行速度。
示例 01-02:使用狀態列(StatusBar屬性)
Sub testStatusBar()
Application.DisplayStatusBar = True '開啟狀態列顯示
賦值狀態列顯示的文本
Application.StatusBar = "https://www.wendangku.net/doc/f016427371.html,"
End Sub
示例說明:StatusBar 屬性用來指定顯示在狀態列上的資訊。若不想再顯示狀態列文本,可使用 Application.StatusBar = False語句關閉狀態列顯示,也可以在程式開始將原先的狀態
欄設置存儲,如使用語句 oldStatusBar = Application.DisplayStatusBar 將狀態列原來的資訊
存儲在變數 oldStatusBar,在程式運行完成或退出時,將變數重新賦值給狀態列,如使用語句 Application.DisplayStatusBar = oldStatusBar,以恢復狀態列原狀。
示例 01-03:處理游標(Cursor 屬性)
Sub ViewCursors()
Application.Cursor = xlNorthwestArrow
MsgBox "您將使用箭頭游標,切換到 Excel介面查看游標形狀"
Application.Cursor = xlIBeam
MsgBox "您將使用工形游標,切換到 Excel介面查看游標形狀"
Application.Cursor = xlWait
MsgBox "您將使用等待形游標,切換到 Excel 介面查看游標形狀"
Application.Cursor = xlDefault
MsgBox "您已將游標恢復為缺省狀態"
End Sub
示例 01-04:獲取系統資訊
Sub GetSystemInfo()
MsgBox "Excel 版本資訊為:" & Application.CalculationVersion
MsgBox "Excel 當前允許使用的記憶體為:" & Application.MemoryFree
MsgBox "Excel 當前已使用的記憶體為:" & Application.MemoryUsed
MsgBox "Excel 可以使用的記憶體為:" & Application.MemoryTotal
MsgBox "本機作業系統的名稱和版本為:" & Application.OperatingSystem
MsgBox "本產品所登記的組織名為:" & https://www.wendangku.net/doc/f016427371.html,anizationName
MsgBox "當前用戶名為:" & https://www.wendangku.net/doc/f016427371.html,erName
MsgBox "當前使用的 Excel 版本為:" & Application.Version
End Sub
示例說明:可以使用給 UserName屬性賦值以設置用戶名稱。
示例 01-05:退出複製/剪切模式(CutCopyMode屬性)
Sub exitCutCopyMode()
Application.CutCopyMode = False
End Sub
示例說明:退出複製/剪切模式後,在程式運行時所進行的複製或剪切操作不會在原儲存格區域留下流動的虛框線。需要提醒的是,在程式運行完後,應使用 Application.CutCopyMode =False语句恢复该属性的默认设置。
示例 01-06:禁止弹出警告信息(DisplayAlerts 属性)
Sub testAlertsDisplay()
Application.DisplayAlerts = False
End Sub
示例说明:在程序运行过程中,有时由于 Excel本身设置的原因,会弹出对话框,从而中断
程序的运行,您可以在程序之前加上 Application.DisplayAlerts = False 语句以禁止弹出这
些对话框而不影响程序正常运行。需要注意的是,在程序运行结束前,应使 DisplayAlerts
属性恢复为缺省状态,即使用语句 Application.DisplayAlerts = True。该属性的默认设置为True,当将该属性设置为 False时,Excel 会使直接使用对话框中默认的选择,从而不会因
为弹出对话框而影响程序运行。
示例 01-07:将 Excel全屏幕显示
Sub testFullScreen()
MsgBox "运行后将 Excel 的显示模式设置为全屏幕"
Application.DisplayFullScreen = True
MsgBox "恢复为原来的状态"
Application.DisplayFullScreen = False
End Sub
示例 01-08:Excel启动的文件夹路径
Sub ExcelStartfolder()
MsgBox "Excel 启动的文件夹路径为:" & Chr(10) & Application.StartupPath
End Sub
示例 01-09:打开最近使用过的文档
Sub OpenRecentFiles()
MsgBox "显示最近使用过的第三个文件名,并打开该文件"
MsgBox "最近使用的第三个文件的名称为:" & Application.RecentFiles(3).Name
Application.RecentFiles(3).Open
End Sub
示例 01-10:打开文件(FindFile方法)
Sub FindFileOpen()
On Error Resume Next
MsgBox "请打开文件", vbOKOnly + vbInformation, "打开文件"
If Not Application.FindFile Then
MsgBox "文件未找到", vbOKOnly + vbInformation, "打开失败"
End If
End Sub
示例说明:本示例将显示“打开”文件对话框,若用户未打开文件(即点击“取消”按钮),则会显示“打开失败”信息框。示例中使用了 FindFile 方法,用来显示“打开”对话框并让用户打开一个文件。如果成功打开一个新文件,则该值为 True。如果用户取消了操作并退出该对话框,则该值为 False。
示例 01-11:文件对话框操作(FileDialog属性)
Sub UseFileDialogOpen()
Dim lngCount As Long
'开启"打开文件"对话框
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = True
.Show
'显示所选的每个文件的路径
For lngCount = 1 To .SelectedItems.Count
MsgBox .SelectedItems(lngCount)
Next lngCount
End With
End Sub
示例说明:本示例显示“打开文件”对话框,当用户在其中选择一个或多个文件后,将依次
显示每个文件的路径。其中,FileDialog 属性返回打开和保存对话框中一系列对象的集合,您可以对该集合对象的属性进行进一步的设置,如上例中的 AllowMultiSelect 属性设置为
True将允许用户选择多个文件。
示例 01-12:保存 Excel的工作环境
Sub 保存Excel 的工作环境()
MsgBox "将 Excel 的工作环境保存到D:\ExcelSample\中"
Application.SaveWorkspace "D:\ExcelSample\Sample"
End Sub
示例说明:运行本程序后,将工作簿以带后缀名.xlw 保存到 D盘的 ExcelSample文件夹中,生成的文件全名为 Sample.xlw。当改变工作簿并保存时,Excel 会询问是覆盖原文件还是保存副本。
示例 01-13:改变 Excel工作簿名字(Caption属性)
Sub SetCaption()
Application.Caption = "My ExcelBook"
End Sub
示例说明:运行本程序后,将工作簿左上角 Excel 图标右侧的“Microsoft Excel”改为“My ExcelBook”。
示例 01-14:使用 InputBox方法
Sub SampleInputBox()
Dim vInput
vInput = InputBox("请输入用户名:", "获取用户名", https://www.wendangku.net/doc/f016427371.html,erName)
MsgBox "您好!" & vInput & ".很高兴能认识您.", vbOKOnly, "打招呼"
End Sub
示例 01-15:设置页边距(CentimetersToPoints方法)
Sub SetLeftMargin()
MsgBox "将工作表 Sheet1的左页边距设为 5厘米"
Worksheets("Sheet1").PageSetup.LeftMargin = Application.CentimetersToPoints(5)
End Sub
示例 01-16:使用 Windows 的计算器(ActivateMicrosoftApp方法)
Sub CallCalculate()
Application.ActivateMicrosoftApp Index:=0
End Sub
示例说明:运行本程序后,将调用Windows的计算器。
示例 01-17:在程序中运行另一个宏(Run方法)
Sub runOtherMacro()
MsgBox "本程序先选择 A1至 C6单元格区域后执行 DrawLine宏"
ActiveSheet.Range("A2:C6").Select
Application.Run "DrawLine"
End Sub
示例 01-18:在指定的时间执行宏(OnTime方法)
Sub AfterTimetoRun()
MsgBox "从现在开始,10秒后执行程序「testFullScreen」"
Application.OnTime Now + TimeValue("00:00:10"), "testFullScreen"
End Sub
示例说明:运行本程序后,在 10秒后将执行程序 testFullScreen。
示例 01-19:暂时停止宏运行(Wait方法)
Sub Stop5sMacroRun()
Dim SetTime As Date
MsgBox "按下「确定」,5秒后执行程序「testFullScreen」"
SetTime = DateAdd("s", 5, Now())
Application.Wait SetTime
Call testFullScreen
End Sub
示例说明:运行本程序后,按下弹出的提示框中的“确定”按钮,等待 5 秒后执行另一程
序 testFullScreen。
示例 01-20:按下指定的按键后执行程序(OnKey方法)
[示例 01-20-1]
Sub PressKeytoRun()
MsgBox "按下Ctrl+D 后将执行程序「testFullScreen」"
Application.OnKey "^{d}", "testFullScreen"
End Sub
[示例 01-20-2]
Sub ResetKey()
MsgBox "恢复原来的按键状态"
Application.OnKey "^{d}"
End Sub
示例说明:Onkey方法的作用主要是指定特定的键,当按下指定的键时运行相应的宏程序,或者按下指定的键时,使 Excel 屏蔽特定的功能。
示例 01-21:重新计算工作簿
[示例 01-21-1]
Sub CalculateAllWorkbook()
Application.Calculate
End Sub
示例说明:当工作簿的计算模式被设置为手动模式后,运用 Calculate方法可以重新计算所有打开的工作簿、工作簿中特定的工作表或者工作表中指定的单元格区域。
[示例 01-21-2]
Sub CalculateFullSample()
If Application.CalculationVersion <> Workbooks(1).CalculationVersion Then
Application.CalculateFull
End If
End Sub
示例说明:本示例先将当前 Microsoft Excel 的版本与上次计算该工作簿的 Excel 版本进行
比较,如果两个版本不同,则对所有打开工作簿中的数据进行一次完整计算。其中,CalculationVersion属性返回工作簿的版本信息。
示例 01-22:控制函数重新计算(Volatile方法)
Function NonStaticRand()
'当工作表中任意单元格重新计算时本函数更新
Application.Volatile True
NonStaticRand = Rnd()
End Function
示例说明:本示例摸仿 Excel 中的 Rand()函数,当工作表单元格发生变化时,都会重新计
算该函数。在例子中,使用了 Volatile方法,强制函数进行重新计算,即无论何时重新计算工作表,该函数都会重新计算。
示例 01-23:利用工作表函数(WorksheetFunction属性)
Sub WorksheetFunctionSample()
Dim myRange As Range, answer
Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer
End Sub
示例说明:本示例获取工作表 Sheet1中单元格区域 A1:C10中的最小值,使用了工作表函
数 Min()。一般,使用 WorksheetFunction 属性引用工作表函数,但如果 VBA 自带有实现
相同功能的函数,则直接使用该函数,否则会出现错误。
示例 01-24:获取重叠区域(Intersect方法)
Sub IntersectRange()
Dim rSect As Range
Worksheets("Sheet1").Activate
Set rSect = Application.Intersect(Range("rg1"), Range("rg2"))
If rSect Is Nothing Then
MsgBox "没有交叉区域"
Else
rSect.Select
End If
End Sub
示例说明:本示例在工作表 Sheet1中选定两个命名区域 rg1和rg2的重叠区域,如果所选
区域不重叠,则显示一条相应的信息。其中,Intersect方法返回一个 Range对象,代表两个或多个范围重叠的矩形区域。
示例 01-25:获取路径分隔符 (PathSeparator 属性 )
Sub GetPathSeparator()
MsgBox "路径分隔符为" & Application.PathSeparator
End Sub
示例说明:本示例使用 PathSeparator 属性返回路径分隔符(“\”)。
示例 01-26:快速移至指定位置 (Goto 方法)
Sub GotoSample()
Application.Goto Reference:=Worksheets("Sheet1").Range("A154"), _
scroll:=True
End Sub
示例说明:本示例运行后,将当前单元格移至工作表Sheet1中的单元格 A154。
示例 01-27:显示内置对话框 (Dialogs 属性 )
Sub DialogSample()
Application.Dialogs(xlDialogOpen).Show
End Sub
示例说明:本示例显示 Excel 的“打开”文件对话框。其中,Dialogs 属性返回的集合代表
所有的 Excel 内置对话框。
示例 01-28:退出 Excel( SendKeys 方法)
Sub SendKeysSample()
Application.SendKeys ("%fx")
End Sub
示例说明:本示例使用 SendKeys 方法退出 Excel,若未保存,则会弹出提示对话框并让用户作出相应的选择。SendKeys 方法的作用是摸拟键盘输入,如例中的“%fx”表示在 Excel
中同时按下 Alt、F 和X三个键。
示例 01-29:关闭 Excel
Sub 关闭 Excel()
MsgBox "Excel 将会关闭"
Application.Quit
End Sub
示例说明:运行本程序后,若该工作簿未保存,则会弹出对话框询问是否保存。
=============================
第二章窗口(Window 对象)基本操作应用示例
Window 对象代表一个窗口,约有 48个属性和 14个方法,能对窗口特性进行设置和操作。Window 对象是 Windows 集合中的成员,对于 Application 对象来说,Windows 集合包含该应用程序中的所有窗口;对于 Workbook 对象来说,Windows 集合只包含指定工作簿中的窗口。下面介绍一些示例,以演示和说明Window 对象及其属性和方法的运用。
示例 02-01:激活窗口(Activate 方法)
Sub SelectWindow()
Dim iWin As Long, i As Long, bWin
MsgBox "依次切换已打开的窗口"
iWin = Windows.Count
MsgBox “您已打开的窗口数量为:” & iWin
For i = 1 To iWin
Windows(i).Activate
bWin = MsgBox("您激活了第 " & i & "个窗口,还要继续吗?", vbYesNo)
If bWin = vbNo Then Exit Sub
Next i
End Sub
示例 02-02:窗口状态(WindowState属性)
[示例 02-02-01]
Sub WindowStateTest()
MsgBox "当前活动工作簿窗口将最小化"
Windows(1).WindowState = xlMinimized
MsgBox "当前活动工作簿窗口将恢复正常"
Windows(1).WindowState = xlNormal
MsgBox "当前活动工作簿窗口将最大化"
Windows(1).WindowState = xlMaximized
End Sub
示例说明:使用WindowState属性可以返回或者设置窗口的状态。示例中,常量xlMinimized、xlNormal 和 xlMaximized 分别代表窗口不同状态值,Windows(1)表示当前活动窗口。可以
使用 Windows(index)来返回单个的 Window 对象,其中的 index 为窗口的名称或编号,活
动窗口总是Windows(1)。
[示例 02-02-02]
Sub testWindow()
'测试 Excel 应用程序窗口状态
MsgBox "应用程序窗口将最大化"
Application.WindowState = xlMaximized
Call testWindowState
MsgBox "应用程序窗口将恢复正常"
PDF 文件使用 "pdfFactory Pro" 试用版本创建 https://www.wendangku.net/doc/f016427371.html,
ExcelVBA>>ExcelVBA编程入门范例>>窗口(Window对象)基本操作
2006年9月23日 http://fanjy.- 2 - https://www.wendangku.net/doc/f016427371.html,
Application.WindowState = xlNormal
MsgBox "应用程序窗口已恢复正常"
'测试活动工作簿窗口状态
MsgBox "当前活动工作簿窗口将最小化"
ActiveWindow.WindowState = xlMinimized
Call testWindowState
MsgBox "当前活动工作簿窗口将最大化"
ActiveWindow.WindowState = xlMaximized
Call testWindowState
MsgBox "当前活动工作簿窗口将恢复正常"
ActiveWindow.WindowState = xlNormal
Call testWindowState
MsgBox "应用程序窗口将最小化"
Application.WindowState = xlMinimized
Call testWindowState
End Sub
‘*********************************************************
Sub testWindowState()
Select Case Application.WindowState
Case xlMaximized: MsgBox "应用程序窗口已最大化"
Case xlMinimized: MsgBox "应用程序窗口已最小化"
Case xlNormal:
Select Case ActiveWindow.WindowState
Case xlMaximized: MsgBox "当前活动工作簿窗口已最大化"
Case xlMinimized: MsgBox "当前活动工作簿窗口已最小化"
Case xlNormal: MsgBox "当前活动工作簿窗口已恢复正常"
End Select
End Select
End Sub
示例说明:本示例有两个程序,其中 testWindow()是主程序,调用子程序 textWindowState(),演示了应用程序窗口和工作簿窗口的不同状态。当前活动窗口一般代表当前活动工作簿窗口,读者可以在 VBE 编辑器中按 F8 键逐语句运行 testWindow()程序,观察 Excel 应用程
序及工作簿窗口的不同状态。此外,在子程序中,还运用了嵌套的 Select Case结构。
[示例 02-02-03]
Sub SheetGradualGrow()
Dim x As Integer
With ActiveWindow
.WindowState = xlNormal
.Top = 1
.Left = 1
.Height = 50
.Width = 50
For x = 50 To https://www.wendangku.net/doc/f016427371.html,ableHeight
.Height = x
Next x
For x = 50 To https://www.wendangku.net/doc/f016427371.html,ableWidth
.Width = x
Next x
.WindowState = xlMaximized
End With
End Sub
示例说明:本示例将动态演示工作簿窗口由小到大直至最大化的变化过程。在运行程序时,您可以将 VBE 窗口缩小,从而在工作簿中查看动态效果,也可以在 Excel 中选择菜单中的
宏命令执行以查看效果。
示例 02-03:切换显示工作表元素
[示例 02-03-01]
Sub testDisplayHeading()
MsgBox “切换显示/隐藏行列标号”
ActiveWindow.DisplayHeadings = Not ActiveWindow.DisplayHeadings
End Sub
示例说明:本示例切换是否显示工作表中的行列标号。运行后,工作表中的行标号和列标号将消失;再次运行后,行列标号重新出现,如此反复。您也可以将该属性设置为False,以
取消行列标号的显示,如 ActiveWindow.DisplayHeadings = False;而将该属性设置为 True,
则显示行列标号。
[示例 02-03-02]
Sub testDisplayGridline()
MsgBox “切换显示/隐藏网格线”
ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlines
End Sub
示例说明:本示例切换是否显示工作表中的网格线。运行后,工作表中的网格线消失,再次运行后,网格线重新出现,如此反复。您也可以将该属性设置为False,以取消网格线显示,如 ActiveWindow.DisplayGridlines = False;而将该属性设置为 True,则显示网格线。
[示例 02-03-03]
Sub DisplayHorizontalScrollBar()
MsgBox “切换显示/隐藏水平滚动条”
ActiveWindow.DisplayHorizontalScrollBar = _
Not ActiveWindow.DisplayHorizontalScrollBar
End Sub
示例说明:本示例切换是否显示工作表中的水平滚动条。运行后,工作表中的水平滚动条消失,再次运行后,水平滚动条重新出现,如此反复。您也可以将该属性设置为 False,以取消水平滚动条,如 ActiveWindow.DisplayHorizontalScrollBar = False;而将该属性设置为True,则显示水平滚动条。
同理,DisplayVerticalScrollBar 属性将用来设置垂直滚动条。
[示例 02-03-04]
Sub DisplayScrollBar()
MsgBox "切换显示/隐藏水平和垂直滚动条"
Application.DisplayScrollBars = Not (Application.DisplayScrollBars)
End Sub
示例说明:本示例切换是否显示工作表中的水平和垂直滚动条。运行后,工作表中的水平和垂直滚动条同时消失,再次运行后,水平和垂直滚动条重新出现,如此反复。您也可以将该属性设置为False,以取消水平和垂直滚动条显示,如Application.DisplayScrollBars= False;
而将该属性设置为 True,则显示水平和垂直滚动条。
示例 02-04:显示公式(DisplayFormulas 属性)
Sub DisplayFormula()
MsgBox “显示工作表中包含公式的单元格中的公式”
ActiveWindow.DisplayFormulas = True
End Sub
示例说明:本程序运行后,工作表中含有公式的单元格将显示公式而不是数值。若要显示数值,则将该属性设置为 False,或者,如果工作表中的公式显示的是结果数值,则该属性为False。
示例 02-05:显示/隐藏工作表标签(DisplayWorkbookTabs属性)
Sub testDisplayWorkbookTab()
MsgBox “隐藏工作表标签”
ActiveWindow.DisplayWorkbookTabs = False
End Sub
示例说明:本程序运行后,工作表标签消失。将该属性设置为 True,重新显示工作表标签。示例 02-06:命名活动窗口(Caption属性)
Sub testCaption()
MsgBox "当前活动工作簿窗口的名字是:" & ActiveWindow.Caption
ActiveWorkbook.Windows(1).Caption = "我的工作簿"
MsgBox "当前活动工作簿窗口的名字是:" & ActiveWindow.Caption
End Sub
示例说明:本程序运行后,显示当前活动工作簿窗口原先的名称(即工作簿窗口未处于最大化状态时,出现在窗口顶部标题栏中的文字),然后设置当前活动工作簿窗口名称,即使用语句 ActiveWorkbook.Windows(1).Caption = "我的工作簿",最后显示当前活动工作簿窗口
的新名称。改变窗口的标题并不会改变工作簿的名称。
示例 02-07:移动窗口到指定位置(ScrollRow属性和 ScrollColumn属性)
Sub testScroll()
MsgBox “将当前窗口工作表左上角单元格移至第 10行第 3列”
ActiveWindow.ScrollRow = 10
ActiveWindow.ScrollColumn = 3
End Sub
示例说明:本程序运行后,当前活动窗口左上角单元格为第 10行第 3列。可以通过设置这两个属性来移动窗口到指定的位置,也可以返回指定窗格或窗口最左上面的行号或列号。
示例 02-08:调整窗口(EnableResize属性)
Sub testResize()
MsgBox “设置窗口大小不可调整”
ActiveWindow.EnableResize = False
End Sub
示例说明:测试本程序前,将当前工作簿窗口恢复为正常状态(即让工作簿标题可见),运行程序后,当前工作簿窗口将不能调整其大小,右上角的最小化最大化按钮将消失(即隐藏最大化和最小化按钮)。该属性设置为 True,则能调整窗口大小。
示例 02-09:拆分窗格
[示例 02-09-01]
Sub SplitWindow1()
Dim iRow As Long, iColumn As Long
MsgBox "以活动单元格为基准拆分窗格"
iRow = ActiveCell.Row
iColumn = ActiveCell.Column
With ActiveWindow
.SplitColumn = iColumn
.SplitRow = iRow
End With
MsgBox "恢复原来的窗口状态"
ActiveWindow.Split = False
End Sub
[示例 02-09-02]
Sub SplitWindow()
Dim iRow As Long, iColumn As Long
MsgBox "以活动单元格为基准拆分窗格"
iRow = ActiveCell.Row
iColumn = ActiveCell.Column
With ActiveWindow
.SplitColumn = iColumn
.SplitRow = iRow
End With
MsgBox "恢复原来的窗口状态"
ActiveWindow.SplitColumn = 0
ActiveWindow.SplitRow = 0
End Sub
示例说明:本示例演示了以活动单元格为基准拆分窗格。如果指定窗口被拆分,则 Split 属性的值为 True;设置该属性的值为 False 则取消窗格拆分。也可以设置 SplitColumn 属性
和 SplitRow 属性的值来取消窗格拆分。
示例 02-10:冻结窗格(FreezePanes属性)
Sub testFreezePane()
MsgBox “冻结窗格”
ActiveWindow.FreezePanes = True
End Sub
示例说明:运行本程序后,将会冻结活动单元格所在位置上方和左侧的单元格区域。将该属性的值设置为 False,将取消冻结窗格。
示例 02-11:设置网格线颜色(GridlineColor属性和 GridlineColorIndex 属性)
Sub setGridlineColor()
Dim iColor As Long
iColor=ActiveWindow.GridlineColor
MsgBox "将活动窗口的网格线颜色设为红色"
ActiveWindow.GridlineColor = RGB(255, 0, 0)
MsgBox "将活动窗口的网格线颜色设为蓝色"
ActiveWindow.GridlineColorIndex = 5
MsgBox “恢复为原来的网格线颜色”
ActiveWindow.GridlineColorIndex=iColor
End Sub
示例说明:运行程序后,当前工作表窗口网格线将被设置为红色。其中,GridlineColorIndex 属性可以用于返回或设置网格线的颜色,下面给出了默认调色板中颜色的编号值:
[小结]ActiveWindow 属性返回当前激活的工作簿窗口,可以用来设置工作表中的元素,也
可以显示特定的单元格,或者用来调整窗口的显示比例,以及设置窗口。
示例 02-12:设置工作表标签区域宽度和水平滚动条宽度比例(TabRatio属性)
Sub test()
MsgBox "设置工作表标签区域宽度为水平滚动条宽度的一半"
ActiveWindow.TabRatio = 0.5
End Sub
示例说明:TabRatio 属性返回或设置工作簿中工作表标签区域的宽度与窗口水平滚动条的
宽度比例(可为 0到 1之间的数字;默认值为 0.6)。您可以改变上面程序中的数值进行测试。示例 02-13:设置激活窗口时运行的程序(OnWindow属性)
Sub testRunProcedure()
ThisWorkbook.Windows(1).OnWindow = "test"
End Sub
‘*********************************************************
Sub test()
MsgBox "您可以使用本窗口了!"
End Sub
示例说明:本示例包括两个程序,主程序为 testRunProcedure(),运行后,每当激活该窗口时,将会运行 test()程序。其中,OnWindow 属性返回或设置每当激活一个窗口时要运行的过程的名称,如本例中的 test()程序。
示例 02-14:获取指定窗口单元格区域地址(RangeSelection属性)
Sub testRangeSelection()
MsgBox "显示所选单元格地址"
MsgBox ActiveWindow.RangeSelection.Address
End Sub
示例说明:本示例返回当前窗口中所选单元格区域的地址。RangeSelection 属性返回指定
窗口的工作表中的选定单元格(即使指定工作表中有图形对象处于活动状态,或者已选定图形对象,仍返回在图形对象被选定之前选定的单元格区域,这是该属性与 Selection属性的
区别)。
示例 02-15:返回指定窗口中所选择的工作表(SelectedSheets属性)
Sub testSelectedSheet()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Windows(1).SelectedSheets
MsgBox "工作表" & https://www.wendangku.net/doc/f016427371.html, & "被选择"
Next
End Sub
示例说明:SelectedSheets 属性返回代表指定窗口中的所有选定工作表的集合。本示例中,如果您同时选择了活动工作簿中的工作表 Sheet1 和 Sheet2,那么运行程序后,将会显示
相应工作表被选择的信息。
示例 02-16:排列窗口(Arrange 方法)
Sub testArrangeWindows()
MsgBox "请确保应用程序至少含有两个工作簿,这样才能看出效果"
MsgBox “窗口将平铺显示”
Windows.Arrange ArrangeStyle:=xlArrangeStyleTiled
MsgBox “窗口将层叠显示”
Windows.Arrange ArrangeStyle:=xlArrangeStyleCascade
MsgBox “窗口将水平排列显示”
Windows.Arrange ArrangeStyle:=xlArrangeStyleHorizontal
MsgBox “窗口将垂直并排排列显示”
Windows.Arrange ArrangeStyle:=xlArrangeStyleVertical
End Sub
示例说明:运行本程序后,将平铺应用程序中的所有窗口。Arrange方法用于对屏幕上的窗
口进行排列,其语法为 expression.Arrange(ArrangeStyle, ActiveWorkbook, SyncHorizontal, SyncVertical),所有的参数均为可选参数。其中,参数 ArrangeStyle 代表排列样式,可为
以下常量:常量 xlArrangeStyleTiled为缺省值,表示将平铺窗口;常量 xlArrangeStyleCascade表示将窗口进行层叠;常量 xlArrangeStyleHorizontal 表示将水平排列所有窗口;常量xlArrangeStyleVertical表示将垂直并排排列所有窗口。您可以在上面的程序中测试这些常量,以体验效果。将参数 ActiveWorkbook设置为 True,则只对当前工作簿的可见窗口进行排列。
如果为 False,则对所有窗口进行排列。默认值为 False。设置参数 SyncHorizontal 为 True,
在水平滚动时同步滚动当前工作簿的所有窗口;如果为 False,则不同步滚动。设置参数SyncVertical 为 True,则在垂直滚动时同步滚动当前工作簿的所有窗口;如果为 False,则
不同步滚动,默认值为 False。如果参数 ActiveWorkbook 为 False 或者省略,则参数SyncHorizontal 和 SyncVertical 被忽略。
示例 02-17:窗口尺寸(UsableHeight、UsableWidth、Height、Width属性)
Sub testActiveWindowSize()
MsgBox "当前窗口可用区域的高度为:" & https://www.wendangku.net/doc/f016427371.html,ableHeight
MsgBox "当前窗口的高度为:" & ActiveWindow.Height
MsgBox "当前窗口可用区域的宽度为:" & https://www.wendangku.net/doc/f016427371.html,ableWidth
MsgBox "当前窗口的宽度为:" & ActiveWindow.Width
End Sub
示例 02-18:水平排列两个窗口
Sub testWindowArrange()
Dim ah As Long, aw As Long
Windows.Arrange xlArrangeStyleTiled
ah = Windows(1).Height
aw = Windows(1).Width + Windows(2).Width
With Windows(1)
.Width = aw
.Height = ah / 2
.Left = 0
End With
With Windows(2)
.Width = aw
.Height = ah / 2
.Top = ah / 2
.Left = 0
End With
End Sub
示例说明:在运行本示例前,保证只打开了两个工作簿窗口。运行本示例后,将水平排列第一个窗口和第二个窗口,即每个窗口占用可使用的垂直空间的一半,占用所有水平空间。其中,Top 属性表示从窗口顶端到可用区域顶端的距离,无法对最大化的窗口设置本属性;Left 属性表示使用区域的左边界至窗口左边界的距离,如果窗口已最大化,则会返回一个负数;如果该属性被设置为 0,则窗口的主边框刚好在屏幕上可见。
示例 02-19:改变窗口的高度和宽度
Sub ChangeHeightAndWidth()
Dim iWinHeight As Long, iWinWidth As Long
ActiveWindow.WindowState = xlNormal
MsgBox "将当前窗口的高度和宽度各减一半"
iWinHeight = ActiveWindow.Height
iWinWidth = ActiveWindow.Width
ActiveWindow.Height = iWinHeight / 2
ActiveWindow.Width = iWinWidth / 2
MsgBox "恢复原窗口大小"
ActiveWindow.Height = iWinHeight
ActiveWindow.Width = iWinWidth
End Sub
示例说明:Height属性和Width属性必须在窗口处于正常显示状态(即不是最大化或最小化
状态)时使用,否则会出错。
示例 02-20:移动窗口
Sub SetWindowPosition()
Dim iTop As Long, iLeft As Long
MsgBox "将当前窗口向下移 60,向右移 90"
ActiveWindow.WindowState = xlNormal
iTop = ActiveWindow.Top
iLeft = ActiveWindow.Left
ActiveWindow.Top = iTop + 60
ActiveWindow.Left = iLeft + 90
MsgBox "恢复原来窗口的位置"
ActiveWindow.Top = iTop
ActiveWindow.Left = iLeft
End Sub
示例说明:Top 属性和 Left 属性必须在窗口处于正常显示状态(即不是最大化或最小化状态)时使用,否则会出错。
示例 02-21:并排比较窗口
Sub testCompare()
MsgBox "与工作簿 Book2进行并排比较"
https://www.wendangku.net/doc/f016427371.html,pareSideBySideWith "Book2"
MsgBox "启动窗口滚动功能,使两个窗口同时滚动"
Windows.SyncScrollingSideBySide = True
MsgBox "将工作簿 Book2最小化"
Windows("Book2").WindowState = xlMinimized
MsgBox "重置并排比较显示,恢复并排比较"
Windows.ResetPositionsSideBySide
MsgBox "关闭并排比较"
ActiveWorkbook.Windows.BreakSideBySide
End Sub
示例说明:在运行本示例前,确保在本窗口外还打开了一个名为 Book2 的窗口,或者您打开了一个其它命名的窗口,相应将上面程序中的 Book2 更换为您的窗口名。CompareSideBySideWith 方法将以并排模式打开两个窗口,其中一个是当前活动窗口,另
一个就是该方法所指定的窗口,如本例中的 Book2。SyncScrollingSideBySide属性设置是
否将两个窗口的滚动保持同步,如果为 True,在对文档进行并排比较的同时启用窗口内容的滚动功能。若为 False,则在对文档进行并排比较的同时禁用窗口内容的滚动功能。ResetPositionsSideBySide 方法重置正在进行并排比较的两个工作表窗口的位置,例如,
如果用户将正在进行比较的两个工作表窗口中的其中一个窗框最小化或最大化,就可以使用
ResetPositionsSideBySide 方法重置显示,以便这两个窗口再次并排显示。BreakSideBySide方法用来关闭并排比较。
示例 02-22:返回或设置窗口中显示的视图(View属性)
Sub testView()
MsgBox "将视图切换为分页预览"
ActiveWindow.View = xlPageBreakPreview
MsgBox "窗口视图为:" & ActiveWindow.View
MsgBox "将视图恢复正常"
ActiveWindow.View = xlNormalView
MsgBox "窗口视图为:" & ActiveWindow.View
End Sub
示例 02-23:返回窗口中可见单元格区域(VisibleRange属性)
Sub testVisibleRange()
MsgBox "当前窗口中共有" & Windows(1).VisibleRange.Cells.Count & "个单元格可见"
End Sub
示例说明:如果窗口中有部分行列的单元格可见,也包括在可见单元格区域中。
示例 02-24:创建窗口(NewWindow方法)
Sub testNewWindow()
MsgBox "为活动窗口创建一个副本"
ActiveWindow.NewWindow
MsgBox "所创建窗口的窗口号为" & ActiveWindow.WindowNumber
End Sub
示例说明:本示例中,NewWindow 方法为指定窗口(本例中为当前活动窗口)创建一个副本,然后显示该副本窗口的窗口号。注意,窗口号与窗口索引(Index 属性)的不同,例如名称为“Book1.xls:2”的窗口,其窗口号为2,而窗口索引为该窗口在 Windows 集合中的位置,可
以为窗口名称或编号。
示例 02-25:设置窗口大小(Zoom 属性)
Sub testWindowDisplaySize()
MsgBox "将窗口大小设置为与选定区域相适应的大小"
ActiveWindow.Zoom = True
MsgBox "以双倍大小显示窗口"
ActiveWindow.Zoom = 200
MsgBox "以正常大小显示窗口"
ActiveWindow.Zoom = 100
End Sub
示例说明:Zoom 属性将以百分数的形式(100表示正常大小,200表示双倍大小,以此类推)
返回或设置窗口的显示大小。如果本属性为 True,则可将窗口大小设置成与当前选定区域
相适应的大小。本功能仅对窗口中当前的活动工作表起作用,若要对其他工作表使用本属性,必须先激活该工作表。
示例 02-26:激活窗口(ActivateNext方法和 ActivatePrevious 方法)
[示例 02-26-01]
Sub testActivateWindow1()
MsgBox "若已打开 Book1.xls、Book2.xls和Book3.xls三个工作簿且 Book1.xls为当前
窗口" & Chr(10) & "则按 Book3.xls-Book2.xls-Book1.xls依次激活窗口"
ActiveWindow.ActivateNext
MsgBox "激活工作簿:" & Windows(1).Caption
ActiveWindow.ActivateNext
MsgBox "激活工作簿:" & Windows(1).Caption
ActiveWindow.ActivateNext
MsgBox "激活工作簿:" & Windows(1).Caption
End Sub
[示例 02-26-02]
Sub testActivateWindow2()
MsgBox "若已打开 Book1.xls、Book2.xls和Book3.xls三个工作簿且 Book1.xls为当前
窗口" & Chr(10) & "则按 Book2.xls-Book3.xls-Book1.xls依次激活窗口"
ActiveWindow.ActivatePrevious
MsgBox "激活工作簿:" & Windows(1).Caption
ActiveWindow.ActivatePrevious
MsgBox "激活工作簿:" & Windows(1).Caption
ActiveWindow.ActivatePrevious
MsgBox "激活工作簿:" & Windows(1).Caption
End Sub
示例 02-27:滚动窗口(LargeScroll方法和 SmallScroll 方法)
[示例 02-27-01]
Sub testScroll1()
MsgBox "将当前窗口向下滚动 3页并向右滚动 1页"
https://www.wendangku.net/doc/f016427371.html,rgeScroll Down:=3, ToRight:=1
End Sub
示例说明:LargeScroll方法将按页滚动窗口的内容,其语法为https://www.wendangku.net/doc/f016427371.html,rgeScroll(Down, Up, ToRight, ToLeft),带有 4个可选的参数,其中参数 Down表示将窗口内容向下滚动的页数;参数 Up 表示将窗口内容向上滚动的页数;参数ToRight表示将窗口内容向右滚动的页数;参数 ToLeft表示将窗口内容向左滚动的页数。如果同时指定了 Down和Up,窗口内容上下方向滚动的页数由这两个参数的差决定,例如,如果 Down 为 3,Up 为 6,则窗口向上滚动三页。如果同时指定了 ToLeft和 ToRight,窗口内容左右方向滚动的页数由这两个参数的差决定,例如,如果 ToLeft为 3,ToRight为 6,则窗口向右滚动三页。所有这四个参数都可以使用负数。
[示例 02-27-02]
Sub testScroll2()
MsgBox "将当前活动窗口向下滚动 3行"
ActiveWindow.SmallScroll down:=3
End Sub
示例说明:SmallScroll方法按行或列滚动窗口,其语法为expression.SmallScroll(Down, Up, ToRight, ToLeft),带有 4个可选的参数,其中参数 Down表示将窗口内容向下滚动的行数;参数 Up 表示将窗口内容向上滚动的列数;参数 ToRight表示将窗口内容向右滚动的列数;参数 ToLeft表示将窗口内容向左滚动的列数。如果同时指定了Down和Up,则窗口内容滚动的行数由这两个参数的差值决定,例如,如果 Down 为 3,Up 为 6,则窗口内容向上滚动三行。如果同时指定了 ToLeft和 ToRight,则窗口内容滚动的列数由这两个参数的差值决定,例如,如果 ToLeft为 3,ToRight为 6,则窗口内容向右滚动三列。以上四个参数均可取负值。
示例 02-28:测试所选单元格宽度和高度
Sub testWidthOrHeight()
Dim lWinWidth As Long, lWinHeight As Long
With ActiveWindow
lWinWidth = .PointsToScreenPixelsX(.Selection.Width)
lWinHeight = .PointsToScreenPixelsY(.Selection.Height)
End With
MsgBox "当前选定单元格宽度为:" & lWinWidth & Chr(10) & _
当前选定单元格高度为: & lWinHeight
End Sub
示例 02-29:关闭窗口(Close方法)
Sub CloseWindow()
MsgBox "关闭当前窗口"
ActiveWindow.Close
End Sub
示例说明:本示例运行后,将关闭当前窗口。如果当前窗口未保存,则会弹出询问是否保存的消息框供选择。
======================
第三章工作簿(Workbook)基本操作应用示例
Workbook 对象代表工作簿,而 Workbooks 集合则包含了当前所有的工作簿。下面对Workbook对象的重要的方法和属性以及其它一些可能涉及到的方法和属性进行示例介绍,同时,后面的示例也深入介绍了一些工作簿对象操作的方法和技巧。
示例 03-01:创建工作簿(Add方法)
[示例 03-01-01]
Sub CreateNewWorkbook1()
MsgBox "将创建一个新工作簿."
Workbooks.Add
End Sub
[示例 03-01-02]
Sub CreateNewWorkbook2()
Dim wb As Workbook
Dim ws As Worksheet
Dim i As Long
MsgBox "将创建一个新工作簿,并预设工作表格式."
Set wb = Workbooks.Add
Set ws = wb.Sheets(1)
https://www.wendangku.net/doc/f016427371.html, = "产品汇总表"
ws.Cells(1, 1) = "序号"
ws.Cells(1, 2) = "产品名称"
ws.Cells(1, 3) = "产品数量"
For i = 2 To 10
ws.Cells(i, 1) = i - 1
Next i
End Sub
示例 03-02:添加并保存新工作簿
Sub AddSaveAsNewWorkbook()
Dim Wk As Workbook
Set Wk = Workbooks.Add
Application.DisplayAlerts = False
Wk.SaveAs Filename:="D:/SalesData.xls"
End Sub
示例说明:本示例使用了 Add 方法和 SaveAs 方法,添加一个新工作簿并将该工作簿以文
件名 SalesData.xls保存在 D 盘中。其中,语句 Application.DisplayAlerts = False表示禁止
弹出警告对话框。
示例 03-03:打开工作簿(Open方法)
[示例 03-03-01]
Sub openWorkbook1()
Workbooks.Open "<需打开文件的路径>\<文件名>"
End Sub
示例说明:代码中的<>里的内容需用所需打开的文件的路径及文件名代替。Open方法共有15个参数,其中参数 FileName为必需的参数,其余参数可选。
[示例 03-03-02]
Sub openWorkbook2()
Dim fname As String
MsgBox "将 D盘中的<测试.xls>工作簿以只读方式打开"
fname = "D:\测试.xls"
Workbooks.Open Filename:=fname, ReadOnly:=True
End Sub
示例 03-04:将文本文件导入工作簿中(OpenText方法)
Sub TextToWorkbook()
'本示例打开某文本文件并将制表符作为分隔符对此文件进行分列处理转换成为工作表Workbooks.OpenText Filename:="<文本文件所在的路径>/<文本文件名>", _
DataType:=xlDelimited, Tab:=True
End Sub
示例说明:代码中的<>里的内容需用所载入的文本文件所在路径及文件名代替。OpenText 方法的作用是导入一个文本文件,并将其作为包含单个工作表的工作簿进行分列处理,然后在此工作表中放入经过分列处理的文本文件数据。该方法共有 18 个参数,其中参数FileName为必需的参数,其余参数可选。
示例 03-05:保存工作簿(Save方法)
[示例 03-05-01]
Sub SaveWorkbook()
MsgBox "保存当前工作簿."
ActiveWorkbook.Save
End Sub
[示例 03-05-02]
Sub SaveAllWorkbook1()
Dim wb As Workbook
MsgBox "保存所有打开的工作簿后退出 Excel."
For Each wb In Application.Workbooks
wb.Save
Next wb
Application.Quit
End Sub
[示例 03-05-03]
Sub SaveAllWorkbook2()
Dim wb As Workbook
For Each wb In Workbooks
If wb.Path <> "" Then wb.Save
Next wb
End Sub
示例说明:本示例保存原来已存在且已打开的工作簿。
示例 03-06:保存工作簿(SaveAs 方法)
[示例 03-06-01]
Sub SaveWorkbook1()
MsgBox "将工作簿以指定名保存在默认文件夹中."
ActiveWorkbook.SaveAs "<工作簿名>.xls"
End Sub
示例说明:SaveAs 方法相当于“另存为……”命令,以指定名称保存工作簿。该方法有 12
个参数,均为可选参数。如果未指定保存的路径,那么将在默认文件夹中保存该工作簿。如果文件夹中该工作簿名已存在,则提示是否替换原工作簿。
[示例 03-06-02]
Sub SaveWorkbook2()
Dim oldName As String, newName As String
Dim folderName As String, fname As String
oldName = https://www.wendangku.net/doc/f016427371.html,
newName = "new" & oldName
MsgBox "将<" & oldName & ">以<" & newName & ">的名称保存"
folderName = Application.DefaultFilePath
fname = folderName & "\" & newName
ActiveWorkbook.SaveAs fname
End Sub
示例说明:本示例将当前工作簿以一个新名(即 new 加原名)保存在默认文件夹中。
[示例 03-06-03]
Sub CreateBak1()
MsgBox "保存工作簿并建立备份工作簿"
ActiveWorkbook.SaveAs CreateBackup:=True
End Sub
示例说明:本示例将在当前文件夹中建立工作簿的备份。
[示例 03-06-04]
Sub CreateBak2()
MsgBox "保存工作簿时,若已建立了备份,则将出现包含 True的信息框,否则出现False." MsgBox ActiveWorkbook.CreateBackup
End Sub
示例 03-07:取得当前打开的工作簿数(Count 属性)
Sub WorkbookNum()
MsgBox "当前已打开的工作簿数为:" & Chr(10) & Workbooks.Count
End Sub
示例 03-08:激活工作簿(Activate方法)
[示例 03-08-01]
Sub ActivateWorkbook1()
Workbooks("<工作簿名>").Activate
End Sub
示例说明:Activate方法激活一个工作簿,使该工作簿为当前工作簿。
[示例 03-08-02]
Sub ActivateWorkbook2()
Dim n As Long, i As Long
Dim b As String
MsgBox "依次激活已经打开的工作簿"
n = Workbooks.Count
For i = 1 To n
Workbooks(i).Activate
b = MsgBox("第 " & i & "个工作簿被激活,还要继续吗?", vbYesNo)
If b = vbNo Then Exit Sub
If i = n Then MsgBox "最后一个工作簿已被激活."
Next i
End Sub
示例 03-09:保护工作簿(Protect 方法)
Sub ProtectWorkbook()