![ExcelVBAApplication方法屬性大全_第1頁](http://file4.renrendoc.com/view/c00340a17f955d41d5fbc1259f002806/c00340a17f955d41d5fbc1259f0028061.gif)
![ExcelVBAApplication方法屬性大全_第2頁](http://file4.renrendoc.com/view/c00340a17f955d41d5fbc1259f002806/c00340a17f955d41d5fbc1259f0028062.gif)
![ExcelVBAApplication方法屬性大全_第3頁](http://file4.renrendoc.com/view/c00340a17f955d41d5fbc1259f002806/c00340a17f955d41d5fbc1259f0028063.gif)
![ExcelVBAApplication方法屬性大全_第4頁](http://file4.renrendoc.com/view/c00340a17f955d41d5fbc1259f002806/c00340a17f955d41d5fbc1259f0028064.gif)
![ExcelVBAApplication方法屬性大全_第5頁](http://file4.renrendoc.com/view/c00340a17f955d41d5fbc1259f002806/c00340a17f955d41d5fbc1259f0028065.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Application Excel方法屬性Application 對象是 Excel 對象模型中最高層級的對象, 代表 Excel 應(yīng)用程序自身, 也包 含組成工作簿的許多部分,包括工作簿、工作表、單元格集合以及它們包含的數(shù)據(jù)。Application 對象包含:應(yīng)用程序設(shè)置和選項,許多選項與 “選項 ”對話框中的選項相同。返回頂級對象的方法,例如ActiveCell 、 ActiveSheet ,等等。本文使用 VBA 代碼示例簡要介紹了與Application 對象相關(guān)的經(jīng)常使用的對象、 方法和屬性, 其中一些成員能夠改變用戶與Excel 應(yīng)用程序交互的方式, 還能夠改變應(yīng)用程序的外觀和式樣
2、。熟悉 Application 對象能夠讓您擴展和調(diào)整Excel 的功能,以滿足自已的需求。本文主要介紹的內(nèi)容如下:從 Application 對象中引用對象Application 對象相關(guān)的集合? AddIns 集合? Columns 集合和 Rows 集合?Dialogs 集合?Sheets 集合Application 對象相關(guān)的屬性?ActiveCell 屬性?ActiveChart 屬性?ActiveSheet 屬性?ActiveWindow 屬性?ActiveWorkbook屬性?RangeSelection屬性?ScreenUpdating屬性?Selection 屬性?Statu
3、sBar 屬性?ThisWorkbook 屬性Application 對象相關(guān)的方法? FindFile 方法和 Dialogs 集合? GetOpenFilename 方法? GetSaveAsFilename 方法? InputBox 方法? Run 方法? 激活A(yù)pplication 事件監(jiān)視使用Application 對象執(zhí)行其它任務(wù)?刪除工作表而顯示提示信息( DisplayAlerts屬性)?無須提示用戶而保存工作表( DisplayAlerts屬性)? 使用 SendKeys 方法發(fā)送信息到記事本?安排宏在指定的時間和間隔運行(OnTime方法)Application 對象的其它
4、一些屬性和方法?Caller 屬性?CutCopyMode 屬性?Evaluate 方法?OnKey 方法?ThisCell 屬性?WorksheetFunction 屬性?改變光標(biāo)顯示( Cursor 屬性)?獲取或改變Excel 窗口的狀態(tài)或大?。?WindowState 屬性)?獲取系統(tǒng)信息? 自動隱藏公式欄( DisplayFormulaBar 屬性)? 將 Excel 全屏顯示( DisplayFullScreen 屬性)? 獲取 Excel 啟動文件夾的路徑( StartupPath 屬性)?檢測Excel 的版本( Version 屬性)?打開最近使用過的文檔( RecentFi
5、les 屬性)?文件對話框操作( FileDialog 屬性)?改變Excel 工作簿的名稱( Caption 屬性)? 調(diào)用 Windows 的計算器( ActivateMicrosoftApp 方法)?暫時停止宏運行( Wait 方法)?重新計算工作簿(Calculate 方法)?控制函數(shù)重新計算( Volatile 方法)?獲取重疊區(qū)域(Intersect 方法)? 獲取路徑分隔符( PathSeparator 屬性)? 快速移至指定位置( Goto 方法)? 關(guān)閉 Excel ( Quit 方法)從 Application 對象中引用對象Application20:使用 Applica
6、tion 屬性返回 Application 對象。 在引用應(yīng)用程序之后, 要訪問 對象下面的對象,則依次下移對象模型層級。例如,下面的代碼設(shè)置第一個工作簿的第一個工作表中的第一個單元格的值為要引用該單元格,上述代碼以 Application 對象開始,移至第一個工作簿,然后到第一個工作表,最后到達單元格。下面的示例代碼在另一個應(yīng)用程序中創(chuàng)建一個Excel 工作簿,然后打開該工作簿:Set xl = CreateObject(Excel.Sheet)xl.Application.Workbooks.Open newbook.xls可以使用許多屬性和方法返回最常用的用戶界面對象,例如活動工作表(
7、ActiveSheet屬性),而無須Application 對象限定。例如,下面的代碼:Application.ActiveSheet.Name = Monthly Sales可以替換為:ActiveSheet.Name = Monthly Sales然而,在使用簡短的引用時必須小心,必須已經(jīng)選擇了正確的對象。如果已經(jīng)使用諸如 Worksheet 對象的 Activate 方法選擇了合適的工作簿和工作表,那么能夠使用下面的代碼引用第一個單元格:Cells(1, 1) = 20有一些實例必須使用 Application 限定引用。例如, OnTime 方法、應(yīng)用程序窗口的Width 和 Heig
8、ht 屬性。通常,處理Excel 窗口外觀的屬性或者影響應(yīng)用程序全部行為的屬性需要 Application 限定, 例如 DisplayFormulaBar 屬性用于顯示或隱藏公式欄。 Calculation 方法也需要限定。Application 對象相關(guān)的集合本節(jié)介紹與 Application 對象相關(guān)的一些集合。AddIns 集合AddIns 集合代表當(dāng)前在Excel 中裝載的所有加載項。就像遍歷任何其它集合一樣,可以列出應(yīng)用程序中關(guān)于加載項的不同類型的信息。 下面的示例列出當(dāng)前在 Excel 中裝載的加載項的路徑和名稱:Sub ListAddIns()Dim myAddin As Ad
9、dInFor Each myAddin In AddInsMsgBox myAddin.FullNameNextEnd SubColumns 集合和 Rows 集合這些集合代表當(dāng)前工作簿中的列和行,可以使用它們分別選擇指定的列和行。Application.Columns(4).Select上述語句選擇 D 列,就像在工作表中單擊該列的標(biāo)題一樣。上述語句選擇第5 行,就像在工作表中單擊該行的行邊一樣。Dialogs 集合Dialogs 集合由應(yīng)用程序中所有的對話框組成。本文后面將詳細介紹該集合。Sheets 集合Sheets 對象返回指定工作簿或活動工作簿中所有工作表的集合。 Sheets 集合
10、包含Chart 對象或 Worksheet 對象。下面的示例打印活動工作簿中所有工作表: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 對象相關(guān)的屬性在 Excel 2007 應(yīng)用程序中
11、,有大量的屬性用來訪問不同的對象。這里,只探討經(jīng)常使用的屬性。? ActiveCell? ActiveChart? ActiveSheet? ActiveWindow? ActiveWorkbook? RangeSelection? ScreenUpdating? Selection? StatusBar? ThisWorkbookActiveCell 屬性Application 對象的 ActiveCell 屬性返回 Range 對象, 代表活動工作簿的活動工作表中 的活動單元格。如果沒有指定對象限定,那么該屬性返回活動窗口中的活動單元格。注意區(qū)分活動單元格和單元格選區(qū)?;顒訂卧袷钱?dāng)前選區(qū)
12、里的單個單元格,選區(qū)可能包含很多單元格,但僅有一個單元格是活動單元格。下面的示例改變活動單元格的字體格式。注意確保正在處理正確的單元格,Worksheets 集合的 Activate 方法使工作表Sheet1 為活動工作表。Worksheets(Sheet1).Activate With ActiveCell.Font .Bold = True .Italic = True EndWithActiveChart 屬性ActiveChart 屬性返回 Chart 對象,代表活動圖表,無論該圖表是嵌入式圖表還是圖表工作表。當(dāng)嵌入式圖表被選擇或者被激活時,該圖表是活動圖表。下面的示例使用Active
13、Chart 屬性在工作表Monthly Sales 中添加一個三維柱形圖: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 對象, 代表當(dāng)前所選擇的工作表 (在頂部的工作表)在一個工作簿中僅僅有一個工作表是活動工作表。下面的示例顯示活動工作表的名字:MsgBox 活動工作表的名字是 & ActiveSheet.Name下面的示例由用戶指定復(fù)制活動工作表的次數(shù)并復(fù)制活動工作表,將復(fù)制的工作表放置到工作表Sheet1 的前面:Sub CopyActiveSheet()Dim x As Integer, numtimes As Integerx = InputBox( 請輸入復(fù)制活動工作表的次數(shù))For numtimes = 1 To x 在工作表 Sh
15、eet1 的前面放置工作表副本ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheet1)NextEnd SubActiveWindow 屬性ActiveWindow 屬性返回 Window 對象,代表活動窗口(在頂部的窗口)。下面的示例顯示活動窗口的名稱( Caption 屬性):MsgBox 活動窗口的名稱是 & ActiveWindow.CaptionCaption 屬性返回活動窗口的名稱, 允許使用名稱而不是索引號來更清楚地訪問該窗口。下面的示例選擇并打印工作表,然后對第二個工作表重復(fù)這一過程: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ù)時, 屏幕被更新并且被刷新許多次, 這導(dǎo)致
17、屏幕閃爍。 設(shè)置 ScreenUpdating 屬性為 False 消除這些閃爍。 此外, 因為計算機處理器無須為刷新屏幕而暫停, 這能使大的 應(yīng)用程序運行得更快。 ActiveWorkbook 屬性 ActiveWorkbook 屬性返回 Workbook 對象,代表活動窗口中的工作簿。下面的示例顯示活動工作簿的名稱:MsgBox 活動工作簿的名稱是 & ActiveWorkbook.Name下面的示例設(shè)置計算模式為手動,然后遍歷并計算活動工作簿中的每個工作表:Sub CalcBook()Dim wks As WorksheetApplication.Calculate = xlManual
18、For Each wks In ActiveWorkbook.Worksheets wks.CalculateNextSet wks = NothingEnd SubRangeSelection 屬性RangeSelection 屬性返回 Range 對象, 代表在指定的窗口的工作表中所選擇的單元格,即使是工作表中激活或選擇的圖形對象。 下面的示例顯示活動窗口的工作表中所選擇的單元格的地址:MsgBox Application.ActiveWindow.RangeSelection.Address當(dāng)選擇單元格區(qū)域時, RangeSelection 屬性和 Selection 對象代表相同的單元
19、格區(qū)域。當(dāng)選擇圖形時, RangeSelection 屬性返回以前的單元格選區(qū)。 關(guān)于 Selection 屬性的更多介 紹參見下節(jié)。 下面的示例顯示單元格中頭三個字符:Range(A1).SelectMsgBox Left(ActiveWindow.RangeSelection, 3) 下面的示例顯示單元格名稱的頭三個字符:Range(A1).SelectMsgBox Left(ActiveWindow.RangeSelection.Name.Name, 3) 命令 RangeSelection.Name.Name 返回單元格名稱。ScreenUpdating 屬性ScreenUpdatin
20、g 屬性用于控制屏幕刷新, 可將其值設(shè)置為 True 或 False 。 通常, Excel 開啟了屏幕刷新 (即該屬性值為 True ), 因此在代碼執(zhí)行時, Excel 會隨著代碼的操作而不斷更新屏幕顯示, 這樣在運行處理涉及到多個工作表或單元格中的大量數(shù)據(jù)的代碼 (選擇或激活對象) 時, 屏幕會不停閃爍, 并且會占用 CPU 的處理時間, 從而降低程序的運行速度??梢栽诔绦虼a的開始部分設(shè)置 ScreenUpdating 屬性為 False ,即Application.ScreenUpdating=False ,以關(guān)閉屏幕刷新,這樣不僅能夠使代碼運行更快,而且使得界面對用戶更為友好。在程
21、序結(jié)束前,將該屬性設(shè)置為 True ,以恢復(fù) Excel 對屏幕更新的控制。然而,在宏運行的過程中,如果需要顯示用戶窗體或者內(nèi)置對話框,建議先恢復(fù)屏幕刷新,否則拖動用戶窗體時,會在屏幕上產(chǎn)生橡皮擦的效果。當(dāng)然,在顯示該對象后,可以重新關(guān)閉屏幕刷新。Selection 屬性Selection 屬性返回活動窗口中所選擇的對象。例如,對于單元格,該屬性返回 Range對象;對于圖表,該屬性返回 Chart 對象。如果使用該屬性時沒有限定引用,則等價于 Application.Selection 。下面的示例清除工作表Sheet1 中的選區(qū)(假設(shè)選區(qū)是單元格區(qū)域):Worksheets(Sheet1)
22、.ActivateSelection.Clear下面的示例在變量NumRows 中存儲所選行的總數(shù):numrows = 0For Each area In Selection.Areasnumrows = numrows + area.Rows.CountNext area下面的示例統(tǒng)計所選區(qū)域中單元格的數(shù)量,并在消息框中顯示結(jié)果:Dim cell As ObjectDim count As Integercount = 0For Each cell In Selectioncount = count + 1Next cellMsgBox count & 項被選擇 下面的示例確保在輸入數(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)欄中的信息, 這特別有助于使用戶了解需要花時間完成的操作處理的進度。 因此, 狀態(tài)欄是一種告知用戶當(dāng)前程序信息的極好方式, 并且狀態(tà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é)束時,使用下面的語句將狀態(tài)欄恢復(fù)為正常:Application.StatusBar = False這是通知 Excel 并清空狀態(tài)
25、欄的最簡單的方式。 除非重新啟動Excel , 否則狀態(tài)欄中會一直保持著使用 Application.StatusBar 所顯示的文本,因此應(yīng)該在合適的地方使用Application.StatusBar = False 語句,尤其是應(yīng)該考慮發(fā)生錯誤時如何恢復(fù)狀態(tài)欄。另外,在使用狀態(tài)欄時, 需要選擇一個合適的更新間隔, 使之既不會影響程序性能又能為用戶提供有用的信息??梢詣?chuàng)建自已的過程來使用 StatusBar 屬性,以顯示宏或其它過程的進度: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本示例隨著程序的運行逐漸顯示由常量MAXSQR 定義的 15 個小于符號, 小于符號使用AS
27、CH字符60生成。本示例沒有指示過程執(zhí)行多長時間,只是顯示了執(zhí)行的進度。Wait方法摸擬宏占用的執(zhí)行時間。要在 VBA 代碼中使用狀態(tài)欄, 首先確定在用戶界面中是否顯示了狀態(tài)欄 (因為用戶極有可能關(guān)閉了顯示狀態(tài)欄的選項) , 并且在狀態(tài)欄使用完畢后, 應(yīng)將其恢復(fù)到用戶原先的設(shè)置,因此在程序開始前,將狀態(tài)欄的信息保存到一個變量中:bStatusBarInfo=Application.DisplayStatusBar然后,將 DisplayStatusBar 屬性設(shè)置為 True ,以確保顯示狀態(tài)欄。在程序結(jié)束前,將狀態(tài)欄恢復(fù)到原先的設(shè)置:Application.DisplayStatusBar=
28、bStatusBarInfoThisWorkbook 屬性ThisWorkbook 屬性返回 Workbook 對象, 代表當(dāng)前正運行的宏所在的工作簿。 該屬性允許加載項引用包含代碼的工作簿。ActiveWorkbook 屬性在該實例中不會工作,因為活動工作簿可能不是包含加載項代碼的工作簿。換句話說, ActiveWorkbook 屬性不會返回加載項工作簿,它返回調(diào)用加載項的工作簿。如果從VB 代碼創(chuàng)建了一個加載項,應(yīng)該使用ThisWorkbook 屬性限定必須在編譯到該加載項的工作簿中運行的語句。下面的示例關(guān)閉包含示例代碼的工作簿,如果修改了該工作簿,則不會保存修改。ThisWorkbook
29、.Close SaveChanges:=False 下面的示例遍歷每個打開的工作簿并將其關(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 對象相關(guān)的方法下面探討 Application 對象經(jīng)常使用的一些方法。FindFile 方法和 Dialogs
30、集合與 GetOpenFilename 方法不同,F(xiàn)ileFind 方法顯示 “打開 ”對話框并允許用戶打開文件。如果成功打開文件, 那么該方法返回 True ; 如果用戶取消了該對話框, 那么該方法返回 False 。下面的示例顯示一條消息, 告訴用戶打開一個指定的文件, 然后顯示 “打開 ”對話框。 如果用戶不能夠打開該文件,則顯示一條消息。Sub OpenFile1()Dim bSuccess As BooleanMsgBox 請定位到 MonthlySales.xls 文件 .bSuccess = Application.FindFileIf Not bSuccess ThenMsgB
31、ox 該文件沒有打開.End IfEnd Sub也可以使用 Dialogs 集合打開特定的對話框來完成相同的操作。 使用 Dialogs 集合的優(yōu)勢之一是使用 Show 方法, 可以傳遞參數(shù)修改內(nèi)置對話框的缺省行為。 例如, 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 。注: 要找到特定對話框的參數(shù), 在 Excel 幫助的 “內(nèi)置對話框參數(shù)列表”中查找相應(yīng)的對話框常量。下面的示例顯示在文件名框中帶有Book1.xlsm 的 “打開 ”對話框,允許用戶顯示缺省文件而不必選擇文件。Sub OpenFile2()Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Show arg1:=Book1.xlsmEnd SubDialogs 集合的優(yōu)點在于,可以使用它來顯示任何的 Excel 對話框(大約有250 個)。通過下述步驟可以找到對話框完整列表。(查找對話框集合的成員列表)、打
33、開 VBE 。、單擊 “查看 對象瀏覽器 ”或者按 F2 鍵,顯示 “對象瀏覽器”。、在搜索框中輸入 xlDialog 。、單擊 “搜索 ”按鈕。對 Excel 2007 而言,可以使用 CommandBar 對象來執(zhí)行功能區(qū)中的命令,例如,下面的語句顯示 “定位 ”對話框:Application.CommandBars.ExecuteMso (GoTo)ExecuteMso 方法執(zhí)行由 idMso 參數(shù)標(biāo)識的控件。 idMso 參數(shù)的取值可以查找網(wǎng)上資 源。 下面的語句顯示 “設(shè)置單元格格式”對話框中的 “字體 ”選項卡:Application.CommandBars.ExecuteMso
34、(FormatCellsFontDialog)GetOpenFilename 方法GetOpenFilename 方法顯示標(biāo)準(zhǔn)的 “打開 ”對話框并從用戶處獲取文件名稱,但不真正打開任何文件, 而是以字符串返回用戶選擇的文件名及其路徑。 那么, 您可以利用該字符串完成所需要的操作, 例如可以傳遞返回的結(jié)果到 OpenText 方法。 下面是 GetOpenFilename 方法的語法(所有參數(shù)都是可選的):GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)參數(shù) FileFilter 是一個字符串,規(guī)定篩選條件
35、(例如, *.txt , *.xla ),在 “打開 ”文件對話框中只顯示與篩選條件相匹配的文件, 默認為 “所有文件 (*.*),*.* 。 ”參數(shù) FilterIndex 指定缺省 的文件篩選條件的索引值,從1 到參數(shù) FileFilter 中指定的篩選數(shù),默認使用索引值為 1 的文件篩選條件。參數(shù)Title 指定對話框的標(biāo)題,默認顯示 “打開 ”。參數(shù) ButtonText 僅用于Macintosh 計算機。參數(shù) MultiSelect 是一個 Boolean 值,指定能否選擇多個文件,默認僅 能夠選擇單個文件。下面的示例顯示在文件類型中設(shè)置為文本文件( *.txt )的 “打開 ”對話
36、框,然后顯示帶有 用戶選擇的信息的消息框。注意,文件并沒有被打開。Dim fileToOpen As StringfileToOpen = Application.GetOpenFilename( 文本文件 (*.txt),*.txt)If fileToOpen ThenMsgBox 打開 & fileToOpenEnd If下面的示例獲取多個工作簿:Sub TestGetFiles()Dim nIndex As IntegerDim vFiles As VariantDim strFileName As String 獲取多個 Excel 文件vFiles = GetExcelFiles(
37、測試 GetExcelFiles 函數(shù) ) 確保沒有取消對話框 . 如果用戶 取消對話框,函數(shù)返回 False, 而不是數(shù)組If Not IsArray(vFiles) Then MsgBox 沒有選擇文件.Exit SubEnd If 如果沒有取消對話框,則遍歷文件For nIndex = 1 To UBound(vFiles) strFileName = strFileName & vbCrLf & vFiles(nIndex)Next nIndex 顯示用戶所選擇的文件名稱MsgBox 用戶已選擇的文件如下: & vbCrLf & strFileNameEnd Sub允許選擇多個文件返回
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ù)組, 且數(shù)組索引值基于 1 而不是 0 ; 如果用戶取消了選擇文件, 那么返回 False 。 在 TestGetFiles 過程的代碼中, 使用 IsArray 函數(shù)測試返回值是否是數(shù)組。 如果使用 vFiles=False 來判斷的話,當(dāng)用戶選擇了文件時,由于返回的值為數(shù)組,則會導(dǎo) 致運行時錯誤:類型不匹配。 GetSaveAsFilename 方法 GetSaveAsFilename 方法顯示 “另存為 ”對話框,允許用戶指定一個文件名和需要保存文件的位置,但是實際上并沒有保存文件。
40、GetSaveAsFilename 方法的語法如下(所有參 數(shù)都是可選的):Application.GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,ButtonTex t)參數(shù) InitialFilename 為指定文件名的字符串,默認為活動工作簿的名稱,若不需要指定初始文件名,則將其設(shè)置為空字符串( ” );參數(shù) FileFilter 是表示篩選條件的字符串,在“另存為 ”對話框只顯示與篩選條件相匹配的文件, 默認為 “所有文件 (*.*),*.* ; 參數(shù)” FilterIndex 用來指定缺省的文件篩選條件的索
41、引值,默認使用索引值為 1 的文件篩選條件;參數(shù)Title指定顯示對話框標(biāo)題的字符串文本, 默認顯示 “另存為 ”; 參數(shù) ButtonText 僅用于 Macintosh 計算機。 下面介紹一個綜合示例, 是 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 找出文件名從哪里開始nPos = FileNamePosition(sFullName)If nPos 0 ThensName = Right(sFullName, Len(sFullName) - nPos)sPath = Left(sFullName, nPos - 1)Else 無效的文件名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 確保不是零長度字符串If nPosition = 0 Then Exit Do 從右開始查找第一個If Mid(sFullName, nPosition, 1) = ThenbFound
45、 = TrueElse 從右至左nPosition = nPosition - 1End IfLoopIf bFound = False ThenFileNamePosition = 0ElseFileNamePosition = nPositionEnd IfEnd Function除了運行TestBreakdownName過程獲取文件名和文件路徑外,還可以使用GetShortName 函數(shù)僅獲取文件名。此外,在 Sub過程BreakdownName 中使用了 ByRef 參數(shù),即通過引用傳遞參數(shù),這樣傳遞給子過程的參數(shù)改變后,調(diào)用子過程的主過程中相應(yīng)的參數(shù)也隨之改變。InputBox 方法
46、InputBox方法提供了一種程序與用戶之間進行簡單的交互的方式,允許我們從用戶處 獲得信息。該方法將顯示一個對話框,提示用戶輸入某值。 通過指定希望用戶輸入的數(shù)據(jù)類型,InputBox方法能夠進行數(shù)據(jù)驗證。InputBox方法的語法如下:InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextID,Type)其中:參數(shù)Prompt是在對話框中顯示的消息。這里,可以提示用戶您希望用戶輸入的數(shù)據(jù)類型。該參數(shù)是唯一的必需參數(shù)。參數(shù)Title是對話框頂部顯示的標(biāo)題。缺省使用應(yīng)用程序名稱。參數(shù)Default是對話框最初顯示時的缺省值。參數(shù)L
47、eft和Top用于指定對話框的位置,這些值相對于屏幕的左上角且以磅為單位。如果忽略,則對話框?qū)⑺骄又星揖嗥聊豁敿s1/3處。1。參數(shù)HelpFile和HelpContextId 指定幫助文件,如果使用了這兩個參數(shù),那么在對話 框中將出現(xiàn)幫助按鈕。參數(shù)Type指定需要返回的數(shù)據(jù)類型。缺省為文本,允許的類型列于表值表1: InputBox方法返回的數(shù)據(jù)類型0公式。公式作為字符串被返回。這是僅有的必需的參數(shù)。1數(shù)值。也可以包括返回值的公式。2文本(字符串)4邏輯值(True或False )8單元格引用,作為 Range對象16錯誤值,例如#N/A64值列表注意,如果Type為8,那么必須使用 Set
48、語句將結(jié)果賦值給 Range對象,如下面的代碼所示:Set myRange = Application.InputBox(Prompt:= 示例, Type:=8)如果希望允許輸入多種數(shù)據(jù)類型,那么可以使用上表中的任意數(shù)值組合。例如,如果要顯示一個可以接受文本或數(shù)值的輸入框,則可以將type的值設(shè)置為3(即1+2的結(jié)果)取消 ”按鈕,如果輸入了錯誤類型的數(shù)據(jù),則顯示錯誤消息并提示再次輸入數(shù)據(jù)。如果單擊則返回 False 。下面的示例提示用戶輸入希望打印活動工作表的份數(shù)(注意, type 指定希望輸入的是一個數(shù)值):Sub PrintActiveSheet()Dim TotalCopies As
49、 Long, NumCopies As LongDim sPrompt As String, sTitle As StringsPrompt = 您想要多少副本?sTitle = 打印活動工作表TotalCopies = Application.InputBox(Prompt:=sPrompt, Title:=sTitle, Default:=1,Type:=1)For NumCopies = 1 To TotalCopiesActiveSheet.PrintOutNext NumCopiesEnd Sub如果將 InputBox 方法的返回值賦給一個Variant 型變量, 則可以檢測該值是
50、否為 False 。如果要返回單元格區(qū)域,則使用像下面的代碼會更好: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此時,必須使用 Set 語句將 Range 對象賦值給某對象變量,如果用戶單擊 “取消 ”按鈕則返回值 False , Set 語句將失敗并提示運行時錯誤。使用 On Error Resume
51、Next 語句避免運行時錯誤,然后檢查是否產(chǎn)生了一個有效的區(qū)域。如果用戶單擊 “確定 ”按鈕,那么InputBox 方法檢查內(nèi)置類型以確保將返回有效的區(qū)域,因此空區(qū)域表明單擊了 “取消 ”按鈕。Run 方法Run 方法執(zhí)行一個宏或調(diào)用一個函數(shù)。 可以使用該方法運行由 VBA 或 Excel 宏語言編寫的宏,或者運行動態(tài)鏈接庫( DLL )里的函數(shù)或Excel 加載項( XLL )。 XLL 是使用任何支持創(chuàng)建 DLLs 的編譯器為 Excel 創(chuàng)建的加載項。 Run 方法的語法為:Run(Macro,Arg1,Arg30)參數(shù) Macro 是要執(zhí)行的宏或函數(shù)的名稱,參數(shù)Arg1 至 Arg30
52、 是需要傳遞給宏或函數(shù) 的一些參數(shù)。下面的示例使用 Run 方法調(diào)用一個過程,設(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也能夠使用下面的語句完成相同的任務(wù)Call MyProc(rng)End SubSub MyProc(rng As Range)With rng.Font.Bold
53、= TrueEnd WithEnd SubApplication 對象相關(guān)的事件Application 對象也有一些事件,能夠用于監(jiān)視整個Excel 應(yīng)用程序的行為。要使用Application 事件,必須啟用事件監(jiān)視。激活 Application 事件監(jiān)視、單擊 “插入 類模塊” ,創(chuàng)建一個類。、在屬性中,將類的名稱改為 AppEventClass 。3、在類的代碼窗口,添加下面的代碼:Public WithEvents Appl As Application現(xiàn)在,能夠在應(yīng)用程序中運用應(yīng)用程序級事件。、在代碼窗口頂部左側(cè)的對象列表中,選擇Appl 。、在代碼窗口頂部右側(cè)的過程列表中,選擇Wo
54、rkbookOpen 。此時,將為Appl_WorkbookOpen 過程插入一對占位符。6、在過程中添加下面的語句:Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook) MsgBox 已打開工作 簿.End Sub、重復(fù)上面的步驟插入 Appl_WorkbookBeforeClose 事件,并添加下面的語句:Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean) MsgBox 關(guān)閉工作簿.End Sub、接下來,創(chuàng)建一個變量用于引用類模塊中創(chuàng)建
55、的 Application 對象。在工程資源管理器中,雙擊ThisWorkbook 打開代碼窗口。9、添加下面的語句。Dim ApplicationClass As New AppEventClass通過在 ThisWorkbook 代碼窗口添加下面的語句,創(chuàng)建所聲明的對象對Application 對象的連接:Private Sub Workbook_Open()Set ApplicationClass.Appl = ApplicationEnd Sub、保存并關(guān)閉該工作簿。、現(xiàn)在,測試代碼。打開該工作簿,將觸發(fā)Appl_WorkbookOpen 事件,顯示相應(yīng)的信息框。、關(guān)閉該工作簿,將觸發(fā)
56、Appl_WorkbookBeforeClose 事件,顯示相應(yīng)的信息框。、 切換回 AppEventClass 類模塊并單擊過程列表顯示能夠用于監(jiān)控應(yīng)用程序行為的一系列事件。理解這些事件如何被觸發(fā)以及事件的順序?qū)斫鈶?yīng)用程序是重要的。在類模塊中添加其他的事件并插入消息框,然后試驗不同的行為來看看何時觸發(fā)某特定的事件。使用Application 對象執(zhí)行其它任務(wù)除了Application 對象中最常用的對象外,您可能希望在Excel 應(yīng)用程序中執(zhí)行一些其他任務(wù)。下面我們就來探討這方面的內(nèi)容。刪除工作表而顯示提示信息( DisplayAlerts 屬性)下面的示例首先關(guān)閉詢問是否保存工作表的任何
57、消息,接著刪除工作表并打開警告消息。Sub DeleteSheet()Application.DisplayAlerts = FalseActiveSheet.DeleteApplication.DisplayAlerts = TrueEnd Sub上述示例代碼中使用了 DisplayAlerts 屬性,將其值設(shè)置為 False 以自動執(zhí)行Excel 警告對話框中默認按鈕相關(guān)的操作。設(shè)置 DisplayAlerts 屬性的意圖在于,運行宏時不必響應(yīng)系統(tǒng)出現(xiàn)的警告而使執(zhí)行過程中斷。當(dāng)然,在過程結(jié)束前,最好將DisplayAlerts 屬性設(shè)置為 True 。無須提示用戶而保存工作表( Displ
58、ayAlerts 屬性)下面的示例保存工作表,而沒有通知用戶是否保存。Sub SaveWorksheet()Application.DisplayAlerts = FalseActiveWorkbook.SaveAs C:MonthlySales.xlsApplication.DisplayAlerts = TrueEnd Sub此時,如果現(xiàn)有文件與要保存的文件名相同,那么會覆蓋該文件而不會彈出任何警告消息。使用 SendKeys 方法發(fā)送信息到記事本SendKeys 方法允許發(fā)送按鍵到當(dāng)前活動窗口,用來控制不支持任何其他交互形式的應(yīng)用程序,例如 DDE( 動態(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 開啟記事本SendKeys AV, True 將數(shù)據(jù)粘貼到記事本SendKeys %FA, True 指定另存為SendKeys SalesData.txt, True 提供文件名SendKeys %S, True 保存文件End Sub本示例首先復(fù)制數(shù)據(jù)區(qū)域到剪貼板, 然后最小化 Excel , 開啟記事本, 接
60、著從剪貼板復(fù) 制數(shù)據(jù)到記事本,最后指定文件名并保存文件。下面的示例打開了 “記事本 ”應(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年骨科關(guān)節(jié)用藥合作協(xié)議書
- 2022-2023學(xué)年廣西欽州市四年級(上)期末數(shù)學(xué)試卷
- 2025年逆變式電焊機合作協(xié)議書
- 2025年九年級班主任心得樣本(2篇)
- 2025年買賣協(xié)議參考范文(2篇)
- 2025年五人股東合作的協(xié)議(2篇)
- 2025年代課教師勞動合同標(biāo)準(zhǔn)版本(4篇)
- 2025年代交社會保險協(xié)議(三篇)
- 2025年二年級美術(shù)教學(xué)工作總結(jié)(5篇)
- 2025年買賣房屋定金協(xié)議簡單版(三篇)
- 吉林省吉林市普通中學(xué)2024-2025學(xué)年高三上學(xué)期二模試題 生物 含答案
- 高考日語閱讀理解練習(xí)2篇-高考日語復(fù)習(xí)
- 2025年湖南省通信產(chǎn)業(yè)服務(wù)限公司春季校園招聘76人高頻重點提升(共500題)附帶答案詳解
- 《電影之創(chuàng)戰(zhàn)紀(jì)》課件
- 印刷基礎(chǔ)知識培訓(xùn)資料
- NB/T 11536-2024煤礦帶壓開采底板井下注漿加固改造技術(shù)規(guī)范
- 2024-2025學(xué)年人教版五年級(上)英語寒假作業(yè)(一)
- 【課件】九年級化學(xué)下冊(人教版2024)-【新教材解讀】義務(wù)教育教材內(nèi)容解讀課件
- 開題報告-鑄牢中華民族共同體意識的學(xué)校教育研究
- GA/T 761-2024停車庫(場)安全管理系統(tǒng)技術(shù)要求
- 2025屆貴州省六盤水市第二中學(xué)高三適應(yīng)性調(diào)研考試數(shù)學(xué)試題含解析
評論
0/150
提交評論