ExcelVBAApplication方法屬性大全_第1頁(yè)
ExcelVBAApplication方法屬性大全_第2頁(yè)
ExcelVBAApplication方法屬性大全_第3頁(yè)
ExcelVBAApplication方法屬性大全_第4頁(yè)
ExcelVBAApplication方法屬性大全_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Application Excel方法屬性Application 對(duì)象是 Excel 對(duì)象模型中最高層級(jí)的對(duì)象, 代表 Excel 應(yīng)用程序自身, 也包 含組成工作簿的許多部分,包括工作簿、工作表、單元格集合以及它們包含的數(shù)據(jù)。Application 對(duì)象包含:應(yīng)用程序設(shè)置和選項(xiàng),許多選項(xiàng)與 “選項(xiàng) ”對(duì)話框中的選項(xiàng)相同。返回頂級(jí)對(duì)象的方法,例如ActiveCell 、 ActiveSheet ,等等。本文使用 VBA 代碼示例簡(jiǎn)要介紹了與Application 對(duì)象相關(guān)的經(jīng)常使用的對(duì)象、 方法和屬性, 其中一些成員能夠改變用戶與Excel 應(yīng)用程序交互的方式, 還能夠改變應(yīng)用程序的外觀和式樣

2、。熟悉 Application 對(duì)象能夠讓您擴(kuò)展和調(diào)整Excel 的功能,以滿足自已的需求。本文主要介紹的內(nèi)容如下:從 Application 對(duì)象中引用對(duì)象Application 對(duì)象相關(guān)的集合? AddIns 集合? Columns 集合和 Rows 集合?Dialogs 集合?Sheets 集合Application 對(duì)象相關(guān)的屬性?ActiveCell 屬性?ActiveChart 屬性?ActiveSheet 屬性?ActiveWindow 屬性?ActiveWorkbook屬性?RangeSelection屬性?ScreenUpdating屬性?Selection 屬性?Statu

3、sBar 屬性?ThisWorkbook 屬性Application 對(duì)象相關(guān)的方法? FindFile 方法和 Dialogs 集合? GetOpenFilename 方法? GetSaveAsFilename 方法? InputBox 方法? Run 方法? 激活A(yù)pplication 事件監(jiān)視使用Application 對(duì)象執(zhí)行其它任務(wù)?刪除工作表而顯示提示信息( DisplayAlerts屬性)?無(wú)須提示用戶而保存工作表( DisplayAlerts屬性)? 使用 SendKeys 方法發(fā)送信息到記事本?安排宏在指定的時(shí)間和間隔運(yùn)行(OnTime方法)Application 對(duì)象的其它

4、一些屬性和方法?Caller 屬性?CutCopyMode 屬性?Evaluate 方法?OnKey 方法?ThisCell 屬性?WorksheetFunction 屬性?改變光標(biāo)顯示( Cursor 屬性)?獲取或改變Excel 窗口的狀態(tài)或大小( WindowState 屬性)?獲取系統(tǒng)信息? 自動(dòng)隱藏公式欄( DisplayFormulaBar 屬性)? 將 Excel 全屏顯示( DisplayFullScreen 屬性)? 獲取 Excel 啟動(dòng)文件夾的路徑( StartupPath 屬性)?檢測(cè)Excel 的版本( Version 屬性)?打開(kāi)最近使用過(guò)的文檔( RecentFi

5、les 屬性)?文件對(duì)話框操作( FileDialog 屬性)?改變Excel 工作簿的名稱( Caption 屬性)? 調(diào)用 Windows 的計(jì)算器( ActivateMicrosoftApp 方法)?暫時(shí)停止宏運(yùn)行( Wait 方法)?重新計(jì)算工作簿(Calculate 方法)?控制函數(shù)重新計(jì)算( Volatile 方法)?獲取重疊區(qū)域(Intersect 方法)? 獲取路徑分隔符( PathSeparator 屬性)? 快速移至指定位置( Goto 方法)? 關(guān)閉 Excel ( Quit 方法)從 Application 對(duì)象中引用對(duì)象Application20:使用 Applica

6、tion 屬性返回 Application 對(duì)象。 在引用應(yīng)用程序之后, 要訪問(wèn) 對(duì)象下面的對(duì)象,則依次下移對(duì)象模型層級(jí)。例如,下面的代碼設(shè)置第一個(gè)工作簿的第一個(gè)工作表中的第一個(gè)單元格的值為要引用該單元格,上述代碼以 Application 對(duì)象開(kāi)始,移至第一個(gè)工作簿,然后到第一個(gè)工作表,最后到達(dá)單元格。下面的示例代碼在另一個(gè)應(yīng)用程序中創(chuàng)建一個(gè)Excel 工作簿,然后打開(kāi)該工作簿:Set xl = CreateObject(Excel.Sheet)xl.Application.Workbooks.Open newbook.xls可以使用許多屬性和方法返回最常用的用戶界面對(duì)象,例如活動(dòng)工作表(

7、ActiveSheet屬性),而無(wú)須Application 對(duì)象限定。例如,下面的代碼:Application.ActiveSheet.Name = Monthly Sales可以替換為:ActiveSheet.Name = Monthly Sales然而,在使用簡(jiǎn)短的引用時(shí)必須小心,必須已經(jīng)選擇了正確的對(duì)象。如果已經(jīng)使用諸如 Worksheet 對(duì)象的 Activate 方法選擇了合適的工作簿和工作表,那么能夠使用下面的代碼引用第一個(gè)單元格:Cells(1, 1) = 20有一些實(shí)例必須使用 Application 限定引用。例如, OnTime 方法、應(yīng)用程序窗口的Width 和 Heig

