版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ExcelApplication對象開發(fā)指南
2009-12-2613:10:21標(biāo)簽:Excel
VBA概述Application對象是MicrosoftOfficeExcel2007對象模型中最高級別的對象,表示Excel程序自身。Application對象提供正在運(yùn)行的程序的信息、應(yīng)用于程序?qū)嵗倪x項(xiàng)以及實(shí)例中打開的當(dāng)前對象。因?yàn)樗菍ο竽P椭凶罡叩膶ο?,Application對象也包含組成一個工作簿的很多部件,包括如工作簿、工作表集合、單元格以及這些對象所包含的數(shù)據(jù)等。Application對象包括:程序范圍的設(shè)置和選項(xiàng)。這些選項(xiàng)大部分同“工具”菜單下的“選項(xiàng)”對話框里的內(nèi)容相同。頂級對象返回的方法,如ActiveCell、ActiveSheet等。在下面幾節(jié)里,你將通過使用VBA代碼示例學(xué)習(xí)到一些Application對象中經(jīng)常使用到的對象、方法和屬性。關(guān)于Application對象模型所有成員的詳細(xì)資料,請參考Application對象成員。Application對象中其它對象的引用方法你可以使用Application屬性返回Application對象。獲取一個Application對象后,如需訪問它下面的對象,可以在對象模型層級中往下移動。下面示例設(shè)置一個工作表的第一個單元格內(nèi)容為20。Application.Workbooks(1).Worksheets(1).Cells(1,1)=20要表示一個單元格,上面的代碼示例從Application對象開始,移到第一個工作簿,再移到第一個工作表,最后到這個單元格。下面示例在另一個Excel程序中創(chuàng)建一個Excel工作簿對象,然后打開一個工作簿。Setxl=CreateObject("Excel.Sheet")xl.Application.Workbooks.Open"newbook.xls"不需要使用“Application”限定詞,很多的屬性和方法也可以直接被用來返回那些最常用的用戶界面對象,如活動工作表(ActiveSheet屬性)。例如,除了使用Application.ActiveSheet.Name=“MonthlySales”,你也可以使用ActiveSheet.Name=“MonthlySales”。然而,當(dāng)使用這個簡便表示方法時必需小心,需要選擇正確的對象。例如通過使用Worksheet對象的Activate方確定你選擇了正確的工作簿和工作表后,你可以使用Cell(1,1)表示第一個單元格。有幾種情況你必需使用Application限定詞。例如,OnTime對象(本文后面部分將討論)需要這個限定詞,還有程序窗口的Width和Height屬性。一般來說,用來處理Excel窗口的外觀或影響程序全局行為的屬性或方法需要使用Application限定詞;例如,DisplayFormlaBar屬性用來顯示或隱藏公式欄,Calculation方法也需要限定詞。Application對象集合這一節(jié)詳細(xì)介紹一些和Application對象相關(guān)的集合。AddIns集合
AddIns集合表示所有當(dāng)前加載的ExcelAdd-in。你可以像枚舉其它對象一樣在你的程序中列舉出關(guān)于add-in的不同類型信息。下面的示例列舉出當(dāng)前加載到Excel中的Add-in的路徑和名稱。SubListAddIns()DimmyAddinAsAddInForEachmyAddinInAddInsMsgBoxmyAddin.FullNameNextEndSubColumns和Rows集合
這兩個集合表示活動工作簿中的列和行。分別使用它們選擇指定的列和行。Application.Columns(4).Select這個語句選擇D列,就像你通過點(diǎn)擊用戶界面中的列的頂部一樣。Application.Rows(5).Select這個語句選擇工作表中的第5行,就像你點(diǎn)擊行的左邊框一樣。Dialogs集合
Dialogs集合包括Excel程序中所有的對話框。將在本文中后面部分更詳細(xì)地討論Dialogs集合。Sheets集合
Sheets集合返回指定或活動工作簿中所有工作表的集合。Sheets集合可以包含Chart或Worksheet對象。
下面示例打印出活動工作簿中所有的工作表。Application.Sheets.PrintOut這個示例循環(huán)工作簿中所有的工作表并打印出包含數(shù)據(jù)區(qū)域的任何工作表。ForiSheet=1ToApplication.Sheets.CountIfNotIsEmpty(Application.Sheets(iSheet).UsedRange)ThenApplication.Sheets(iSheet).PrintOutcopies:=1EndIfNextiSheetApplication對象的屬性有很多的屬性可以用來訪問Excel2007程序的各種對象,多得不能記住或在這里全部討論。幸運(yùn)的是只有一部分是你可能經(jīng)常使用的。ActiveCellActiveChartActiveSheetActiveWindowActiveWorkbookRangeSelectionSelectionStatusBarThisWorkbook下面的內(nèi)容演示這些常用屬性的使用方法。ActiveCell屬性
Application對象的ActiveCell屬性返回一個表示活動工作簿中活動工作表的活動單元格的Range對象。如果你沒有指定對象限定詞,這個屬性返回活動窗口的活動單元格。注意區(qū)別活動單元格和選擇的單元格?;顒訂卧袷钱?dāng)前選擇中的一個單元格。選擇(Selection)可能包括一個單元格集合,但只有其中一個是活動單元格。下面的示例改變活動單元格的字體格式。注意為了確保你操作正確的單元格,工作表集合的Activate方法讓Sheet1成為活動工作表。Worksheets("Sheet1").ActivateWithActiveCell.Font.Bold=True.Italic=TrueEndWithActiveChart屬性
ActiveChart屬性返回表示活動圖表的Chart對象,不管它是嵌入的圖表還是圖表工作表。在一個嵌入的圖表被選擇或激活時,它就是活動圖表。下面的示例使用ActiveChart屬性添加一個3維柱形圖到月銷售記錄工作表中。SubAddChart()Charts.AddWithActiveChart.ChartType=xl3DColumn.SetSourceDataSource:=Sheets("Sheet1").Range("B3:H15").LocationWhere:=xlLocationAsObject,Name:="MonthlySales".HasTitle=True.ChartTitle.Characters.Text=MonthlySalesbyCategoryEndWithEndSubActiveSheet屬性
ActiveSheet屬性返回一個表示當(dāng)前選中的工作表(頂部工作表)的Worksheet對象。在一個工作簿中只有一個工作表能成為活動工作表。下面的示例顯示活動工作表的名稱。MsgBox"Thenameoftheactivesheetis"&ActiveSheet.Name下面的示例將活動工作表復(fù)制用戶指定的次數(shù)并放置在Sheet1之前。SubCopyActiveSheet()DimxAsIntegerx=InputBox("Enternumberoftimestocopyactivesheet")Fornumtimes=1Tox'PutcopiesinfrontofSheet1.ActiveWorkbook.ActiveSheet.Copy_Before:=ActiveWorkbook.Sheets("Sheet1")NextEndSubActiveWindow屬性
ActiveWindow屬性返回一個表示活動窗口(頂部窗口)的Window對象。下面的示例顯示活動窗口的名稱(Caption屬性)。MsgBox"Thenameoftheactivewindowis"&ActiveWindow.CaptionCaption屬性作為活動窗口的名稱允許你通過使用友好的名稱而不是序號來獲得窗口。下面的示例選擇并打印一個工作表,然后對第二個工作表重復(fù)此過程。SubPrintWorksheet()Application.ScreenUpdating=FalseSheets("Sales").SelectActiveWindow.SelectedSheets.PrintOutCopies:=1,Collate:=TrueSheets("Expenses").SelectActiveWindow.SelectedSheets.PrintOutCopies:=1,Collate:=TrueEndSub在這個例子中,你可能疑惑為什么設(shè)置ScreenUpdating屬性為False。當(dāng)Excel執(zhí)行一系列任務(wù)時,屏幕被更新并刷新很多次,這將導(dǎo)致屏幕閃爍。設(shè)置ScreenUpdating屬性為False可以消除閃爍。另外,因?yàn)殡娔X處理器不需要暫停來刷新屏幕,這樣也可以讓大型程序運(yùn)行得較快一點(diǎn)。ActiveWorkbook屬性
ActiveWorkbook屬性返回一個表示活動窗口(頂部窗口)中的工作簿的Workbook對象。這個示例顯示活動工作簿的名稱。MsgBox"Thenameoftheactiveworkbookis"&ActiveWorkbook.Name下面示例設(shè)置計(jì)算模式為手動(這樣其它工作簿將不計(jì)算),然后循環(huán)并計(jì)算活動工作簿的每個工作表。SubCalcBook()DimwksAsWorksheetApplication.Calculation=xlManualForEachwksInActiveWorkbook.Worksheetswks.CalculateNextSetwks=NothingEndSubRangeSelection屬性
RangeSelection屬性返回一個表示指定窗口中工作表里選擇的單元格的Range對象,即使在工作表中一個圖表對象已經(jīng)被選擇或激活。這個示例顯示活動窗口中工作表所選擇單元格的地址。MsgBoxApplication.ActiveWindow.RangeSelection.Address當(dāng)你選擇了一個范圍,RangeSelection屬性和Selection對象表示同樣一個范圍。當(dāng)你選擇一個圖表,RangeSelection屬性返回之前選擇的范圍。Selection屬性將在下一節(jié)中詳細(xì)介紹。這里介紹的語法RangeSelection.Name.Name在Office2003和2007中使用時都出現(xiàn)錯誤,如果該代碼生效,必須先設(shè)置單元格A1的名稱。并且應(yīng)該不是單元格內(nèi)容的前三個字符,而是名稱的前三個字符。這應(yīng)該是原文的疏漏。下面的示例顯示一個單元格中的前三個字符。Range("A1").SelectMsgBoxLeft(ActiveWindow.RangeSelection.Name.Name,3)你可能奇怪為什么使用這樣的語法ActiveWindow.RangeSelection.Name.Name當(dāng)你選擇一個范圍,使用RangeSelection.Name方法可以獲取像Sheet1!$A$1:$B$15這樣的范圍地址。另外,使用RangeSelection.Name.Name方法可以獲取命名像MyRange1這樣的范圍本身的名稱。Selection屬性
Selection屬性返回活動窗口中被選擇的對象。例如,對于單元格,這個屬性返回Range對象;對于圖表,它返回Chart對象。如果使用屬性而沒有對象限定符,等于使用Application.Selection。這個示例清除Sheet1所選的內(nèi)容。Worksheets("Sheet1").ActivateSelection.Clear下面的例子將所選范圍的總行數(shù)保存到變量NumRows。NumRows=0ForEachareaInSelection.AreasNumRows=NumRows+area.Rows.CountNextarea這個例子統(tǒng)計(jì)所選單元格的總數(shù)并在消息框中顯示結(jié)果。SubCount_Selection()DimcellAsObjectDimcountAsIntegercount=0ForEachcellInSelectioncount=count+1NextcellMsgBoxcount&"item(s)selected"EndSubStatusBar屬性
StatusBar屬性返回或設(shè)置狀態(tài)欄的文本。這個屬性允許你更改在Excel窗口底部的狀態(tài)欄中顯示的信息。它對在運(yùn)算過程需要較長時間來完成時讓用戶知道正在運(yùn)行的進(jìn)度非常有幫助。如果Excel控制狀態(tài)欄時StatusBar屬性返回False。另外,如需恢復(fù)默認(rèn)狀態(tài)欄文本,只需設(shè)置屬性值為False即可;甚至在狀態(tài)欄隱藏時也有效。例如,使用下面的方式對每個處理的文件你可以給StatusBar屬性賦值。DimFileNumAsIntegerFileNum=0ForEachfileinFiles'Dosomethinghere.Application.StatusBar="NowprocessingFile"&FileNumFileNum=FileNum+1Next然后當(dāng)過程結(jié)束,你需要使用下面的語句將狀態(tài)欄設(shè)置回正常狀態(tài)。Application.StatusBar=False你可以創(chuàng)建你自己的過程使用StatusBar屬性顯示一個宏或其它過程的進(jìn)度。SubShowStatusBarProgress()DimiAsLongDimpctDoneAsDoubleDimnumSquaresAsLongConstMAXSQRAsLong=15Fori=1To30pctDone=i/30numSquares=pctDone*MAXSQRApplication.StatusBar=Application.Rept(Chr(31),numSquares)Application.WaitNow+TimeSerial(0,0,1)NextiApplication.StatusBar=FalseEndSub這個例子在狀態(tài)欄上顯示最大15個方塊(由常數(shù)MAXSQR定義)。這個方塊通過使用ASCII字符31來產(chǎn)生。這個缺少關(guān)于宏需要多長時間的視覺指示,它僅表明宏正在進(jìn)行。Wait方法模擬一個宏需要長時間來執(zhí)行。ThisWorkbook屬性
ThisWorkbook屬性返回一個表示當(dāng)前運(yùn)行的宏代碼所在工作簿的Workbook對象。這個屬性允許載入宏定義包含代碼的工作簿。這種情況下ActiveWorkbook屬性并不起作用,因?yàn)榛顒庸ぷ鞑究赡懿⒉皇前d入宏代碼的工作簿。換句話說,ActiveWorkbook屬性不返回載入宏工作簿;它返回調(diào)用載入宏的工作簿。如果你使用你的VisualBasic代碼創(chuàng)建載入宏,你應(yīng)該使用ThisWorkbook屬性來限定任何必須運(yùn)行在包含載入宏的工作簿上的語句。下面示例關(guān)閉包含示例代碼的工作簿。如果對工作簿的修改不被保存。ThisWorkbook.CloseSaveChanges:=False下面的示例循環(huán)每個打開的工作簿并關(guān)閉它。然后關(guān)閉包含這個代碼的工作簿。PrivateoExcelAsExcel.ApplicationPrivatewbkAsExcel.WorkbookSubCloseOpenWrkBks()DimwrkbAsWorkbookForEachwbkInApplication.WorkbooksIfwrkb.Name<>ThisWorkbook.NameThenwbk.CloseTrueEndIfNextwbkThisWorkbook.CloseTrueEndSubApplication對象方法除了Application對象屬性外,下面將介紹一些更加常用的方法。FindFile方法和Dialogs集合
同GetOpenFilename方法不同,F(xiàn)indFile方法顯示Open對話框并允許用戶打開一個文件。如果新文件成功打開,此方法返回True。如果用戶取消對話框,此方法返回False。下面示例顯示一個消息框提示用戶打開一個指定文件,然后顯示Open對話框。如果用戶不能打開文件,顯示一個消息框。SubOpenFile1()DimbSuccessAsBooleanMsgbox"PleaselocatetheMonthlySales.xlsfile."bSuccess=Application.FindFileIfNotbSuccessThenMsgbox"Filenotopen."EndIfEndSub你也可以通過使用Dialogs集合細(xì)目的其中一個打開特別的對話框來完成同樣的事情。使用Dialogs集合的一個好處是當(dāng)你使用Show方法時,你可以傳遞參數(shù)給它來修改內(nèi)置對話框的默認(rèn)行為。例如,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_logical,converter.注意:如需查找某個特定的對話框的參數(shù),在Excel幫助文檔的“內(nèi)置對話框參數(shù)列表”中找到相應(yīng)的對話框常數(shù)。下面的例子顯示“打開”對話框并設(shè)置“Book1.xls”在文件名下拉列表框中,用戶不需要選擇文件就可以在對話框中顯示文件名。SubOpenFile2()Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Showarg1:="Book1.xls"EndSubDialogs集合最激動人心的部分是你可以使用它顯示任何Excel對話框-大約250種。你可以通過下面的步驟查看Dialogs集合的完整對話框列表。打開VisualBasic編輯器。單擊菜單“視圖”->“對象瀏覽器”,顯示對象瀏覽器窗口,也可以按F2。在搜索框中輸入xlBuiltInDialog。單擊Search按鈕。GetOpenFilename方法
GetOpenFilename方法顯示標(biāo)準(zhǔn)“打開”對話框并返回用戶選擇的文件名,實(shí)際上并未打開任何文件。GetOpenFilename方法給你最大的控制從你的程序中打開一個工作簿,因?yàn)樗龅木褪且宰址祷赜脩暨x擇的文件完整路徑和文件名。獲得文件名后接著做什么就取決于你自己了。例如,你可能傳遞結(jié)果給OpenText方法。這個方法的語法如下(所有的參數(shù)都是可選的):GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)參數(shù)FileFilter是一個定義過濾條件(如*.txt,*.xla)的字符串;FilterIndx指定默認(rèn)文件過濾條件的序號,從1到FileFilter中的過濾器數(shù)目;Title指定對話框的標(biāo)題;ButtonText只用于Macintosh系統(tǒng);MultiSelect是一個Boolean值,表示可以多選文件。下面的例子顯示“打開”對話框,并在文件類型下拉框中使用文本文件(*.txt)過濾條件,然后使用消息框顯示用戶的選擇。DimfileToOpenAsStringfileToOpen=Application.GetOpenFilename("TextFiles(*.txt),*.txt")IffileToOpen<>""ThenMsgBox"Open"&fileToOpenEndIfInputBox方法
就像你估計(jì)的,InputBox方法顯示一個對話框提示用戶輸入一個值。這個方法通過指定期望從用戶獲取的數(shù)據(jù)類型允許你有選擇性地輸入。
InputBox方法語法如下:InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextID,Type)其中:
Prompt是顯示在對話框中的信息,在這里你可以讓用戶知道你期望的數(shù)據(jù)類型。
Title是在對話框頂部顯示的標(biāo)題。
Default是最初顯示的默認(rèn)值。
Left和Top用來指定對話框的位置。這些值以屏幕的左上角為參考點(diǎn),單位是磅。
HelpFile和HelpContextID指定一個幫助文件。如果使用這些參數(shù),在對話框中將包括一個Help按鈕。
Type是返回的數(shù)據(jù)類型,默認(rèn)值是Text。允許的數(shù)據(jù)類型如下表。ValueType
0公式,以字符串返回,只需要此參數(shù)
1數(shù)值,你也可以在此包括一個返回一個數(shù)值的公式
2文本(字符串)
4邏輯數(shù)值(True或False)
8一個單元格引用,Range對象
16一個錯誤數(shù)值,如#N/A
64數(shù)值列表注意:如果Type為8,你必須使用Set語句將結(jié)果賦值給一個Range對象,如下例所示SetmyRange=Application.InputBox(prompt:="Sample",type:=8)下面的例子要求用戶輸入打印活動工作表的份數(shù)。注意Type參數(shù)表明此方法要求輸入數(shù)字。SubPrintActiveSheet()DimTotalCopiesAsLong,NumCopiesAsLongDimsPromptAsString,sTitleAsStringsPrompt="Howmanycopiesdoyouwant?"sTitle="Printstheactivesheet"TotalCopies=Application.InputBox(Prompt:=sPrompt,Title:=sTitle,Default:=1,Type:=1)ForNumCopies=1ToTotalCopiesActiveSheet.PrintOutNextNumCopiesEndSubRun方法
Run方法執(zhí)行一個宏或調(diào)用一個函數(shù)。你可以使用這個方法運(yùn)行一個用VBA或Excel宏語言寫的宏,或者運(yùn)行一個動態(tài)鏈接庫(DLL)或Excel加載宏(XLL)中的函數(shù)。XLL是Excel的加載宏,你可以使用任何支持創(chuàng)建DLLs的編譯器來創(chuàng)建它。下面是此方法的語法:Run(Macro,Arg1,,Arg30)Macro是要執(zhí)行的宏或函數(shù)的名字。Arg1到Arg30是你需要傳遞給宏或函數(shù)的任何參數(shù)。下面的例子使用Run方法調(diào)用一個過程來設(shè)置一個范圍中單元格的字體為粗體。注意你也可以使用Call方法來達(dá)到同樣的結(jié)果。SubUseRunMethod()DimwksAsWorksheetDimrngAsRangeSetwks=Worksheets("Sheet2")Setrng=wks.Range("A1:A10")Application.Run"MyProc",rng'Youcouldaccomplishthesamethingwith:'CallMyProc(rng)EndSubSubMyProc(rngAsRange)Withrng.Font.Bold=TrueEndWithEndSubApplication對象事件Application對象也提供幾個事件讓你可以用來監(jiān)控整個Excel程序的動作。要使用Application事件,你必須激活A(yù)pplication事件監(jiān)控。請按照以下步驟操作:1.創(chuàng)建一個類。在VBE窗口中,單擊“插入”–>“類模塊”
2.在“屬性”欄中,更改類的名稱為appEventClass。
3.在類模塊的代碼窗口,輸入:PublicWithEventsApplyAsApplication現(xiàn)在Application級的事件可以使用了。
4.現(xiàn)在測試一下,在代碼窗口的對象列表中,單擊“Apply”。
5.在代碼窗口中的過程列表中,單擊Apply_WorkbookOpen.這樣將在代碼窗口中添加一個自動生成的過程用于Apply_WorkbookOpen事件。
6.修改該過程如下:PrivateSubApply_WorkbookOpen(ByValWbAsWorkbook)MsgBox"你打開了工作簿。"EndSub7.重復(fù)以上步驟加入Apply_WorkbookBeforeClose事件。修改該事件的代碼如下:PrivateSubAppl_WorkbookBeforeClose(ByValWbAsWorkbook,CancelAsBoolean)MsgBox"你關(guān)閉了工作簿。"EndSub8.接著,創(chuàng)建一個變量用來代表在類模塊中創(chuàng)建的Application對象。在VBAProject的Project欄,雙擊ThisWorkbook節(jié)點(diǎn)打開代碼窗口。
9.加入下面的語句。DimApplicationClassAsNewAppEventClass通過在ThisWorkbook代碼窗口中添加以下過程來建立一個聲明的對象到Application對象的關(guān)聯(lián)。PrivateSubWorkbook_Open()SetApplicationClass.Appl=ApplicationEndSub10.保存并關(guān)閉工作簿。
11.現(xiàn)在打開該工作簿來測試代碼。Apply_WorkbookOpen事件將顯示對話框。
12.關(guān)閉工作簿,Apply_WorkbookBeforeClose將顯示對話框。
13.回到AppEventClass類模塊,單擊過程列表將顯示很多你可以在程序中用來監(jiān)控動作的事件。理解事件怎樣被激發(fā)并以何種順序激發(fā)對理解你的程序很重要。在類模塊中加入其它事件,并插入消息框,然后嘗試不同的動作看看什么時候什么事件將被激活。Application對象的其它用法除了一些常用的對象外,你還可以在Excel程序中使用Application對象的其它的一些功能。下面討論部分用法。刪除工作表時不彈出提示窗口
在下面的例子中,首先關(guān)閉任何詢問是否需要刪除工作表的警告消息框,然后刪除工作表,再設(shè)置使警告消息框生效。SubDeleteSheet()Application.DisplayAlerts=FalseActiveSheet.DeleteApplication.DisplayAlerts=TrueEndSub保存工作簿時無提示
這個例子在保存工作簿時沒有提示用戶。SubSaveWorksheet()Application.DisplayAlerts=FalseActiveWorkbook.SaveAs"C:MonthlySales.xls"Application.DisplayAlerts=TrueEndSub使用SendKeys發(fā)送信息到Notepad程序
下面的例子使用SendKeys語句從Excel語句中復(fù)制一個區(qū)域的數(shù)據(jù)到Notepad程序中,并保存為文本文件。SubSKeys()Range("A1:D15").Copy'Copytherange.SendKeys"%n",True'MinimizeExcel.Shell"notepad.exe",vbNormalFocus'StartNotepad.SendKeys"^V",True'PasttherangedataintoNotepad.SendKeys"%FA",True'SpecifySaveAs.SendKeys"SalesData.txt",True'Provideafilename.SendKeys"%S",True'Savethefile.ClosenotepadEndSub這個例子首先復(fù)制一個區(qū)域的數(shù)據(jù)到剪貼板,然后最小化Excel,啟動Notepad,然后從剪貼板復(fù)制數(shù)據(jù)到Notepad,最后指定文件名并保存文件,再關(guān)閉Notepad。在指定時間或間隔運(yùn)行一個宏
你可以使用Application對象的OnTime方法在指定的時間或以固定時間間隔運(yùn)行一個過程。OnTime方法的語法如下:Application.OnTime(EarliestTime,Procedure,LatestTime,Schedule)參數(shù)EarliestTime表示什么使用運(yùn)行名稱為參數(shù)Procedure的過程??蛇x參數(shù)LatestTime和Schedule變量分別表示運(yùn)行過程的最后時間和是否新建一個過程來運(yùn)行還是取消現(xiàn)有的過程。假如開始運(yùn)行時Excel很忙,你需要指定一個時間范圍來調(diào)用過程時參數(shù)LatestTime很有幫助。下面的示例每5分鐘運(yùn)行指定的過程YourProcApplication.OnTimeEarliestTime:=Now+TimeValue("00:05:00),_Procedure:="YourProc"下面的示例每天正午的時候運(yùn)行過程YourProc.Application.OnTime_EarliestTime:=TimeValue("12:00:00"),_Procedure:="YourProc"下面的示例每5分鐘調(diào)用AutoSave過程。如果你關(guān)閉工作簿,調(diào)用Cleanup過程來取消前面設(shè)置的OnTime。PrivateSubWorkbook_Open()Application.OnTimeNow+TimeValue("00:05:00"),"AutoSave"EndSubPrivateSubWorkbook_BeforeClose(CancelAsBoolean)OnErrorResumeNextApplication.OnTimeNow+TimeValue("00:05:00"),"CleanUp",,FalseEndSub注意:Workbook_Open和Workbook_BeforeClose事件包含在Workbook模塊中。AutoSave和CleanUp過程應(yīng)該位于標(biāo)準(zhǔn)模塊中。結(jié)論這篇文章僅介紹Application對象的一部分成員。還有其他成員讓你的用戶以新的方式同Excel程序交互和改變你程序的外觀。熟悉Application對象的使用將讓你按照你自己的要求擴(kuò)展和采用Excel的功能。[@more@]Workbook對象應(yīng)用示例
2009-12-2921:37:01標(biāo)簽:vba
WorkbookWorkbook對象代表一個工作簿,Workbooks集合對象則代表同一Excel進(jìn)程中打開的所有工作簿對象。
[應(yīng)用1]創(chuàng)建新工作簿(Add方法)
使用Add方法在Workbooks集合中創(chuàng)建新工作簿,所創(chuàng)建的工作簿為活動工作簿。其語法為:
Workbooks.Add(Template)
參數(shù)Template可選,決定如何創(chuàng)建新工作簿。如果將該參數(shù)設(shè)置為已存在的Excel模板文件名稱,那么將以該文件作為模板創(chuàng)建工作簿。該參數(shù)可以為下列XlWBATemplate常量之一:xlWBATChart(值-4109,代表圖表)、xlWBATExcel4IntlMacroSheet(值4)、xlWBATExcel4MacroSheet(值3)、xlWBATWorksheet(值-4167,代表工作表)。在創(chuàng)建新工作簿時,如果指定該參數(shù),那么將創(chuàng)建包含指定類型工作表的工作簿;如果省略該參數(shù),那么將創(chuàng)建包含一定數(shù)量空工作表的工作簿,工作表數(shù)為SheetsInNewWorkbook屬性所設(shè)置的數(shù)量。
應(yīng)用示例1:創(chuàng)建一個新工作簿SubCreateNewWorkbook1()MsgBox"將創(chuàng)建一個新工作簿."Workbooks.AddEndSub應(yīng)用示例2:創(chuàng)建一個新工作簿并命名工作表且添加數(shù)據(jù)SubCreateNewWorkbook2()DimwbAsWorkbookDimwsAsWorksheetDimiAsLongMsgBox"將創(chuàng)建一個新工作簿,并預(yù)設(shè)工作表格式."Setwb=Workbooks.AddSetws=wb.Sheets(1)ws.Name="產(chǎn)品匯總表"ws.Cells(1,1)="序號"ws.Cells(1,2)="產(chǎn)品名稱"ws.Cells(1,3)="產(chǎn)品數(shù)量"Fori=2To10ws.Cells(i,1)=i-1NextiEndSub應(yīng)用示例3:創(chuàng)建帶有指定數(shù)量工作表的工作簿SubtestNewWorkbook()MsgBox"創(chuàng)建一個帶有10個工作表的新工作簿"DimwbAsWorkbookSetwb=NewWorkbook(10)EndSubFunctionNewWorkbook(wsCountAsInteger)AsWorkbook'創(chuàng)建帶有由變量wsCount提定數(shù)量工作表的工作簿,工作表數(shù)在1至255之間DimOriginalWorksheetCountAsLongSetNewWorkbook=NothingIfwsCount<1OrwsCount>255ThenExitFunctionOriginalWorksheetCount=Application.SheetsInNewWorkbookApplication.SheetsInNewWorkbook=wsCountSetNewWorkbook=Workbooks.AddApplication.SheetsInNewWorkbook=OriginalWorksheetCountEndFunction自定義函數(shù)NewWorkbook可以創(chuàng)建最多帶有255個工作表的工作簿。本測試示例創(chuàng)建一個帶有10個工作表的新工作簿。
[應(yīng)用2]打開工作簿(Open方法)
Open方法用于打開一個現(xiàn)有的工作簿,其語法為:Workbooks.Open(FileName,UpdateLinks,ReadOnly,Format,Password,WriteResPassword,IgnoreReadOnlyRecommended,Origin,Delimiter,Editable,Notify,Converter,AddToMru,Local,CorruptLoad)可以看到,該方法具有很多參數(shù),但大多數(shù)參數(shù)都很少用到。在這些參數(shù)中,除參數(shù)FileName必須外,其它參數(shù)都可選。
參數(shù)FileName指定要打開的工作簿文件的名稱,參數(shù)UpdateLinks指定更新工作簿中鏈接的方式,參數(shù)ReadOnly用來設(shè)置是否以只讀方式打開工作簿。如果需要使用密碼來打開工作簿,則應(yīng)該將參數(shù)Password設(shè)置為該密碼;如果需要使用密碼打開工作簿但沒有指定密碼,則會彈出詢問密碼的對話框。參數(shù)AddToMru指定是否將工作簿添加到最近使用的文件列表中,建議將其設(shè)置為True,默認(rèn)值為False。
應(yīng)用示例4:以只讀方式打開某工作簿SubopenWorkbook2()DimfnameAsStringMsgBox"將D盤中的<測試.xls>工作簿以只讀方式打開"fname="D:測試.xls"Workbooks.OpenFilename:=fname,ReadOnly:=TrueEndSub[應(yīng)用3]訪問特定的工作簿
使用Item屬性返回Workbooks集合中特定的工作簿。例如:Workbooks.Item(1)返回Workbooks集合中的第一個工作簿。由于Item屬性是缺省的屬性,因此上述代碼也可以簡寫為:Workbooks(1)然而,使用索引號來指定工作簿是不可靠的,最好使用工作簿的具體名稱來指定特定的工作簿,例如:Workbooks("MyBook.xlsx")注意,當(dāng)用戶使用“新建”命令創(chuàng)建一個新工作簿(假設(shè)該工作簿系統(tǒng)默認(rèn)名稱為Book2)時,在沒有保存該工作簿前,應(yīng)該使用下面的代碼指定該工作簿:Workbooks("Book2")此時,如果使用下面的代碼指定該工作簿:Workbooks("Book2.xlsx")將會產(chǎn)生運(yùn)行時錯誤:下標(biāo)越界。
[應(yīng)用4]激活工作簿(Activate方法)使用Activate方法激活指定的工作簿,例如:Workbooks("MyWorkbook").Activate[應(yīng)用5]獲得當(dāng)前打開的工作簿數(shù)(Count屬性)使用Workbooks集合對象的Count屬性來獲得當(dāng)前打開的工作簿數(shù),例如:Workbooks.Count[應(yīng)用6]判斷工作簿是否是只讀的(ReadOnly屬性)
如果工作簿以只讀方式打開,那么ReadOnly屬性的值為True。
[應(yīng)用7]獲得工作簿的路徑和名稱(Name屬性、FullName屬性、Path屬性、CodeName屬性)
使用Workbook對象的Name屬性可以返回工作簿的名稱。例如,下面的函數(shù)可以返回當(dāng)前工作簿的名稱:FunctionMyName()AsStringMyName=ThisWorkbook.NameEndFunction使用Workbook對象的FullName屬性可以返回工作簿的路徑和名稱。例如,下面的函數(shù)可以返回當(dāng)前工作簿的路徑和名稱:FunctionMyName()AsStringMyName=ThisWorkbook.NameEndFunction使用Workbook對象的Path屬性可以返回工作簿文件的路徑。使用Workbook對象的CodeName屬性返回工作簿對象的代碼名。
上述屬性均為只讀屬性。
應(yīng)用示例5:一些工作簿通用屬性示例SubtestGeneralWorkbookInfo()MsgBox"本工作簿的名稱為"&ActiveWorkbook.NameMsgBox"本工作簿帶完整路徑的名稱為"&ActiveWorkbook.FullNameMsgBox"本工作簿對象的代碼名為"&ActiveWorkbook.CodeNameMsgBox"本工作簿的路徑為"&ActiveWorkbook.PathIfActiveWorkbook.ReadOnlyThenMsgBox"本工作簿已經(jīng)是以只讀方式打開"ElseMsgBox"本工作簿可讀寫."EndIfIfActiveWorkbook.SavedThenMsgBox"本工作簿已保存."ElseMsgBox"本工作簿需要保存."EndIfEndSub[應(yīng)用8]保存工作簿(Save方法)
使用Save方法保存對工作簿所作的所有更改,其語法為:Workbook.Save應(yīng)用示例6:保存已存在的所有工作簿SubSaveAllWorkbooks()DimwbkAsWorkbookForEachwbkInWorkbooksIfwbk.Path<>""Thenwbk.SaveNextwbkEndSub如果某工作簿的Path屬性值為空,則表明該工作簿為新建工作簿,還沒有保存。而本過程僅保存所有已存在的(即已經(jīng)保存過的)工作簿。
[應(yīng)用9]保存工作簿(SaveAs方法)
使用SaveAs方法在指定的文件中保存對工作簿所做的更改,其語法為:Workbook.SaveAs(FileName,FileFormat,Password,WriteResPassword,ReadOnlyRecommended,CreateBackup,AccessMode,ConflictResolution,AddToMru,TextCodepage,TextVisualLayout,Local)所有參數(shù)均為可選參數(shù)。其中參數(shù)FileName指定要保存文件的文件名,可以包含完整的路徑,如果不指定路徑,Excel將文件保存到當(dāng)前文件夾中。參數(shù)FileFormat指定保存文件時使用的文件格式。如果文件夾中存在相同名稱的工作簿,則提示是否替換原工作簿。
參數(shù)Password用于指定文件的保護(hù)密碼,是一個區(qū)分大小寫的字符串(最長不超過15個字符)。參數(shù)WriteResPassword指定文件的寫保護(hù)密碼,如果文件保存時帶有密碼,但打開文件時沒有輸入密碼,則該文件以只讀方式打開。
將參數(shù)ReadOnlyRecommended設(shè)置為True,則在打開文件時顯示一條消息,提示該文件以只讀方式打開。將參數(shù)CreateBackup設(shè)置為True,以創(chuàng)建一個備份文件。
參數(shù)AccessMode和參數(shù)ConflictResolution用來解決訪問和沖突問題。
將參數(shù)AddToMru設(shè)置為True,以添加工作簿到最近使用的文件列表中。默認(rèn)值為False。
應(yīng)用示例7:創(chuàng)建新工作簿并保存SubAddSaveAsNewWorkbook()DimWkAsWorkbookSetWk=Workbooks.AddApplication.DisplayAlerts=FalseWk.SaveAsFilename:="D:SalesData.xlsx"EndSub這里使用了Add方法和SaveAs方法,添加一個新工作簿并將該工作簿以文件名SalesData.xlsx保存在D盤中。其中,語句Application.DisplayAlerts=False表示禁止彈出警告對話框。
應(yīng)用示例8:另存已有的工作簿SubSaveWorkbook2()DimoldNameAsString,newNameAsStringDimfolderNameAsString,fnameAsStringoldName=ActiveWorkbook.NamenewName="new"&oldNameMsgBox"將<"&oldName&">以<"&newName&">的名稱保存"folderName=Application.DefaultFilePathfname=folderName&""&newNameActiveWorkbook.SaveAsfnameEndSub上述代碼將當(dāng)前工作簿以一個新名(即new加原名)保存在默認(rèn)文件夾中。
應(yīng)用示例9:備份工作簿SubCreateBak1()MsgBox"保存工作簿并建立備份工作簿"ActiveWorkbook.SaveAsCreateBackup:=TrueEndSub上述代碼在當(dāng)前文件夾中建立工作簿的備份。SubCreateBak2()MsgBox"保存工作簿時,若已建立了備份,則將出現(xiàn)包含True的信息框,否則出現(xiàn)False."MsgBoxActiveWorkbook.CreateBackupEndSub[應(yīng)用10]保存工作簿副本(SaveCopyAs方法)
使用SaveCopyAs方法保存指定工作簿的一份副本,但不會修改已經(jīng)打開的工作簿,其語法為
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年滬科版九年級化學(xué)下冊階段測試試卷
- 商業(yè)環(huán)境下的學(xué)生職業(yè)規(guī)劃與心理健康
- 醫(yī)療設(shè)備中安全硬件的研發(fā)與市場前景分析
- 2025中國鐵路北京局集團(tuán)限公司招聘4982人(一)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國郵政集團(tuán)公司重慶分公司社會招聘536人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國紙業(yè)投資限公司社會招聘6人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國社會科學(xué)院美國研究所第一批專業(yè)技術(shù)人員公開招聘補(bǔ)充高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國電信湖北黃岡分公司招聘30人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國新聞社應(yīng)屆高校畢業(yè)生公開招聘補(bǔ)充高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國國際工程咨詢限公司總部社會招聘20人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2022年低血容量休克復(fù)蘇指南
- 細(xì)胞生物學(xué)知識點(diǎn)
- H型鋼力學(xué)性能計(jì)算表
- 中小微企業(yè)融資情況調(diào)查問卷
- 幼兒園生成課程與預(yù)成課程
- 時間序列分析論文
- 輕型貨車設(shè)計(jì)
- 實(shí)際問題與反比例函數(shù)(1)
- 城市軌道交通工程項(xiàng)目質(zhì)量安全控制要點(diǎn)
- 交通標(biāo)志結(jié)構(gòu)計(jì)算書
- 廠房結(jié)構(gòu)設(shè)計(jì)原理
評論
0/150
提交評論