Excel Application對象 開發(fā)指南_第1頁
Excel Application對象 開發(fā)指南_第2頁
Excel Application對象 開發(fā)指南_第3頁
Excel Application對象 開發(fā)指南_第4頁
Excel Application對象 開發(fā)指南_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Excel Application對象 開發(fā)指南 2009-12-26 13:10:21標(biāo)簽:Excel VBA概述Application 對象是 Microsoft Office Excel 2007對象模型中最高級別的對象, 表示 Excel 程序 自身。 Application 對象提供正在運行的程序的信息、 應(yīng)用于程序?qū)嵗倪x項以及實例中打開 的當(dāng)前對象。 因為它是對象模型中最高的對象, Application 對象也包含組成一個工作簿的很 多部件,包括如工作簿、工作表集合、單元格以及這些對象所包含的數(shù)據(jù)等。Application 對象包括:程序范圍的設(shè)置和選項。這些選項大部分同“工具

2、”菜單下的“選項”對話框里的 內(nèi)容相同。頂級對象返回的方法,如 ActiveCell 、 ActiveSheet 等。在下面幾節(jié)里, 你將通過使用 VBA 代碼示例學(xué)習(xí)到一些 Application 對象中經(jīng)常使用到的對 象、方法和屬性。關(guān)于 Application 對象模型所有成員的詳細(xì)資料,請參考 Application 對象 成員 。Application 對象中其它對象的引用方法你可以使用 Application 屬性返回 Application 對象。獲取一個 Application 對象后,如需訪問 它下面的對象, 可以在對象模型層級中往下移動。 下面示例設(shè)置一個工作表的第一個單元