8、ht 屬性。通常,處理Excel 窗口外觀的屬性或者影響應(yīng)用程序全部行為的屬性需要 Application 限定, 例如 DisplayFormulaBar 屬性用于顯示或隱藏公式欄。 Calculation 方法也需要限定。Application 對(duì)象相關(guān)的集合本節(jié)介紹與 Application 對(duì)象相關(guān)的一些集合。AddIns 集合AddIns 集合代表當(dāng)前在Excel 中裝載的所有加載項(xiàng)。就像遍歷任何其它集合一樣,可以列出應(yīng)用程序中關(guān)于加載項(xiàng)的不同類型的信息。 下面的示例列出當(dāng)前在 Excel 中裝載的加載項(xiàng)的路徑和名稱:Sub ListAddIns()Dim myAddin As Ad

9、dInFor Each myAddin In AddInsMsgBox myAddin.FullNameNextEnd SubColumns 集合和 Rows 集合這些集合代表當(dāng)前工作簿中的列和行,可以使用它們分別選擇指定的列和行。Application.Columns(4).Select上述語(yǔ)句選擇 D 列,就像在工作表中單擊該列的標(biāo)題一樣。上述語(yǔ)句選擇第5 行,就像在工作表中單擊該行的行邊一樣。Dialogs 集合Dialogs 集合由應(yīng)用程序中所有的對(duì)話框組成。本文后面將詳細(xì)介紹該集合。Sheets 集合Sheets 對(duì)象返回指定工作簿或活動(dòng)工作簿中所有工作表的集合。 Sheets 集合

10、包含Chart 對(duì)象或 Worksheet 對(duì)象。下面的示例打印活動(dòng)工作簿中所有工作表:Application.Sheets.PrintOut下面的示例遍歷工作簿中所有的工作表,并打印包含有數(shù)據(jù)的工作表:For iSheet = 1 To Application.Sheets.CountIf Not IsEmpty(Application.Sheets(iSheet).UsedRange) ThenApplication.Sheets(iSheet).PrintOut copies:=1End IfNext iSheetApplication 對(duì)象相關(guān)的屬性在 Excel 2007 應(yīng)用程序中

11、,有大量的屬性用來(lái)訪問(wèn)不同的對(duì)象。這里,只探討經(jīng)常使用的屬性。? ActiveCell? ActiveChart? ActiveSheet? ActiveWindow? ActiveWorkbook? RangeSelection? ScreenUpdating? Selection? StatusBar? ThisWorkbookActiveCell 屬性Application 對(duì)象的 ActiveCell 屬性返回 Range 對(duì)象, 代表活動(dòng)工作簿的活動(dòng)工作表中 的活動(dòng)單元格。如果沒(méi)有指定對(duì)象限定,那么該屬性返回活動(dòng)窗口中的活動(dòng)單元格。注意區(qū)分活動(dòng)單元格和單元格選區(qū)?;顒?dòng)單元格是當(dāng)前選區(qū)

12、里的單個(gè)單元格,選區(qū)可能包含很多單元格,但僅有一個(gè)單元格是活動(dòng)單元格。下面的示例改變活動(dòng)單元格的字體格式。注意確保正在處理正確的單元格,Worksheets 集合的 Activate 方法使工作表Sheet1 為活動(dòng)工作表。Worksheets(Sheet1).Activate With ActiveCell.Font .Bold = True .Italic = True EndWithActiveChart 屬性ActiveChart 屬性返回 Chart 對(duì)象,代表活動(dòng)圖表,無(wú)論該圖表是嵌入式圖表還是圖表工作表。當(dāng)嵌入式圖表被選擇或者被激活時(shí),該圖表是活動(dòng)圖表。下面的示例使用Active

13、Chart 屬性在工作表Monthly Sales 中添加一個(gè)三維柱形圖:Sub AddChart()Charts.AddWith ActiveChart.ChartType = xl3DColumn.SetSourceData Source:=Sheets(Sheet1).Range(B3:H15).Location Where:=xlLocationAsObject, Name:=Monthly Sales.HasTitle = True.ChartTitle.Characters.Text = Monthly Sales by CategoryEnd WithEnd SubActiveS

14、heet 屬性ActiveSheet 屬性返回 Worksheet 對(duì)象, 代表當(dāng)前所選擇的工作表 (在頂部的工作表)在一個(gè)工作簿中僅僅有一個(gè)工作表是活動(dòng)工作表。下面的示例顯示活動(dòng)工作表的名字:MsgBox 活動(dòng)工作表的名字是 & ActiveSheet.Name下面的示例由用戶指定復(fù)制活動(dòng)工作表的次數(shù)并復(fù)制活動(dòng)工作表,將復(fù)制的工作表放置到工作表Sheet1 的前面:Sub CopyActiveSheet()Dim x As Integer, numtimes As Integerx = InputBox( 請(qǐng)輸入復(fù)制活動(dòng)工作表的次數(shù))For numtimes = 1 To x 在工作表 Sh

15、eet1 的前面放置工作表副本ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheet1)NextEnd SubActiveWindow 屬性ActiveWindow 屬性返回 Window 對(duì)象,代表活動(dòng)窗口(在頂部的窗口)。下面的示例顯示活動(dòng)窗口的名稱( Caption 屬性):MsgBox 活動(dòng)窗口的名稱是 & ActiveWindow.CaptionCaption 屬性返回活動(dòng)窗口的名稱, 允許使用名稱而不是索引號(hào)來(lái)更清楚地訪問(wèn)該窗口。下面的示例選擇并打印工作表,然后對(duì)第二個(gè)工作表重復(fù)這一過(guò)程:Sub Pri

16、ntWorksheet()Application.ScreenUpdating = FalseSheets(Sales).SelectActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=TrueSheets(Expenses).SelectActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=TrueEnd Sub在該示例中,您可能奇怪為什么將ScreenUpdating 屬性設(shè)置為 False 。當(dāng) Excel 執(zhí)行一系列操作任務(wù)時(shí), 屏幕被更新并且被刷新許多次, 這導(dǎo)致

17、屏幕閃爍。 設(shè)置 ScreenUpdating 屬性為 False 消除這些閃爍。 此外, 因?yàn)橛?jì)算機(jī)處理器無(wú)須為刷新屏幕而暫停, 這能使大的 應(yīng)用程序運(yùn)行得更快。 ActiveWorkbook 屬性 ActiveWorkbook 屬性返回 Workbook 對(duì)象,代表活動(dòng)窗口中的工作簿。下面的示例顯示活動(dòng)工作簿的名稱:MsgBox 活動(dòng)工作簿的名稱是 & ActiveWorkbook.Name下面的示例設(shè)置計(jì)算模式為手動(dòng),然后遍歷并計(jì)算活動(dòng)工作簿中的每個(gè)工作表:Sub CalcBook()Dim wks As WorksheetApplication.Calculate = xlManual

18、For Each wks In ActiveWorkbook.Worksheets wks.CalculateNextSet wks = NothingEnd SubRangeSelection 屬性RangeSelection 屬性返回 Range 對(duì)象, 代表在指定的窗口的工作表中所選擇的單元格,即使是工作表中激活或選擇的圖形對(duì)象。 下面的示例顯示活動(dòng)窗口的工作表中所選擇的單元格的地址:MsgBox Application.ActiveWindow.RangeSelection.Address當(dāng)選擇單元格區(qū)域時(shí), RangeSelection 屬性和 Selection 對(duì)象代表相同的單元

19、格區(qū)域。當(dāng)選擇圖形時(shí), RangeSelection 屬性返回以前的單元格選區(qū)。 關(guān)于 Selection 屬性的更多介 紹參見(jiàn)下節(jié)。 下面的示例顯示單元格中頭三個(gè)字符:Range(A1).SelectMsgBox Left(ActiveWindow.RangeSelection, 3) 下面的示例顯示單元格名稱的頭三個(gè)字符:Range(A1).SelectMsgBox Left(ActiveWindow.RangeSelection.Name.Name, 3) 命令 RangeSelection.Name.Name 返回單元格名稱。ScreenUpdating 屬性ScreenUpdatin

20、g 屬性用于控制屏幕刷新, 可將其值設(shè)置為 True 或 False 。 通常, Excel 開(kāi)啟了屏幕刷新 (即該屬性值為 True ), 因此在代碼執(zhí)行時(shí), Excel 會(huì)隨著代碼的操作而不斷更新屏幕顯示, 這樣在運(yùn)行處理涉及到多個(gè)工作表或單元格中的大量數(shù)據(jù)的代碼 (選擇或激活對(duì)象) 時(shí), 屏幕會(huì)不停閃爍, 并且會(huì)占用 CPU 的處理時(shí)間, 從而降低程序的運(yùn)行速度??梢栽诔绦虼a的開(kāi)始部分設(shè)置 ScreenUpdating 屬性為 False ,即Application.ScreenUpdating=False ,以關(guān)閉屏幕刷新,這樣不僅能夠使代碼運(yùn)行更快,而且使得界面對(duì)用戶更為友好。在程

21、序結(jié)束前,將該屬性設(shè)置為 True ,以恢復(fù) Excel 對(duì)屏幕更新的控制。然而,在宏運(yùn)行的過(guò)程中,如果需要顯示用戶窗體或者內(nèi)置對(duì)話框,建議先恢復(fù)屏幕刷新,否則拖動(dòng)用戶窗體時(shí),會(huì)在屏幕上產(chǎn)生橡皮擦的效果。當(dāng)然,在顯示該對(duì)象后,可以重新關(guān)閉屏幕刷新。Selection 屬性Selection 屬性返回活動(dòng)窗口中所選擇的對(duì)象。例如,對(duì)于單元格,該屬性返回 Range對(duì)象;對(duì)于圖表,該屬性返回 Chart 對(duì)象。如果使用該屬性時(shí)沒(méi)有限定引用,則等價(jià)于 Application.Selection 。下面的示例清除工作表Sheet1 中的選區(qū)(假設(shè)選區(qū)是單元格區(qū)域):Worksheets(Sheet1)

22、.ActivateSelection.Clear下面的示例在變量NumRows 中存儲(chǔ)所選行的總數(shù):numrows = 0For Each area In Selection.Areasnumrows = numrows + area.Rows.CountNext area下面的示例統(tǒng)計(jì)所選區(qū)域中單元格的數(shù)量,并在消息框中顯示結(jié)果:Dim cell As ObjectDim count As Integercount = 0For Each cell In Selectioncount = count + 1Next cellMsgBox count & 項(xiàng)被選擇 下面的示例確保在輸入數(shù)據(jù)之前