3、格 內(nèi)容為 20。Application.Workbooks(1.Worksheets(1.Cells(1,1=20要表示一個單元格,上面的代碼示例從 Application 對象開始,移到第一個工作簿,再移到 第一個工作表,最后到這個單元格。下面示例在另一個 Excel 程序中創(chuàng)建一個 Excel 工作簿對象,然后打開一個工作簿。Set xl=CreateObject("Excel.Sheet"xl.Application.Workbooks.Open "newbook.xls"不需要使用“ Application ”限定詞,很多的屬性和方法也可以直接

4、被用來返回那些最常用的 用 戶 界 面 對 象 , 如 活 動 工 作 表 (ActiveSheet屬 性 。 例 如 , 除 了 使 用 Application.ActiveSheet.Name = “ Monthly Sales ” , 你 也 可 以 使 用 ActiveSheet.Name = “ Monthly Sales ” 。然而,當(dāng)使用這個簡便表示方法時必需小心,需要選擇正確的對象。例 如通過使用 Worksheet 對象的 Activate 方確定你選擇了正確的工作簿和工作表后,你可以使 用 Cell(1,1表示第一個單元格。有幾種情況你必需使用 Application 限定

5、詞。例如, OnTime 對象 (本文后面部分將討論 需要 這個限定詞,還有程序窗口的 Width 和 Height 屬性。一般來說,用來處理 Excel 窗口的外 觀或影響程序全局行為的屬性或方法需要使用 Application 限定詞; 例如, DisplayFormlaBar 屬性用來顯示或隱藏公式欄, Calculation 方法也需要限定詞。Application 對象集合這一節(jié)詳細(xì)介紹一些和 Application 對象相關(guān)的集合。AddIns 集合AddIns 集合表示所有當(dāng)前加載的 Excel Add-in。 你可以像枚舉其它對象一樣在你的程序中列 舉出關(guān)于 add-in 的不

6、同類型信息。下面的示例列舉出當(dāng)前加載到 Excel 中的 Add-in 的路徑 和名稱。Sub ListAddIns(Dim myAddin As AddInFor Each myAddin In AddInsMsgBox myAddin.FullNameNextEnd SubColumns 和 Rows 集合這兩個集合表示活動工作簿中的列和行。分別使用它們選擇指定的列和行。 Application.Columns(4.Select這個語句選擇 D 列,就像你通過點擊用戶界面中的列的頂部一樣。 Application.Rows(5.Select這個語句選擇工作表中的第 5行,就像你點擊行的左邊

7、框一樣。Dialogs 集合Dialogs 集合包括 Excel 程序中所有的對話框。 將在本文中后面部分更詳細(xì)地討論 Dialogs 集 合。Sheets 集合Sheets 集合返回指定或活動工作簿中所有工作表的集合。 Sheets 集合可以包含 Chart 或 Worksheet 對象。下面示例打印出活動工作簿中所有的工作表。Application.Sheets.PrintOut這個示例循環(huán)工作簿中所有的工作表并打印出包含數(shù)據(jù)區(qū)域的任何工作表。For iSheet = 1 To Application.Sheets.CountIf Not IsEmpty(Application.Sheet

8、s(iSheet.UsedRange ThenApplication.Sheets(iSheet.PrintOut copies:=1End IfNext iSheetApplication 對象的屬性有很多的屬性可以用來訪問 Excel 2007程序的各種對象,多得不能記住或在這里全部討論。 幸運的是只有一部分是你可能經(jīng)常使用的。ActiveCellActiveChartActiveSheetActiveWindowActiveWorkbookRangeSelectionSelectionStatusBarThisWorkbook下面的內(nèi)容演示這些常用屬性的使用方法。ActiveCell 屬

9、性Application 對象的 ActiveCell 屬性返回一個表示活動工作簿中活動工作表的活動單元格的 Range 對象。如果你沒有指定對象限定詞,這個屬性返回活動窗口的活動單元格。注意區(qū)別活動單元格和選擇的單元格。活動單元格是當(dāng)前選擇中的一個單元格。選擇 (Selection可能包括一個單元格集合,但只有其中一個是活動單元格。下面的示例改變活動單元格的字體格式。 注意為了確保你操作正確的單元格, 工作表集合的 Activate 方法讓 Sheet1成為活動工作表。Worksheets("Sheet1".ActivateWith ActiveCell.Font.Bol

10、d = True.Italic = TrueEnd WithActiveChart 屬性ActiveChart 屬性返回表示活動圖表的 Chart 對象, 不管它是嵌入的圖表還是圖表工作表。 在 一個嵌入的圖表被選擇或激活時,它就是活動圖表。下面的示例使用 ActiveChart 屬性添加 一個 3維柱形圖到月銷售記錄工作表中。Sub AddChart(Charts.AddWith ActiveChart.ChartType = xl3DColumn.SetSourceData Source:=Sheets("Sheet1".Range("B3:H15"

11、.Location Where:=xlLocationAsObject, Name:="Monthly Sales".HasTitle = True.ChartTitle.Characters.Text = Monthly Sales by CategoryEnd WithEnd SubActiveSheet 屬性ActiveSheet 屬性返回一個表示當(dāng)前選中的工作表(頂部工作表的 Worksheet 對象。 在一個 工作簿中只有一個工作表能成為活動工作表。下面的示例顯示活動工作表的名稱。 MsgBox "The name of the active sheet

12、 is " & ActiveSheet.Name下面的示例將活動工作表復(fù)制用戶指定的次數(shù)并放置在 Sheet1之前。Sub CopyActiveSheet(Dim x As Integerx = InputBox("Enter number of times to copy active sheet"For numtimes = 1 To x' Put copies in front of Sheet1.ActiveWorkbook.ActiveSheet.Copy _Before:=ActiveWorkbook.Sheets("Shee

13、t1"NextEnd SubActiveWindow 屬性ActiveWindow 屬性返回一個表示活動窗口(頂部窗口的 Window 對象。下面的示例顯示 活動窗口的名稱(Caption 屬性 。MsgBox "The name of the active window is " & ActiveWindow.CaptionCaption 屬性作為活動窗口的名稱允許你通過使用友好的名稱而不是序號來獲得窗口。 下面的示例選擇并打印一個工作表,然后對第二個工作表重復(fù)此過程。Sub PrintWorksheet(Application.ScreenUpdati

14、ng = FalseSheets("Sales".SelectActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=TrueSheets("Expenses".SelectActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=TrueEnd Sub在這個例子中,你可能疑惑為什么設(shè)置 ScreenUpdating 屬性為 False 。當(dāng) Excel 執(zhí)行一系列 任務(wù)時,屏幕被更新并刷新很多次,這將導(dǎo)致屏幕閃爍。設(shè)置 ScreenUpda

15、ting 屬性為 False 可以消除閃爍。 另外, 因為電腦處理器不需要暫停來刷新屏幕, 這樣也可以讓大型程序運行 得較快一點。ActiveWorkbook 屬性ActiveWorkbook 屬性返回一個表示活動窗口 (頂部窗口 中的工作簿的 Workbook 對象。這個 示例顯示活動工作簿的名稱。MsgBox "The name of the active workbook is " & ActiveWorkbook.Name下面示例設(shè)置計算模式為手動(這樣其它工作簿將不計算 ,然后循環(huán)并計算活動工作簿的 每個工作表。Sub CalcBook(Dim wks A

16、s WorksheetApplication.Calculation = xlManualFor Each wks In ActiveWorkbook.Worksheetswks.CalculateNextSet wks = NothingEnd SubRangeSelection 屬性RangeSelection 屬性返回一個表示指定窗口中工作表里選擇的單元格的 Range 對象,即使在 工作表中一個圖表對象已經(jīng)被選擇或激活。 這個示例顯示活動窗口中工作表所選擇單元格的 地址。MsgBox Application.ActiveWindow.RangeSelection.Address當(dāng)你選擇

17、了一個范圍, 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".SelectMsgBox Left(Active

18、Window.RangeSelection.Name.Name, 3你可能奇怪為什么使用這樣的語法ActiveWindow.RangeSelection.Name.Name當(dāng)你選擇一個范圍,使用 RangeSelection.Name 方法可以獲取像 Sheet1!$A$1:$B$15這樣的 范圍地址。 另外, 使用 RangeSelection.Name.Name 方法可以獲取命名像 MyRange1這樣的范 圍本身的名稱。Selection 屬性Selection 屬性返回活動窗口中被選擇的對象。 例如, 對于單元格, 這個屬性返回 Range 對象; 對 于 圖 表 , 它 返 回 Ch

19、art 對 象 。 如 果 使 用 屬 性 而 沒 有 對 象 限 定 符 , 等 于 使 用 Application.Selection 。這個示例清除 Sheet1所選的內(nèi)容。Worksheets("Sheet1".Activate Selection.Clear下面的例子將所選范圍的總行數(shù)保存到變量 NumRows 。NumRows = 0For Each area In Selection.AreasNumRows = NumRows + area.Rows.CountNext area這個例子統(tǒng)計所選單元格的總數(shù)并在消息框中顯示結(jié)果。Sub Count_Selec

20、tion(Dim cell As ObjectDim count As Integercount = 0For Each cell In Selectioncount = count + 1Next cellMsgBox count & " item(s selected"End SubStatusBar 屬性StatusBar 屬性返回或設(shè)置狀態(tài)欄的文本。 這個屬性允許你更改在 Excel 窗口底部的狀態(tài)欄中 顯示的信息。它對在運算過程需要較長時間來完成時讓用戶知道正在運行的進度非常有幫 助。如果 Excel 控制狀態(tài)欄時 StatusBar 屬性返回 False

21、 。另外,如需恢復(fù)默認(rèn)狀態(tài)欄文本,只需 設(shè)置屬性值為 False 即可;甚至在狀態(tài)欄隱藏時也有效。例如,使用下面的方式對每個處理的文件你可以給 StatusBar 屬性賦值。Dim FileNum As IntegerFileNum = 0For Each file in Files' Do something here.Application.StatusBar = "Now processing File " & FileNumFileNum = FileNum + 1Next然后當(dāng)過程結(jié)束,你需要使用下面的語句將狀態(tài)欄設(shè)置回正常狀態(tài)。 Applicat

22、ion.StatusBar = False你可以創(chuàng)建你自己的過程使用 StatusBar 屬性顯示一個宏或其它過程的進度。Sub ShowStatusBarProgress(Dim i As LongDim pctDone As DoubleDim numSquares As LongConst MAXSQR As Long = 15For i = 1 To 30pctDone = i / 30numSquares = pctDone * MAXSQRApplication.StatusBar = Application.Rept(Chr(31, numSquaresApplication.W

23、ait Now + TimeSerial(0, 0, 1Next iApplication.StatusBar = FalseEnd Sub這個例子在狀態(tài)欄上顯示最大 15個方塊 (由常數(shù) MAXSQR 定義 。 這個方塊通過使用 ASCII字符 31來產(chǎn)生。這個缺少關(guān)于宏需要多長時間的視覺指示,它僅表明宏正在進行。 Wait 方 法模擬一個宏需要長時間來執(zhí)行。ThisWorkbook 屬性ThisWorkbook 屬性返回一個表示當(dāng)前運行的宏代碼所在工作簿的 Workbook 對象。這個屬 性允許載入宏定義包含代碼的工作簿。這種情況下 ActiveWorkbook 屬性并不起作用,因為 活動

24、工作簿可能并不是包含載入宏代碼的工作簿。換句話說, ActiveWorkbook 屬性不返回 載入宏工作簿; 它返回調(diào)用載入宏的工作簿。 如果你使用你的 Visual Basic代碼創(chuàng)建載入宏, 你應(yīng)該使用 ThisWorkbook 屬性來限定任何必須運行在包含載入宏的工作簿上的語句。 下面示例關(guān)閉包含示例代碼的工作簿。如果對工作簿的修改不被保存。 ThisWorkbook.Close SaveChanges:=False下面的示例循環(huán)每個打開的工作簿并關(guān)閉它。然后關(guān)閉包含這個代碼的工作簿。Private oExcel As Excel.ApplicationPrivate wbk As Ex

25、cel.WorkbookSub CloseOpenWrkBks(Dim wrkb As WorkbookFor Each wbk In Application.WorkbooksIf wrkb.Name <> ThisWorkbook.Name Thenwbk.Close TrueEnd IfNext wbkThisWorkbook.Close TrueEnd SubApplication 對象方法除了 Application 對象屬性外,下面將介紹一些更加常用的方法。FindFile 方法和 Dialogs 集合同 GetOpenFilename 方法不同, FindFile 方

26、法顯示 Open 對話框并允許用戶打開一個文件。 如果新文件成功打開,此方法返回 True 。如果用戶取消對話框,此方法返回 False 。下面示例顯示一個消息框提示用戶打開一個指定文件,然后顯示 Open 對話框。如果用戶不 能打開文件,顯示一個消息框。Sub OpenFile1( Dim bSuccess As BooleanMsgbox "Please locate the MonthlySales.xls file."bSuccess = Application.FindFileIf Not bSuccess ThenMsgbox "File not op

27、en."End IfEnd Sub你也可以通過使用 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_

28、logical, converter.注意:如需查找某個特定的對話框的參數(shù),在 Excel 幫助文檔的“內(nèi)置對話框參數(shù)列表”中 找到相應(yīng)的對話框常數(shù)。下面的例子顯示“打開”對話框并設(shè)置“ Book1.xls ”在文件名下拉列表框中,用戶不需要 選擇文件就可以在對話框中顯示文件名。Sub OpenFile2( Application.Dialogs(XlBuiltInDialog.xlDialogOpen.Show arg1:="Book1.xls"End SubDialogs 集合最激動人心的部分是你可以使用它顯示任何 Excel 對話框 -大約 250種。你可以 通過下面

29、的步驟查看 Dialogs 集合的完整對話框列表。1. 打開 Visual Basic編輯器。2. 單擊菜單“視圖” ->“對象瀏覽器” ,顯示對象瀏覽器窗口,也可以按 F2。3. 在搜索框中輸入 xlBuiltInDialog 。4. 單擊 Search 按鈕。GetOpenFilename 方法GetOpenFilename 方法顯示標(biāo)準(zhǔn)“打開”對話框并返回用戶選擇的文件名,實際上并未打開 任何文件。 GetOpenFilename 方法給你最大的控制從你的程序中打開一個工作簿,因為它所 做的就是以字符串返回用戶選擇的文件完整路徑和文件名。 獲得文件名后接著做什么就取決 于你自己了。

30、例如,你可能傳遞結(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 值,表示可以多選文件。下面的例子顯示

31、“打開”對話框,并在文件類型下拉框中使用文本文件(*.txt過濾條件, 然后使用消息框顯示用戶的選擇。Dim fileToOpen As StringfileToOpen = Application.GetOpenFilename("Text Files (*.txt, *.txt"If fileToOpen <> "" ThenMsgBox "Open " & fileToOpenEnd IfInputBox 方法就像你估計的, InputBox 方法顯示一個對話框提示用戶輸入一個值。 這個方法通過指定期望 從用

32、戶獲取的數(shù)據(jù)類型允許你有選擇性地輸入。InputBox 方法語法如下 :InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type其中:Prompt 是顯示在對話框中的信息,在這里你可以讓用戶知道你期望的數(shù)據(jù)類型。Title 是在對話框頂部顯示的標(biāo)題。Default 是最初顯示的默認(rèn)值。Left 和 Top 用來指定對話框的位置。這些值以屏幕的左上角為參考點,單位是磅。 HelpFile 和 HelpContextID 指定一個幫助文件。如果使用這些參數(shù),在對話框中將包括一個 Help 按鈕。Type 是返

33、回的數(shù)據(jù)類型,默認(rèn)值是 Text 。允許的數(shù)據(jù)類型如下表。Value Type0 公式,以字符串返回,只需要此參數(shù)1 數(shù)值,你也可以在此包括一個返回一個數(shù)值的公式2 文本(字符串4 邏輯數(shù)值(True 或 False 8 一個單元格引用, Range 對象16 一個錯誤數(shù)值,如 #N/A64 數(shù)值列表注意:如果 Type 為 8,你必須使用 Set 語句將結(jié)果賦值給一個 Range 對象,如下例所示 Set myRange = Application.InputBox(prompt := "Sample", type := 8下面的例子要求用戶輸入打印活動工作表的份數(shù)。 注

34、意 Type 參數(shù)表明此方法要求輸入數(shù)字。 Sub PrintActiveSheet(Dim TotalCopies As Long, NumCopies As LongDim sPrompt As String, sTitle As StringsPrompt = "How many copies do you want?"sTitle = "Prints the active sheet"TotalCopies = Application.InputBox(Prompt:=sPrompt, Title:=sTitle, Default:=1, Typ

35、e:=1For NumCopies = 1 To TotalCopiesActiveSheet.PrintOutNext NumCopiesEnd SubRun 方法Run 方法執(zhí)行一個宏或調(diào)用一個函數(shù)。你可以使用這個方法運行一個用 VBA 或 Excel 宏語 言寫的宏,或者運行一個動態(tài)鏈接庫(DLL 或 Excel 加載宏(XLL 中的函數(shù)。 XLL 是 Excel 的加載宏, 你可以使用任何支持創(chuàng)建 DLLs 的編譯器來創(chuàng)建它。 下面是此方法的語法: Run(Macro, Arg1, , Arg30Macro 是要執(zhí)行的宏或函數(shù)的名字。 Arg1到 Arg30是你需要傳遞給宏或函數(shù)的任何

36、參數(shù)。 下面的例子使用 Run 方法調(diào)用一個過程來設(shè)置一個范圍中單元格的字體為粗體。注意你也 可以使用 Call 方法來達(dá)到同樣的結(jié)果。Sub UseRunMethod(Dim wks As WorksheetDim rng As RangeSet wks = Worksheets("Sheet2"Set rng = wks.Range("A1:A10"Application.Run "MyProc ", rng' You could accomplish the same thing with:' Call MyPr

37、oc(rngEnd SubSub MyProc(rng As RangeWith rng.Font.Bold = TrueEnd WithEnd SubApplication 對象事件Application 對象也提供幾個事件讓你可以用來監(jiān)控整個 Excel 程序的動作。要使用Application 事件,你必須激活 Application 事件監(jiān)控。請按照以下步驟操作:1. 創(chuàng)建一個類。在 VBE 窗口中,單擊“插入” >“類模塊”2. 在“屬性”欄中,更改類的名稱為 appEventClass 。3. 在類模塊的代碼窗口,輸入 :Public WithEvents Apply As

38、Application現(xiàn)在 Application 級的事件可以使用了。4. 現(xiàn)在測試一下,在代碼窗口的對象列表中,單擊“ Apply ” 。5. 在代碼窗口中的過程列表中,單擊 Apply_WorkbookOpen. 這樣將在代碼窗口中添加一個 自動生成的過程用于 Apply_WorkbookOpen事件。6. 修改該過程如下:Private Sub Apply_WorkbookOpen(ByVal Wb As WorkbookMsgBox "你打開了工作簿。 "End Sub7. 重復(fù)以上步驟加入 Apply_WorkbookBeforeClose事件。修改該事件的代碼

39、如下:Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As BooleanMsgBox "你關(guān)閉了工作簿。 "End Sub8. 接著,創(chuàng)建一個變量用來代表在類模塊中創(chuàng)建的 Application 對象。在 VBA Project 的 Project 欄,雙擊 ThisWorkbook 節(jié)點打開代碼窗口。9. 加入下面的語句。Dim ApplicationClass As New AppEventClass通過在 ThisWorkbook 代碼窗口中添加以下過程來建立一個聲明的對象到 App

40、lication 對象的 關(guān)聯(lián)。Private Sub Workbook_Open(Set ApplicationClass.Appl = ApplicationEnd Sub10. 保存并關(guān)閉工作簿。11. 現(xiàn)在打開該工作簿來測試代碼。 Apply_WorkbookOpen事件將顯示對話框。12. 關(guān)閉工作簿, Apply_WorkbookBeforeClose將顯示對話框。13. 回到 AppEventClass 類模塊,單擊過程列表將顯示很多你可以在程序中用來監(jiān)控動作的 事件。理解事件怎樣被激發(fā)并以何種順序激發(fā)對理解你的程序很重要。在類模塊中加入其它事件, 并插入消息框,然后嘗試不同的動

41、作看看什么時候什么事件將被激活。Application 對象的其它用法除了一些常用的對象外,你還可以在 Excel 程序中使用 Application 對象的其它的一些功能。 下面討論部分用法。刪除工作表時不彈出提示窗口在下面的例子中,首先關(guān)閉任何詢問是否需要刪除工作表的警告消息框,然后刪除工作表, 再設(shè)置使警告消息框生效。Sub DeleteSheet(Application.DisplayAlerts = FalseActiveSheet.DeleteApplication.DisplayAlerts = TrueEnd Sub保存工作簿時無提示這個例子在保存工作簿時沒有提示用戶。Sub

42、SaveWorksheet(Application.DisplayAlerts = FalseActiveWorkbook.SaveAs "C:MonthlySales.xls"Application.DisplayAlerts = TrueEnd Sub使用 SendKeys 發(fā)送信息到 Notepad 程序下面的例子使用 SendKeys 語句從 Excel 語句中復(fù)制一個區(qū)域的數(shù)據(jù)到 Notepad 程序中,并 保存為文本文件。Sub SKeys(Range("A1:D15".Copy ' Copy the range.SendKeys &

43、quot;% n", True ' Minimize Excel.Shell "notepad.exe", vbNormalFocus ' Start Notepad.SendKeys "V", True ' Past the range data into Notepad.SendKeys "%FA", True ' Specify SaveAs.SendKeys "SalesData.txt", True ' Provide a file name.SendKe

44、ys "%S", True ' Save the file.Close notepadEnd Sub這個例子首先復(fù)制一個區(qū)域的數(shù)據(jù)到剪貼板,然后最小化 Excel ,啟動 Notepad ,然后從剪 貼板復(fù)制數(shù)據(jù)到 Notepad ,最后指定文件名并保存文件,再關(guān)閉 Notepad 。在指定時間或間隔運行一個宏你可以使用 Application 對象的 OnTime 方法在指定的時間或以固定時間間隔運行一個過程。 OnTime 方法的語法如下:Application.OnTime(EarliestTime, Procedure, LatestTime, Schedu

45、le參數(shù) EarliestTime 表示什么使用運行名稱為參數(shù) Procedure 的過程??蛇x參數(shù) LatestTime 和 Schedule 變量分別表示運行過程的最后時間和是否新建一個過程來運行還是取消現(xiàn)有的過 程。假如開始運行時 Excel 很忙,你需要指定一個時間范圍來調(diào)用過程時參數(shù) LatestTime 很有幫助。下面的示例每 5分鐘運行指定的過程 YourProcApplication.OnTime EarliestTime:= Now + TimeValue("00:05:00, _Procedure := "YourProc"下面的示例每天正午的

46、時候運行過程 YourProc.Application.OnTime _EarliestTime:=TimeValue("12:00:00", _Procedure:="YourProc"下面的示例每 5分鐘調(diào)用 AutoSave 過程。如果你關(guān)閉工作簿,調(diào)用 Cleanup 過程來取消前 面設(shè)置的 OnTime 。Private Sub Workbook_Open(Application.OnTime Now + TimeValue("00:05:00", "AutoSave"End SubPrivate Sub

47、 Workbook_BeforeClose(Cancel As BooleanOn Error Resume NextApplication.OnTime Now + TimeValue("00:05:00", "CleanUp", , FalseEnd Sub注意:Workbook_Open和 Workbook_BeforeClose事件包含在 Workbook 模塊中。 AutoSave 和 CleanUp 過程應(yīng)該位于標(biāo)準(zhǔn)模塊中。結(jié)論這篇文章僅介紹 Application 對象的一部分成員。還有其他成員讓你的用戶以新的方式同 Excel 程序交互和

48、改變你程序的外觀。 熟悉 Application 對象的使用將讓你按照你自己的要求 擴展和采用 Excel 的功能。moreWorkbook 對象 應(yīng)用示例 2009-12-29 21:37:01標(biāo)簽:vba WorkbookWorkbook 對象代表一個工作簿, Workbooks 集合對象則代表同一 Excel 進程中打開的所有 工作簿對象。使用 Add 方法在 Workbooks 集合中創(chuàng)建新工作簿,所創(chuàng)建的工作簿為活動工作簿。其語法 為:Workbooks.Add(Template參數(shù) Template 可選, 決定如何創(chuàng)建新工作簿。 如果將該參數(shù)設(shè)置為已存在的 Excel 模板文件

49、名稱, 那么將以該文件作為模板創(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)建一個新工作簿Sub

50、 CreateNewWorkbook1(MsgBox "將創(chuàng)建一個新工作簿 ."Workbooks.AddEnd Sub應(yīng)用示例 2:創(chuàng)建一個新工作簿并命名工作表且添加數(shù)據(jù)Sub CreateNewWorkbook2(Dim wb As WorkbookDim ws As WorksheetDim i As LongMsgBox "將創(chuàng)建一個新工作簿 , 并預(yù)設(shè)工作表格式 ."Set wb = Workbooks.AddSet ws = wb.Sheets(1ws.Name = "產(chǎn)品匯總表 "ws.Cells(1, 1 = &quo

51、t;序號 "ws.Cells(1, 2 = "產(chǎn)品名稱 "ws.Cells(1, 3 = "產(chǎn)品數(shù)量 "For i = 2 To 10ws.Cells(i, 1 = i - 1Next iEnd Sub應(yīng)用示例 3:創(chuàng)建帶有指定數(shù)量工作表的工作簿Sub testNewWorkbook(MsgBox "創(chuàng)建一個帶有 10個工作表的新工作簿 "Dim wb As WorkbookSet wb = NewWorkbook(10End SubFunction NewWorkbook(wsCount As Integer As Wor

52、kbook' 創(chuàng)建帶有由變量 wsCount 提定數(shù)量工作表的工作簿,工作表數(shù)在 1至 255之間Dim OriginalWorksheetCount As LongSet NewWorkbook = NothingIf wsCount < 1 Or wsCount > 255 Then Exit FunctionOriginalWorksheetCount = Application.SheetsInNewWorkbookApplication.SheetsInNewWorkbook = wsCountSet NewWorkbook = Workbooks.AddAppl

53、ication.SheetsInNewWorkbook = OriginalWorksheetCountEnd Function自定義函數(shù) NewWorkbook 可以創(chuàng)建最多帶有 255個工作表的工作簿。本測試示例創(chuàng)建一個 帶有 10個工作表的新工作簿。Open 方法用于打開一個現(xiàn)有的工作簿,其語法為:Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify,

54、 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 指定是否將工作簿添加到最近使用的文件 列表中,

55、建議將其設(shè)置為 True ,默認(rèn)值為 False 。應(yīng)用示例 4:以只讀方式打開某工作簿Sub openWorkbook2(Dim fname As StringMsgBox "將 D 盤中的 <測試 .xls>工作簿以只讀方式打開 "fname = "D:測試 .xls"Workbooks.Open Filename:=fname, ReadOnly:=TrueEnd Sub使用 Item 屬性返回 Workbooks 集合中特定的工作簿。例如:Workbooks.Item(1返回 Workbooks 集合中的第一個工作簿。由于 Item

56、屬性是缺省的屬性,因此上述代碼也可 以簡寫為:Workbooks(1然而, 使用索引號來指定工作簿是不可靠的, 最好使用工作簿的具體名稱來指定特定的工作 簿,例如:Workbooks("MyBook.xlsx"注意,當(dāng)用戶使用“新建”命令創(chuàng)建一個新工作簿(假設(shè)該工作簿系統(tǒng)默認(rèn)名稱為 Book2 時,在沒有保存該工作簿前,應(yīng)該使用下面的代碼指定該工作簿:Workbooks("Book2"此時,如果使用下面的代碼指定該工作簿:Workbooks("Book2.xlsx"將會產(chǎn)生運行時錯誤:下標(biāo)越界。使用 Activate 方法激活指定的工

57、作簿,例如: Workbooks("MyWorkbook".Activate使用 Workbooks 集合對象的 Count 屬性來 獲得當(dāng)前打開的工作簿數(shù),例如:Workbooks.Count如果工作簿以只讀方式打開,那么 ReadOnly 屬性的值為 True 。屬性使用 Workbook 對象的 Name 屬性可以返回工作簿的名稱。例如,下面的函數(shù)可以返回當(dāng)前 工作簿的名稱:Function MyName( As StringMyName = ThisWorkbook.NameEnd Function使用 Workbook 對象的 FullName 屬性可以返回工作簿

58、的路徑和名稱。例如,下面的函數(shù)可 以返回當(dāng)前工作簿的路徑和名稱:Function MyName( As StringMyName = ThisWorkbook.NameEnd Function使用 Workbook 對象的 Path 屬性可以返回工作簿文件的路徑。使用 Workbook 對象的 CodeName 屬性返回工作簿對象的代碼名。上述屬性均為只讀屬性。應(yīng)用示例 5:一些工作簿通用屬性示例Sub testGeneralWorkbookInfo(MsgBox "本工作簿的名稱為 " & ActiveWorkbook.NameMsgBox "本工作簿帶

59、完整路徑的名稱為 " & ActiveWorkbook.FullNameMsgBox "本工作簿對象的代碼名為 " & ActiveWorkbook.CodeNameMsgBox "本工作簿的路徑為 " & ActiveWorkbook.PathIf ActiveWorkbook.ReadOnly ThenMsgBox "本工作簿已經(jīng)是以只讀方式打開 "ElseMsgBox "本工作簿可讀寫 ."End IfIf ActiveWorkbook.Saved ThenMsgBox "本工作簿已保存 ."ElseMsgBox "本工作簿需要保存 ."End IfEnd Sub使用 Save 方法保存對工作簿所作的所有更改,其語法為:Workbook.Save應(yīng)用示例 6:保存已存在的所有工作簿Sub SaveAllWorkbooks(Dim wbk As WorkbookFor Each wbk In WorkbooksIf wbk.Path <> "" Then wbk.SaveNe

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論