23、選擇的是工作表:If TypeName(ActiveSheet) Worksheet Or TypeName(Selection) RangeThenMsgBox 本程序僅用于單元格區(qū)域, vbCriticalExit SubEnd IfRange(A1).Value = 20StatusBar 屬性StatusBar 屬性返回或設(shè)置狀態(tài)欄中的文本。 該屬性允許改變顯示在 Excel 窗口底部的狀態(tài)欄中的信息, 這特別有助于使用戶了解需要花時(shí)間完成的操作處理的進(jìn)度。 因此, 狀態(tài)欄是一種告知用戶當(dāng)前程序信息的極好方式, 并且狀態(tài)欄不會(huì)干擾用戶, 也易被開(kāi)發(fā)者利用。如果 Excel 控制狀態(tài)欄,

24、則 StatusBar 屬性返回 False 。此外,要恢復(fù)缺省的狀態(tài)欄文本,只需設(shè)置該屬性為 False ,即使隱藏了狀態(tài)欄。例如,下面的示例將現(xiàn)在正在處理的文件賦值給狀態(tài)欄:Sub test()Dim FileNum As IntegerFileNum = 0For Each file In FilesApplication.StatusBar = 現(xiàn)在正在處理文件 & FileNumFileNum = FileNum + 1NextEnd Sub然后,當(dāng)程序結(jié)束時(shí),使用下面的語(yǔ)句將狀態(tài)欄恢復(fù)為正常:Application.StatusBar = False這是通知 Excel 并清空狀態(tài)

25、欄的最簡(jiǎn)單的方式。 除非重新啟動(dòng)Excel , 否則狀態(tài)欄中會(huì)一直保持著使用 Application.StatusBar 所顯示的文本,因此應(yīng)該在合適的地方使用Application.StatusBar = False 語(yǔ)句,尤其是應(yīng)該考慮發(fā)生錯(cuò)誤時(shí)如何恢復(fù)狀態(tài)欄。另外,在使用狀態(tài)欄時(shí), 需要選擇一個(gè)合適的更新間隔, 使之既不會(huì)影響程序性能又能為用戶提供有用的信息。可以創(chuàng)建自已的過(guò)程來(lái)使用 StatusBar 屬性,以顯示宏或其它過(guò)程的進(jìn)度:Sub ShowStatusBarProgress()Dim i As LongDim pctDone As DoubleDim numSquares A

26、s LongConst MAXSQR As Long = 15For i = 1 To 30pctDone = i / 30numSquares = pctDone * MAXSQRApplication.StatusBar = Application.WorksheetFunction.Rept(Chr(60), numSquares)Application.Wait Now + TimeSerial(0, 0, 1)Next iApplication.StatusBar = FalseEnd Sub本示例隨著程序的運(yùn)行逐漸顯示由常量MAXSQR 定義的 15 個(gè)小于符號(hào), 小于符號(hào)使用AS

27、CH字符60生成。本示例沒(méi)有指示過(guò)程執(zhí)行多長(zhǎng)時(shí)間,只是顯示了執(zhí)行的進(jìn)度。Wait方法摸擬宏占用的執(zhí)行時(shí)間。要在 VBA 代碼中使用狀態(tài)欄, 首先確定在用戶界面中是否顯示了狀態(tài)欄 (因?yàn)橛脩魳O有可能關(guān)閉了顯示狀態(tài)欄的選項(xiàng)) , 并且在狀態(tài)欄使用完畢后, 應(yīng)將其恢復(fù)到用戶原先的設(shè)置,因此在程序開(kāi)始前,將狀態(tài)欄的信息保存到一個(gè)變量中:bStatusBarInfo=Application.DisplayStatusBar然后,將 DisplayStatusBar 屬性設(shè)置為 True ,以確保顯示狀態(tài)欄。在程序結(jié)束前,將狀態(tài)欄恢復(fù)到原先的設(shè)置:Application.DisplayStatusBar=

28、bStatusBarInfoThisWorkbook 屬性ThisWorkbook 屬性返回 Workbook 對(duì)象, 代表當(dāng)前正運(yùn)行的宏所在的工作簿。 該屬性允許加載項(xiàng)引用包含代碼的工作簿。ActiveWorkbook 屬性在該實(shí)例中不會(huì)工作,因?yàn)榛顒?dòng)工作簿可能不是包含加載項(xiàng)代碼的工作簿。換句話說(shuō), ActiveWorkbook 屬性不會(huì)返回加載項(xiàng)工作簿,它返回調(diào)用加載項(xiàng)的工作簿。如果從VB 代碼創(chuàng)建了一個(gè)加載項(xiàng),應(yīng)該使用ThisWorkbook 屬性限定必須在編譯到該加載項(xiàng)的工作簿中運(yùn)行的語(yǔ)句。下面的示例關(guān)閉包含示例代碼的工作簿,如果修改了該工作簿,則不會(huì)保存修改。ThisWorkbook

29、.Close SaveChanges:=False 下面的示例遍歷每個(gè)打開(kāi)的工作簿并將其關(guān)閉,然后關(guān)閉包含該代碼的工作簿。Sub CloseOpenWrkBks()Dim wrkb As WorkbookFor Each wbk In Application.WorkbooksIf wrkb.Name ThisWorkbook.Name Thenwbk.Close TrueEnd IfNextwbkThisWorkbook.Close TrueEnd SubApplication 對(duì)象相關(guān)的方法下面探討 Application 對(duì)象經(jīng)常使用的一些方法。FindFile 方法和 Dialogs

30、集合與 GetOpenFilename 方法不同,F(xiàn)ileFind 方法顯示 “打開(kāi) ”對(duì)話框并允許用戶打開(kāi)文件。如果成功打開(kāi)文件, 那么該方法返回 True ; 如果用戶取消了該對(duì)話框, 那么該方法返回 False 。下面的示例顯示一條消息, 告訴用戶打開(kāi)一個(gè)指定的文件, 然后顯示 “打開(kāi) ”對(duì)話框。 如果用戶不能夠打開(kāi)該文件,則顯示一條消息。Sub OpenFile1()Dim bSuccess As BooleanMsgBox 請(qǐng)定位到 MonthlySales.xls 文件 .bSuccess = Application.FindFileIf Not bSuccess ThenMsgB

31、ox 該文件沒(méi)有打開(kāi).End IfEnd Sub也可以使用 Dialogs 集合打開(kāi)特定的對(duì)話框來(lái)完成相同的操作。 使用 Dialogs 集合的優(yōu)勢(shì)之一是使用 Show 方法, 可以傳遞參數(shù)修改內(nèi)置對(duì)話框的缺省行為。 例如, xlDialogOpen的參數(shù)為: file_text 、 update_links 、 read_only 、 format 、 prot_pwd 、 write_res_pwd 、 ignore_rorec 、 file_origin 、 custom_delimit 、 add_logical 、 editable 、 file_access 、 notify_lo

32、gical 、 converter 。注: 要找到特定對(duì)話框的參數(shù), 在 Excel 幫助的 “內(nèi)置對(duì)話框參數(shù)列表”中查找相應(yīng)的對(duì)話框常量。下面的示例顯示在文件名框中帶有Book1.xlsm 的 “打開(kāi) ”對(duì)話框,允許用戶顯示缺省文件而不必選擇文件。Sub OpenFile2()Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Show arg1:=Book1.xlsmEnd SubDialogs 集合的優(yōu)點(diǎn)在于,可以使用它來(lái)顯示任何的 Excel 對(duì)話框(大約有250 個(gè))。通過(guò)下述步驟可以找到對(duì)話框完整列表。(查找對(duì)話框集合的成員列表)、打

33、開(kāi) VBE 。、單擊 “查看 對(duì)象瀏覽器 ”或者按 F2 鍵,顯示 “對(duì)象瀏覽器”。、在搜索框中輸入 xlDialog 。、單擊 “搜索 ”按鈕。對(duì) Excel 2007 而言,可以使用 CommandBar 對(duì)象來(lái)執(zhí)行功能區(qū)中的命令,例如,下面的語(yǔ)句顯示 “定位 ”對(duì)話框:Application.CommandBars.ExecuteMso (GoTo)ExecuteMso 方法執(zhí)行由 idMso 參數(shù)標(biāo)識(shí)的控件。 idMso 參數(shù)的取值可以查找網(wǎng)上資 源。 下面的語(yǔ)句顯示 “設(shè)置單元格格式”對(duì)話框中的 “字體 ”選項(xiàng)卡:Application.CommandBars.ExecuteMso

34、(FormatCellsFontDialog)GetOpenFilename 方法GetOpenFilename 方法顯示標(biāo)準(zhǔn)的 “打開(kāi) ”對(duì)話框并從用戶處獲取文件名稱,但不真正打開(kāi)任何文件, 而是以字符串返回用戶選擇的文件名及其路徑。 那么, 您可以利用該字符串完成所需要的操作, 例如可以傳遞返回的結(jié)果到 OpenText 方法。 下面是 GetOpenFilename 方法的語(yǔ)法(所有參數(shù)都是可選的):GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)參數(shù) FileFilter 是一個(gè)字符串,規(guī)定篩選條件

35、(例如, *.txt , *.xla ),在 “打開(kāi) ”文件對(duì)話框中只顯示與篩選條件相匹配的文件, 默認(rèn)為 “所有文件 (*.*),*.* 。 ”參數(shù) FilterIndex 指定缺省 的文件篩選條件的索引值,從1 到參數(shù) FileFilter 中指定的篩選數(shù),默認(rèn)使用索引值為 1 的文件篩選條件。參數(shù)Title 指定對(duì)話框的標(biāo)題,默認(rèn)顯示 “打開(kāi) ”。參數(shù) ButtonText 僅用于Macintosh 計(jì)算機(jī)。參數(shù) MultiSelect 是一個(gè) Boolean 值,指定能否選擇多個(gè)文件,默認(rèn)僅 能夠選擇單個(gè)文件。下面的示例顯示在文件類型中設(shè)置為文本文件( *.txt )的 “打開(kāi) ”對(duì)話

36、框,然后顯示帶有 用戶選擇的信息的消息框。注意,文件并沒(méi)有被打開(kāi)。Dim fileToOpen As StringfileToOpen = Application.GetOpenFilename( 文本文件 (*.txt),*.txt)If fileToOpen ThenMsgBox 打開(kāi) & fileToOpenEnd If下面的示例獲取多個(gè)工作簿:Sub TestGetFiles()Dim nIndex As IntegerDim vFiles As VariantDim strFileName As String 獲取多個(gè) Excel 文件vFiles = GetExcelFiles(

37、測(cè)試 GetExcelFiles 函數(shù) ) 確保沒(méi)有取消對(duì)話框 . 如果用戶 取消對(duì)話框,函數(shù)返回 False, 而不是數(shù)組If Not IsArray(vFiles) Then MsgBox 沒(méi)有選擇文件.Exit SubEnd If 如果沒(méi)有取消對(duì)話框,則遍歷文件For nIndex = 1 To UBound(vFiles) strFileName = strFileName & vbCrLf & vFiles(nIndex)Next nIndex 顯示用戶所選擇的文件名稱MsgBox 用戶已選擇的文件如下: & vbCrLf & strFileNameEnd Sub允許選擇多個(gè)文件返回

38、含有文件名稱的數(shù)組Function GetExcelFiles(sTitle As String) As VariantDim sFilter As StringDim bMultiSelect As BooleansFilter = Excel 工作簿 (*.xlsx),*.xlsxbMultiSelect = TrueGetExcelFiles = Application.GetOpenFilename(FileFilter:=sFilter, Title:=sTitle,MultiSelect:=bMultiSelect) End Function 當(dāng)將 GetOpenFilename

39、方法的參數(shù)MultiSelect 設(shè)置為 True 時(shí), 如果用戶選擇了文件,那么將返回一個(gè)變體類型的數(shù)組, 且數(shù)組索引值基于 1 而不是 0 ; 如果用戶取消了選擇文件, 那么返回 False 。 在 TestGetFiles 過(guò)程的代碼中, 使用 IsArray 函數(shù)測(cè)試返回值是否是數(shù)組。 如果使用 vFiles=False 來(lái)判斷的話,當(dāng)用戶選擇了文件時(shí),由于返回的值為數(shù)組,則會(huì)導(dǎo) 致運(yùn)行時(shí)錯(cuò)誤:類型不匹配。 GetSaveAsFilename 方法 GetSaveAsFilename 方法顯示 “另存為 ”對(duì)話框,允許用戶指定一個(gè)文件名和需要保存文件的位置,但是實(shí)際上并沒(méi)有保存文件。

40、GetSaveAsFilename 方法的語(yǔ)法如下(所有參 數(shù)都是可選的):Application.GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,ButtonTex t)參數(shù) InitialFilename 為指定文件名的字符串,默認(rèn)為活動(dòng)工作簿的名稱,若不需要指定初始文件名,則將其設(shè)置為空字符串( ” );參數(shù) FileFilter 是表示篩選條件的字符串,在“另存為 ”對(duì)話框只顯示與篩選條件相匹配的文件, 默認(rèn)為 “所有文件 (*.*),*.* ; 參數(shù)” FilterIndex 用來(lái)指定缺省的文件篩選條件的索

41、引值,默認(rèn)使用索引值為 1 的文件篩選條件;參數(shù)Title指定顯示對(duì)話框標(biāo)題的字符串文本, 默認(rèn)顯示 “另存為 ”; 參數(shù) ButtonText 僅用于 Macintosh 計(jì)算機(jī)。 下面介紹一個(gè)綜合示例, 是 Steven M. Hansen 編寫的, 從完整的文件名字符串中分解出文件路徑和文件名。Sub TestBreakdownName()Dim sPath As String Dim sName As String Dim sFileName As String Dim sMsg As StringsFileName = Application.GetSaveAsFilename Br

42、eakdownNamesFileName , sName, sPathsMsg = 文件名是 : & sName & vbCrLf sMsg = sMsg & 文件路徑是: & sPathMsgBox sMsg, vbOKOnlyEnd SubFunction GetShortName(sLongName As String) As StringDim sPath As StringDim sShortName As StringBreakdownNamesLongName , sShortName, sPathGetShortName = sShortNameEnd FunctionSub

43、BreakdownName(sFullName As String, ByRef sName As String, ByRef sPathAs String)Dim nPos As Integer 找出文件名從哪里開(kāi)始nPos = FileNamePosition(sFullName)If nPos 0 ThensName = Right(sFullName, Len(sFullName) - nPos)sPath = Left(sFullName, nPos - 1)Else 無(wú)效的文件名End IfEnd Sub返回提供的完整文件名中文件名的位置或首字符索引值完整文件名包括路徑和文件名例如

44、 :FileNamePosition(C:TestingTest.xlsx)=11Function FileNamePosition(sFullName As String) As IntegerDim bFound As BooleanDim nPosition As IntegerbFound = FalsenPosition = Len(sFullName)Do While bFound = False 確保不是零長(zhǎng)度字符串If nPosition = 0 Then Exit Do 從右開(kāi)始查找第一個(gè)If Mid(sFullName, nPosition, 1) = ThenbFound

45、 = TrueElse 從右至左nPosition = nPosition - 1End IfLoopIf bFound = False ThenFileNamePosition = 0ElseFileNamePosition = nPositionEnd IfEnd Function除了運(yùn)行TestBreakdownName過(guò)程獲取文件名和文件路徑外,還可以使用GetShortName 函數(shù)僅獲取文件名。此外,在 Sub過(guò)程BreakdownName 中使用了 ByRef 參數(shù),即通過(guò)引用傳遞參數(shù),這樣傳遞給子過(guò)程的參數(shù)改變后,調(diào)用子過(guò)程的主過(guò)程中相應(yīng)的參數(shù)也隨之改變。InputBox 方法

46、InputBox方法提供了一種程序與用戶之間進(jìn)行簡(jiǎn)單的交互的方式,允許我們從用戶處 獲得信息。該方法將顯示一個(gè)對(duì)話框,提示用戶輸入某值。 通過(guò)指定希望用戶輸入的數(shù)據(jù)類型,InputBox方法能夠進(jìn)行數(shù)據(jù)驗(yàn)證。InputBox方法的語(yǔ)法如下:InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextID,Type)其中:參數(shù)Prompt是在對(duì)話框中顯示的消息。這里,可以提示用戶您希望用戶輸入的數(shù)據(jù)類型。該參數(shù)是唯一的必需參數(shù)。參數(shù)Title是對(duì)話框頂部顯示的標(biāo)題。缺省使用應(yīng)用程序名稱。參數(shù)Default是對(duì)話框最初顯示時(shí)的缺省值。參數(shù)L

47、eft和Top用于指定對(duì)話框的位置,這些值相對(duì)于屏幕的左上角且以磅為單位。如果忽略,則對(duì)話框?qū)⑺骄又星揖嗥聊豁敿s1/3處。1。參數(shù)HelpFile和HelpContextId 指定幫助文件,如果使用了這兩個(gè)參數(shù),那么在對(duì)話 框中將出現(xiàn)幫助按鈕。參數(shù)Type指定需要返回的數(shù)據(jù)類型。缺省為文本,允許的類型列于表值表1: InputBox方法返回的數(shù)據(jù)類型0公式。公式作為字符串被返回。這是僅有的必需的參數(shù)。1數(shù)值。也可以包括返回值的公式。2文本(字符串)4邏輯值(True或False )8單元格引用,作為 Range對(duì)象16錯(cuò)誤值,例如#N/A64值列表注意,如果Type為8,那么必須使用 Set

48、語(yǔ)句將結(jié)果賦值給 Range對(duì)象,如下面的代碼所示:Set myRange = Application.InputBox(Prompt:= 示例, Type:=8)如果希望允許輸入多種數(shù)據(jù)類型,那么可以使用上表中的任意數(shù)值組合。例如,如果要顯示一個(gè)可以接受文本或數(shù)值的輸入框,則可以將type的值設(shè)置為3(即1+2的結(jié)果)取消 ”按鈕,如果輸入了錯(cuò)誤類型的數(shù)據(jù),則顯示錯(cuò)誤消息并提示再次輸入數(shù)據(jù)。如果單擊則返回 False 。下面的示例提示用戶輸入希望打印活動(dòng)工作表的份數(shù)(注意, type 指定希望輸入的是一個(gè)數(shù)值):Sub PrintActiveSheet()Dim TotalCopies As

49、 Long, NumCopies As LongDim sPrompt As String, sTitle As StringsPrompt = 您想要多少副本?sTitle = 打印活動(dòng)工作表TotalCopies = Application.InputBox(Prompt:=sPrompt, Title:=sTitle, Default:=1,Type:=1)For NumCopies = 1 To TotalCopiesActiveSheet.PrintOutNext NumCopiesEnd Sub如果將 InputBox 方法的返回值賦給一個(gè)Variant 型變量, 則可以檢測(cè)該值是

50、否為 False 。如果要返回單元格區(qū)域,則使用像下面的代碼會(huì)更好:Sub GetRange()Dim rng As RangeOn Error Resume NextSet rng = Application.InputBox(Prompt:= 輸入單元格區(qū)域 , Type:=8)If rng Is Nothing ThenMsgBox 操作取消 Elserng.SelectEnd IfEnd Sub此時(shí),必須使用 Set 語(yǔ)句將 Range 對(duì)象賦值給某對(duì)象變量,如果用戶單擊 “取消 ”按鈕則返回值 False , Set 語(yǔ)句將失敗并提示運(yùn)行時(shí)錯(cuò)誤。使用 On Error Resume

51、Next 語(yǔ)句避免運(yùn)行時(shí)錯(cuò)誤,然后檢查是否產(chǎn)生了一個(gè)有效的區(qū)域。如果用戶單擊 “確定 ”按鈕,那么InputBox 方法檢查內(nèi)置類型以確保將返回有效的區(qū)域,因此空區(qū)域表明單擊了 “取消 ”按鈕。Run 方法Run 方法執(zhí)行一個(gè)宏或調(diào)用一個(gè)函數(shù)。 可以使用該方法運(yùn)行由 VBA 或 Excel 宏語(yǔ)言編寫的宏,或者運(yùn)行動(dòng)態(tài)鏈接庫(kù)( DLL )里的函數(shù)或Excel 加載項(xiàng)( XLL )。 XLL 是使用任何支持創(chuàng)建 DLLs 的編譯器為 Excel 創(chuàng)建的加載項(xiàng)。 Run 方法的語(yǔ)法為:Run(Macro,Arg1,Arg30)參數(shù) Macro 是要執(zhí)行的宏或函數(shù)的名稱,參數(shù)Arg1 至 Arg30

52、 是需要傳遞給宏或函數(shù) 的一些參數(shù)。下面的示例使用 Run 方法調(diào)用一個(gè)過(guò)程,設(shè)置單元格區(qū)域中單元格的字體為粗體。當(dāng)然,也可以使用 Call 方法獲得相同的結(jié)果。Sub UseRunMethod()Dim wks As WorksheetDim rng As RangeSet wks = Worksheets(Sheet2)Set rng = wks.Range(A1:A10)Application.Run MyProc, rng也能夠使用下面的語(yǔ)句完成相同的任務(wù)Call MyProc(rng)End SubSub MyProc(rng As Range)With rng.Font.Bold

53、= TrueEnd WithEnd SubApplication 對(duì)象相關(guān)的事件Application 對(duì)象也有一些事件,能夠用于監(jiān)視整個(gè)Excel 應(yīng)用程序的行為。要使用Application 事件,必須啟用事件監(jiān)視。激活 Application 事件監(jiān)視、單擊 “插入 類模塊” ,創(chuàng)建一個(gè)類。、在屬性中,將類的名稱改為 AppEventClass 。3、在類的代碼窗口,添加下面的代碼:Public WithEvents Appl As Application現(xiàn)在,能夠在應(yīng)用程序中運(yùn)用應(yīng)用程序級(jí)事件。、在代碼窗口頂部左側(cè)的對(duì)象列表中,選擇Appl 。、在代碼窗口頂部右側(cè)的過(guò)程列表中,選擇Wo

54、rkbookOpen 。此時(shí),將為Appl_WorkbookOpen 過(guò)程插入一對(duì)占位符。6、在過(guò)程中添加下面的語(yǔ)句:Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook) MsgBox 已打開(kāi)工作 簿.End Sub、重復(fù)上面的步驟插入 Appl_WorkbookBeforeClose 事件,并添加下面的語(yǔ)句:Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean) MsgBox 關(guān)閉工作簿.End Sub、接下來(lái),創(chuàng)建一個(gè)變量用于引用類模塊中創(chuàng)建

55、的 Application 對(duì)象。在工程資源管理器中,雙擊ThisWorkbook 打開(kāi)代碼窗口。9、添加下面的語(yǔ)句。Dim ApplicationClass As New AppEventClass通過(guò)在 ThisWorkbook 代碼窗口添加下面的語(yǔ)句,創(chuàng)建所聲明的對(duì)象對(duì)Application 對(duì)象的連接:Private Sub Workbook_Open()Set ApplicationClass.Appl = ApplicationEnd Sub、保存并關(guān)閉該工作簿。、現(xiàn)在,測(cè)試代碼。打開(kāi)該工作簿,將觸發(fā)Appl_WorkbookOpen 事件,顯示相應(yīng)的信息框。、關(guān)閉該工作簿,將觸發(fā)

56、Appl_WorkbookBeforeClose 事件,顯示相應(yīng)的信息框。、 切換回 AppEventClass 類模塊并單擊過(guò)程列表顯示能夠用于監(jiān)控應(yīng)用程序行為的一系列事件。理解這些事件如何被觸發(fā)以及事件的順序?qū)斫鈶?yīng)用程序是重要的。在類模塊中添加其他的事件并插入消息框,然后試驗(yàn)不同的行為來(lái)看看何時(shí)觸發(fā)某特定的事件。使用Application 對(duì)象執(zhí)行其它任務(wù)除了Application 對(duì)象中最常用的對(duì)象外,您可能希望在Excel 應(yīng)用程序中執(zhí)行一些其他任務(wù)。下面我們就來(lái)探討這方面的內(nèi)容。刪除工作表而顯示提示信息( DisplayAlerts 屬性)下面的示例首先關(guān)閉詢問(wèn)是否保存工作表的任何

57、消息,接著刪除工作表并打開(kāi)警告消息。Sub DeleteSheet()Application.DisplayAlerts = FalseActiveSheet.DeleteApplication.DisplayAlerts = TrueEnd Sub上述示例代碼中使用了 DisplayAlerts 屬性,將其值設(shè)置為 False 以自動(dòng)執(zhí)行Excel 警告對(duì)話框中默認(rèn)按鈕相關(guān)的操作。設(shè)置 DisplayAlerts 屬性的意圖在于,運(yùn)行宏時(shí)不必響應(yīng)系統(tǒng)出現(xiàn)的警告而使執(zhí)行過(guò)程中斷。當(dāng)然,在過(guò)程結(jié)束前,最好將DisplayAlerts 屬性設(shè)置為 True 。無(wú)須提示用戶而保存工作表( Displ

58、ayAlerts 屬性)下面的示例保存工作表,而沒(méi)有通知用戶是否保存。Sub SaveWorksheet()Application.DisplayAlerts = FalseActiveWorkbook.SaveAs C:MonthlySales.xlsApplication.DisplayAlerts = TrueEnd Sub此時(shí),如果現(xiàn)有文件與要保存的文件名相同,那么會(huì)覆蓋該文件而不會(huì)彈出任何警告消息。使用 SendKeys 方法發(fā)送信息到記事本SendKeys 方法允許發(fā)送按鍵到當(dāng)前活動(dòng)窗口,用來(lái)控制不支持任何其他交互形式的應(yīng)用程序,例如 DDE( 動(dòng)態(tài)數(shù)據(jù)交換)或 OLE 。下面的示

59、例使用 SendKeys 命令從 Excel 中復(fù)制數(shù)據(jù)區(qū)域到記事本, 然后保存該文件。Sub SKeys()Range(A1:D15).Copy 復(fù)制單元格區(qū)域SendKeys % n, True 最小化 ExcelShell notepad.exe, vbNormalFocus 開(kāi)啟記事本SendKeys AV, True 將數(shù)據(jù)粘貼到記事本SendKeys %FA, True 指定另存為SendKeys SalesData.txt, True 提供文件名SendKeys %S, True 保存文件End Sub本示例首先復(fù)制數(shù)據(jù)區(qū)域到剪貼板, 然后最小化 Excel , 開(kāi)啟記事本, 接

60、著從剪貼板復(fù) 制數(shù)據(jù)到記事本,最后指定文件名并保存文件。下面的示例打開(kāi)了 “記事本 ”應(yīng)用程序 (不支持 DDE 或 OLE) ,并將數(shù)據(jù)行寫入記事本文檔:Sub SKeys()Dim dReturnValue As DoubledReturnValue = Shell(NOTEPAD.EXE, vbNormalFocus)AppActivate dReturnValueApplication.SendKeys Copy Data.xlsx c:, TrueApplication.SendKeys , TrueApplication.SendKeys %FABATCH%S, TrueEnd S

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論