EXCEL宏編程簡明教程有實例_第1頁
EXCEL宏編程簡明教程有實例_第2頁
EXCEL宏編程簡明教程有實例_第3頁
EXCEL宏編程簡明教程有實例_第4頁
EXCEL宏編程簡明教程有實例_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Excel 宏編程簡明教程一)、宏學(xué)習(xí)首先需要明確的是, 本文不可能教會您關(guān)于宏的所有內(nèi)容。 您需要學(xué)會利用 錄制宏的方法來學(xué)習(xí)宏:點擊Excel工具下拉菜單中宏下?quot;錄制新宏 ,此后可象平時一樣進行有關(guān)操作,待完成后停止錄制。然后再點擊 工具下 拉菜單中 宏下宏的編輯選項即可打開剛才所錄制的宏的 Visual Basic 源 程序,并且可以在此時的 幫助下拉菜單中獲得有關(guān)的編程幫助。 對錄制宏進行 修改不僅可以學(xué)習(xí)宏的使用,還能大大簡化宏的編寫。二)、基本概念為了學(xué)習(xí) Excel 中的宏,我們需要先了解以下一些基本概念。1、工作簿: Workbooks、Workbook、 Activ

2、eWorkbook 、ThisWorkbookWorkbooks集合包含Excel中所有當(dāng)前打開的Excel工作簿,亦即所有打開 的Excel文件;Workbook對應(yīng) Workbooks中的成員,即其中的 Excel文件; ActiveWorkbook 代表當(dāng)前處于活動狀態(tài)的工作簿,即當(dāng)前顯示的 Excel 文件; ThisWorkbook 代表其中有 Visual Basic 代碼正在運行的工作簿。在具體使用中可用 Workbooksndex)來引用 Workbook對象,其中index為 工作簿名稱或編號;如 Workbooks(1) 、Workbooks( 年度報表 .xls) 。而編

3、號按 照創(chuàng)建或打開工作簿的順序來確定,第一個打開的工作簿編號為 1,第二個打開 的工作簿為2。2、工作表: Worksheets、Worksheet、ActiveSheetWorksheets 集合包含工作簿中所有的工作表,即一個 Excel 文件中的所有 數(shù)據(jù)表頁;而 Worksheet 則代表其中的一個工作表; ActiveSheet 代表當(dāng)前處于 的活動狀態(tài)工作表,即當(dāng)前顯示的一個工作表。可用 Worksheetsndex)來引用 Worksheet對象,其中index為工作表名稱 或索引號;如 Worksheets(1) 、Worksheets( 第一季度數(shù)據(jù) ) 。工作表索引號表 明

4、該工作表在工作表標(biāo)簽中的位置:第一個(最左邊的)工作表的索引號為 1, 最后一個(最右邊的)為 Worksheets.Count 。需要注意的是: 在使用過程中 Excel 會自動重排工作表索引號, 保持按照其在工作表標(biāo)簽中的從左至右排列, 工作表 的索引號遞增。 因此,由于可能進行的工作表添加或刪除, 工作表索引號不一定 始終保持不變。3、圖表: Chart 、Charts 、ChartObject 、ChartObjects 、ActiveChartChart 代表工作簿中的圖表。 該圖表既可為嵌入式圖表 (包含在 ChartObject 中),也可為一個分開的(單獨的)圖表工作表。Cha

5、rts 代表指定工作簿或活動工作簿中所有圖表工作表的集合,但不包括 嵌入式在工作表或?qū)υ捒蚓庉嫳碇械膱D表。使用 Charts(index) 可引用單個 Chart 圖表,其中 index 是該圖表工作表的索引號或名稱; 如 Charts(1) 、Charts( 銷售圖表 ) 。圖表工作表的索引號表示圖表工作表在工作簿的工作表標(biāo)簽欄上的 位置。 Charts(1) 是工作簿中第一個(最左邊的)圖表工作表; Charts(Charts.Count) 為最后一個(最右邊的)圖表工作表。ChartObject 代表工作表中的嵌入式圖表, 其作用是作為 Chart 對象的容器。利用 ChartObjec

6、t 可以控制工作表上嵌入式圖表的外觀和尺寸。ChartObjects 代表指定的圖表工作表、對話框編輯表或工作表上所有嵌入 式圖表的集合。可由 ChartObjects(index) 引用單個 ChartObject ,其中 index 為嵌入式圖表的編號或名稱。如 Worksheets(Sheet1).ChartObjects(1) 、 Worksheets(sheet1).ChartObjects(chart1) 分別對應(yīng) Sheet1 工作表中的 第一個嵌入式圖表、以及名為 Chart1 的嵌入式圖表。ActiveChart 可以引用活動狀態(tài)下的圖表,不論該圖表是圖表工作表,或嵌 入式圖

7、表。 而對于圖表工作表為活動工作表時, 還可以通過 ActiveSheet 屬性引 用之。4、單元格: Cells 、 ActiveCell 、 Range、AreasCells(row,column) 代表單個單元格,其中 row 為行號, column 為列號。如 可以用 Cells(1,1) 、Cells(10,4) 來引用 A1 、D10 單元格。 ActiveCell 代表 活動工作表的活動單元格,或指定工作表的活動單元格。Ran ge代表工作表中的某一單元格、某一行、某一列、某一選定區(qū)域(該選 定區(qū)域可包含一個或若干連續(xù)單元格區(qū)域)或者某一三維區(qū)域。可用 Range(arg) 來引

8、用單元格或單元格區(qū)域,其中 arg 可為單元格號、單 元格號范圍、單元格區(qū)域名稱。如 Range(A5) 、 Range(A1:H8) 、Range(Criteria)。雖然可用Range(A1)返回單元格A1,但用Cells更方便, 因為此時可用變量指定行和列。可將 Range與 Cells 結(jié)合起來使用,如 Range(Cells(1,1),Cells(10,10)代表單元格區(qū)域 A1:J10 ;而 expression.Cells(row,column) 返回單元格區(qū)域中 的一部分,其中expression是返回Range的表達式,row和column為相對于該 區(qū)域的左上角偏移量。如由

9、 Range(C5:C10).Cells(1,1) 引用單元格 C5。Areas為選定區(qū)域內(nèi)的連續(xù)單元格塊的集合,其成員是Range對象。而其中的每個Range對象代表選定區(qū)域內(nèi)與其它部分相分離的一個連續(xù)單元格塊。某些 操作不能在選定區(qū)域內(nèi)的多個單元格塊上同時執(zhí)行; 必須在選定區(qū)域內(nèi)的單元格 塊數(shù) Areas.Count 上循環(huán), 對每個單獨的單元格塊分別執(zhí)行該操作。 此時, 可用 Areas(index)從集合中返回單個Range對象,其中index為單元格塊編號;如 Areas(1) 。5、行與列: Rows、 Columns、 Row、 ColumnRows Columns分別代表活動工

10、作表、單元格區(qū)域范圍 Range指定工作表 中的所有行數(shù)、列數(shù)。對于一個多選單元格區(qū)域范圍 Range的Rows Columns, 只返回該范圍中第一個區(qū)域的行數(shù)、列數(shù)。例如,如果 Ra nge對象有兩個區(qū)域(areas)A1:B2 和 C3:D4,Rows.Count返回 2 而不是 4??赏ㄟ^Rows行號)、Columns(列號)來引用相應(yīng)的行與列;女口 Rows(3)、 Columns(4)分別對應(yīng)第三行、D列。利用Rows Column可以獲得區(qū)域中第一塊的第一行行號、第一列列號,所得值 均以十進制數(shù)表示。三) 、處理單元格1 、直接賦值與引用 將變量、常量值直接賦給單元格、或?qū)卧?/p>

11、的值直接賦給變量、常量,這 是在 Excel 中最簡單的單元格賦值及引用方法。如下例將工作表 Sheet1A1 單 元格的值賦給Integer變量I,并將1+1的值賦給當(dāng)前工作表中的B1單元格:Dim I As IntegerI=Worksheets(Sheet1).Cells(1,1)Cells(1,2).Select 選定 B1 單元格,使其成為當(dāng)前單元格ActiveCell=I+1 以 I+1 為當(dāng)前單元格賦值2、用公式賦值在宏的使用中, 可能會更多地用公式來給單元格賦值。 如下例將相對于活動 單元格左側(cè)第 4 列、向上第 6 行至向上第 2 行的單元格數(shù)值之和賦給活動單元格 (以本行、

12、本列為第 0 行、0 列):ActiveCell.Formula=AVERAGE(R-6C-4:R-2C-4)3、引用其它工作表中的單元格 當(dāng)賦值公式中需要引用其它工作表中的單元格時, 在被引用的單元格前加上工作表名!即可。如以下即在賦值中引用了 Sheetl工作表中的A1至A4單元 格:Range(E10).Formula=SUM(Sheet1!R1C1:R4C1) 但需注意的是:當(dāng)被引用的工作表名中含有某些可能引起公式歧義的字符 時,需要用單引號 將工作表名括起來。如:Worksheets(Sheet1).ActiveCell.Formula=Max(1-1剖面!D3:D5)4、引用其它工

13、作簿中的單元格在被引用單元格所在工作表名前加上 工作簿名 ,即可引用其它工作簿中 的單元格。如:ActiveCell.Formula=MAX(Book1.xlsSheet3!R1C:RC4) 同樣需注意的是:當(dāng)被引用的工作簿名中含有某些可能引起公式歧義的字符時, 需要用中括號 、 及單引號 將工作簿名括起來。如:Cells(1,2).Formula=MIN(1995-2000 總結(jié).xls1995-1996 年! $A$1:$A$6)5、避免循環(huán)引用在上述公式賦值過程中, 應(yīng)避免在公式中引用被賦值的單元格, 防止循環(huán)引 用錯誤。6、添加批注可按如下方法格給單元格添加批注:Dim 批注文本 As

14、 String批注文本 = 批注示例 準(zhǔn)備批注文本ActiveCell.AddComment 添加批注ActiveCell.Comment.Text Text:= 臨時 寫入批注文本ActiveCell.Comment.Visible=False 7、添加、刪除、復(fù)制、剪切、粘貼單元格Range(D10).Insert Shift:=xlToRight 格,原D10格右移Range(C2).Insert Shift:=xlDown C2格下移Rows(2).EntireRow.InsertColumns(3).EntireColumn.Insert Columns(A:D).Delete Sh

15、ift:=xlToLeft 移隱藏批注在D10單元格處添加一新單元在C2單元格處添加一新單元格,原2 行下移C 列右移在第 2 行前添加一空白行,原第在 C 列前添加一空白列,原刪除A列至D列,其右側(cè)列左Rows(3:5).Delete Shift:=xlUp 刪除第 3 行至第 5 行,其下方行上移Range(B2).EntireRow.Delete 刪除第 2 行Range(C4).EntireColumn.Delete 刪除 C 列Range(B10:C13).Copy 復(fù)制 B10至 C13單元格區(qū)域Cells(1,2).Cut 剪切 B1 單元格Range(D10).SelectAc

16、tiveSheet.Paste 自D10單元格起粘貼剪貼板中的內(nèi)容四 ) 、圖表1 、工作表圖表以下為一添加工作表圖表的實例。Charts.Add after:=Worksheets(Sheet1) 在Sheet1工作表之后添加新 圖表工作表ActiveChart.ChartType=xlXYScatterSmooth 圖表類型為 XY平滑線散點圖 ActiveChart.SetSourceData Source:=Sheets( 結(jié)點坐標(biāo) ).Range(A1:B69), PlotBy:= _xlColumns 圖表數(shù)據(jù)來源于結(jié)點坐標(biāo)工作表的A1至B69單元格,且按列 繪圖。ActiveCh

17、art.Location Where:=xlLocationAsNewSheetWith ActiveChart.HasTitle = True.ChartTitle.Characters.Text = 節(jié)點坐標(biāo) 圖表標(biāo)題節(jié)點坐標(biāo) .Axes(xlCategory, xlPrimary).HasTitle = True.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text= x x軸標(biāo)題 x.Axes(xlValue, xlPrimary).HasTitle = True.Axes(xlValue, xlPrimary).AxisTitle

18、.Characters.Text = y y 軸標(biāo)題 yEnd With顯示 x 軸主網(wǎng)格線,默認情況下為顯示 顯示 x 軸次網(wǎng)格線,默認情況下為不顯標(biāo)出 x 軸主網(wǎng)格值,默認情況下為標(biāo)注 取消 x 軸次網(wǎng)格值標(biāo)注,默認情況下為With ActiveChart.Axes(xlCategory) .HasMajorGridlines = True .HasMinorGridlines = True 示End WithWith ActiveChart.Axes(xlValue) .HasMajorGridlines = True .HasMinorGridlines = False 不標(biāo)注End

19、WithActiveChart.Legend.Position = xlRight 圖例顯示在圖表右側(cè)2、嵌入式圖表 嵌入式圖表僅在添加方式及引用格式上與工作表圖表有所不同, 而對圖表的 設(shè)置基本類似。詳見下例。Set 嵌入表 =ActiveSheet.ChartObjects.Add(0,0,200,300) 在當(dāng)前工作表 (0,0) 坐標(biāo)處添加寬 200,高 300的嵌入式圖表嵌入表 .Chart.ChartType = xlColumnClustered 圖表類型為簇狀柱形圖嵌入表 .Chart.SetSourceData Source:=Sheets(1).Range(A2:B2),

20、PlotBy:=xlRows 設(shè)置圖表數(shù)據(jù)來源With 嵌入表 .Chart.HasTitle = False 無圖表標(biāo)題 .Axes(xlCategory, xlPrimary).HasTitle = False 無 x 軸標(biāo)題 .Axes(xlValue, xlPrimary).HasTitle = False 無 y 軸標(biāo)題 End With 五 ) 、工作表 1、添加Sheets.Add before:=Sheets(1) 在第 1 工作表前添加新工作表Sheets.Add after:=Sheets(Sheets.Count) 在最后工作表后添加新工作表 2、移動ActiveShee

21、t.Move before:=Sheets(2) 將當(dāng)前工作表移動至第 2 工作表之、八前3、命名ActiveSheet.Name= 工作表名 將當(dāng)前工作表命名為 工作表名 4、刪除 可以用以下語句刪除當(dāng)前工作表。ActiveSheet.Delete但在刪除前 Excel 會自動彈出提示框, 需在用戶確認后方可執(zhí)行刪除。 為避 免這一干擾,可以先用以下語句關(guān)閉 Excel 的警告提示。Application.DisplayAlerts = False 在刪除完成后,再重新打開 Excel 的警告提示Application.DisplayAlerts = True六) 、工作簿Excel 的宏對

22、工作簿的操作主要為保存。Dim 存盤文件名 As StringActiveWorkbook.Save 保存當(dāng)前工作簿 存盤文件名 =工作表名 ActiveWorkbook.SaveAs Filename:= 存盤文件名 當(dāng)前工作簿另存為 工 作表名 .xls在另存時, 若指定的存盤文件名不包含路徑, 則保存在該工作簿的打開目錄 下。而若此存盤文件已存在, 也可用關(guān)閉 Excel 警告提示的方法以免其自動彈出 提示框。64、用過VB的人都應(yīng)該知道如何聲明變量,在VBA中聲明變量和VB中是完全一 樣的! 使用 Dim 語句Dim a as integer聲明A為整形變量Dim a聲明A為變體變量D

23、im a as string聲明A為字符串變量Dim a,b,c as currency 聲明 A,b,c 為貨幣變量聲明變量可以是: Byte、 Boolean、 Integer 、 Long、 Currency、 Single 、 Double 、Decimal (當(dāng)前不支持)、 Date、String (只限變長字符串)、 String * length (定長字符串)、 Object 、Variant 、用戶定義類型或?qū)ο箢愋汀?強制聲明變量Option Explicit 說明:該語句必在任何過程之前出現(xiàn)在模塊中。 聲明常數(shù),用來代替文字值。Const 常數(shù)的默認狀態(tài)是 Private

24、 。Const My = 456 聲明 Public 常數(shù)。Public Const MyString = HELP 聲明 Private Integer 常數(shù)。Private Const MyInt As Integer = 5 在同一行里聲明多個常數(shù)。Const MyStr = Hello, MyDouble As Double = 3.4567在EXCEL9沖,有一個十分好的功能,他就是把鼠標(biāo)放置在一個有效數(shù)據(jù)單元格中, 執(zhí)行該段代碼, 你就可以將連在一起的一片數(shù)據(jù)全部選中。 只 要將該段代碼加入到你的模塊中。Sub My_SelectSelection.CurrentRegion.Se

25、lectEnd sub 刪除當(dāng)前單元格中數(shù)據(jù)的前后空格。sub my_trimTrim(ActiveCell.Value)當(dāng)前單元格向左移動一格當(dāng)前單元格向右移動一格0).Select 當(dāng)前單元格向下移動一格 , 0).Select當(dāng)前單元格向上移動一格end sub 使單元格位移 sub my_offsetActiveCell.Offset(0, 1).SelectActiveCell.Offset(0, -1).SelectActiveCell.Offset(1 ,ActiveCell.Offset(-1 end sub如果上述程序產(chǎn)生錯誤那是因為單元格不能移動, 為了解除上述錯誤, 我們

26、可以 往sub my_offset 之下加一段代碼 on error resume next 注意以下代碼都不再添加 sub “代碼名稱” 和 end sub 請自己添加 ! 給當(dāng)前單元格賦值:ActiveCell.Value = 你好! 給特定單元格加入一段代碼 :例如:在A1單元格中插入HELLO Range(a1).value=hello又如:你現(xiàn)在的工作簿在sheetl上,你要往sheet2的Al單元格中插入HELLO1. sheets(sheet2).select range(a1).value=hello或 2.Sheets(sheet1).Range(a1).Value = he

27、llo 說明:1. sheet2被打開,然后在將“ HELLO放入到A1單元格中。2. sheet2不被打開,將“ HELLO放入到A1單元格中。隱藏工作表隱藏SHEET這張工作表sheets(sheet1).Visible=False顯示SHEET這張工作表sheets(sheet1).Visible=True有時候我們想把所有的EXCEL中的SHEET都打印預(yù)覽,請使用該段代碼,它將在 你現(xiàn)有的工作簿中循環(huán),直到最后一個工作簿結(jié)束循環(huán)預(yù)覽。Dim my As WorksheetFor Each my In Worksheets my.PrintPreviewNext my得到當(dāng)前單元格的地

28、址msgbox ActiveCell.Address得到當(dāng)前日期及時間msgbox date & chr(13) & time保護工作簿ActiveSheet.Protect取消保護工作簿ActiveSheet.Unprotect給當(dāng)前工作簿改名為 liuActiveSheet.Name = liu打開一個應(yīng)用程序AppActivate (Shell(C:WINDOWSCALC.EXE)增加一個工作簿W(wǎng)orksheets.Add刪除當(dāng)前工作簿activesheet.delete打開一個文件Workbooks.Open FileName:=C:My DocumentsBook2.xls 關(guān)閉當(dāng)前

29、工作簿ActiveWindow.Close當(dāng)前單元格定為:左對齊Selection.HorizontalAlignment = xlLeft當(dāng)前單元格定為:中心對齊Selection.HorizontalAlignment = xlCenter當(dāng)前單元格定為:右對齊Selection.HorizontalAlignment = xlRight當(dāng)前單元格為百分號風(fēng)格Selection.Style = Percent當(dāng)前單元格字體為粗體 Selection.Font.Bold = True 當(dāng)前單元格字體為斜體 Selection.Font.Italic = True 當(dāng)前單元格字體為宋體 20

30、號字 With Selection.Font .Name = 宋體 .Size = 20 End With With 語句 With 對象. 描述 End With 讓你的機器發(fā)出響聲 BEEP 清除單元格中所有文字、批注、格式、所有的東西! ActiveCell.Clear 測試選擇狀態(tài)的單元格的行數(shù) MsgBox Selection.Rows.Count 測試選擇狀態(tài)的單元格的列數(shù) MsgBox Selection.Columns.Count 測試選擇狀態(tài)的單元格的地址 Selection.Address 讓所有的錯誤不再發(fā)生 ON ERROR RESUME NEXT 產(chǎn)生錯誤時讓錯誤轉(zhuǎn)到

31、另一個地方 on error goto l code l: code 刪除一個文件 kill c:1.txt 定制自己的狀態(tài)欄 Application.StatusBar = 現(xiàn)在時刻 : & Time恢復(fù)自己的狀態(tài)欄 Application.StatusBar = false 在運行期執(zhí)行一個宏 Application.Run macro:=text 滾動窗口到 a1 的位置 ActiveWindow.ScrollRow = 1 ActiveWindow.ScrollColumn = 1 定制系統(tǒng)日期 Dim MyDate, MyDay MyDate = #12/12/69#MyDay =

32、Day(MyDate)今天的年限D(zhuǎn)im MyDate, MyYearMyDate = DateMyYear = Year(MyDate)MsgBox MyYear產(chǎn)生一個 inputboxInputBox (Enter number of months to add) 得到一個文件名:Dim kk As Stringkk = Application.GetOpenFilename(EXCEL (*.XLS), *.XLS, Title:= 提示: 請打開一個EXCEL文件:)msgbox kk打開zoom顯示比例對話框Application.Dialogs(xlDialogZoom).Show

33、激活字體對話框Application.Dialogs(xlDialogActiveCellFont).Show打開另存對話框Dim kk As Stringkk = Application.GetSaveAsFilename(excel (*.xls), *.xls)Workbooks.Open kk 此段代碼尋找字符串中特定字符的位置, 需要建立一個窗體, 并在窗體中, 放入TEXTBOX1,TEXTBO和2TEXTBOX3(個文本框)及 COMMANDBUTT按鈕()Private Sub CommandButton1_Click()a = TextBox1.Textb = TextBox

34、2.Textaa = Len(a)i = 1Dim YY As StringIf b = Then Exit SubDoIf InStr(i, a, b, vbTextCompare) = 0 Then Exit Dokk = InStr(i, a, b, vbTextCompare)YY = YY & CStr(kk) & /i = kk + 1Loop While aa = iTextBox3.Text = YYEnd SubActiveX 控件在 Excel97 中的運用Excel97 在工作表或圖表上可使用 ActiveX 控件,根據(jù)我使用的體 會,在工作上處理控件時,必須注意和了解如

35、下事 項:( 一)用 Excel5.0/95 工作簿文件格式保存 Excel97 工作簿時,將選擇 ActiveX 控件信息。 當(dāng)用戶通過雙 擊鼠標(biāo)來編輯內(nèi)嵌在其它應(yīng)用程序文檔中的 Excel97 工作簿時,該工作簿上的控 件將不會正常工作。 如果用戶是通過用右鍵單擊工作簿, 然后選中快捷菜單上的 “打開”命令來編輯工作簿的話,工作簿上的控件就能正常工作了。(二)當(dāng)ActiveX控件處于激活狀態(tài)時,將禁用某些 MicrosoftExcelVisualBasic 方法和屬性。例如,當(dāng)某一控件激活時,就不能使 用 Sort 方法,故下述按鈕單擊事件處理過程中的代碼將失敗 ( 因為用戶單擊按鈕 后,

36、該按鈕就處于激活狀態(tài) ) 。PrivateSubCommandButton1 ClickRange( a1:a10) SortKey1:=Range( aT)EndSub 解決辦法是通過選激活工作表上其它元素的方法來繞過這種問題。 例如,可用下列代碼對單元格區(qū)域排序:PrivateSubCommandButton1 ClickRange( aT ) ActivateRan ge( a1:a10) SortKey1:=Ra nge( aT)CommandButton1 ActivateEnd Sub(三)在 MicrosoftExcel 中,用 OLEObjects 集合中的 OLEObject

37、對象 代表 ActiveX 控件。如果要用編程的方式向工作表添加 ActiveX 控件,可用 OLEObjects集合的Add方法。例如向第一張工作表添加命令按鈕。Worksheets(1) OLEObjects Add Forms CommandButton 1, _ Left:=10,Top:=10,Height:=20,Width:=100因為ActiveX 控件也可用 OLEObjects集合中的OLEObject對象代 表,所以也可用該集合中的對象來設(shè)置控件的屬性。例如要設(shè)置控件“ Comma ndBotto n1的“左邊位置”屬性。Worksheets(1) OLEObjects(

38、 CommandButton 1 ) Left=10 那些不屬于OLEObject對象屬性的控件屬性,可通過由Object屬性 返回的實際控件對象來設(shè)置。例如要設(shè)置控件“Comma ndButt on1的標(biāo)題。Worksheets(1) OLEObjects( CommandButton1 ) Object Caption= runme因為所有的OLE對象也是Shapes集合的成員,所以也可用該集合設(shè) 置若干控件的屬性。例如要對齊第一張工作表上所有控件的左邊框。ForEachsInWorksheets(1) ShapesIfs Type=msoOLEControlObjectThens Lef

39、t=10Next 請注意,當(dāng)在控件所在工作表的類模塊之外使用控件的名稱時,必 須用工作表的名稱限定該控件的名稱。 在工作表上 ActiveX 控件的事件處理過程 中,Me關(guān)鍵字所指向的是工作表,而非控件在Excel中利用VBA創(chuàng)建多級選單Excel 是我們常用的報表處理軟件之一, 對于大多數(shù)人來說只是使用它進行打印 報表,沒有注意其他功能,其實利用 Excel 內(nèi)嵌的 VBA 語言完全可以快速開發(fā) 出自己企業(yè)的應(yīng)用系統(tǒng)來, 而且應(yīng)用系統(tǒng)界面與其它專業(yè)編程語言相當(dāng)相似。 下 面筆者簡單通過一個實例說明如何利用 VBA創(chuàng)建多級選單。首先,我們對 Excel 中兩個重要的內(nèi)置函數(shù) auto_open

40、() 和 auto_close() 作一簡單說明。auto_open() :在打開工作簿時系統(tǒng)將自動執(zhí)行該函數(shù), 因此我們可以在該函數(shù) 中調(diào)用自己應(yīng)用程序的選單函數(shù)以及其它需要初始化設(shè)置的函數(shù)及宏語句; auto_close() :在關(guān)閉工作簿時系統(tǒng)將自動執(zhí)行該函數(shù)。 所以我們需要在該函數(shù) 中放置刪除用戶自定義選單語句,否則只有退出Excel才能恢復(fù)EXCE的系統(tǒng)選 單。在以下語句中,我們定義了選單設(shè)置函數(shù)OpenMyMenu(,用于設(shè)置多級選單,其他有關(guān)說明見程序內(nèi)注釋,詳細代碼如下:Sub Ope nM yMe nu()自定義多級選單函數(shù)On Error Resume Next 忽略錯誤M

41、en uBars(MyMe nu).Delete 刪除自定義選單MenuBars.Add (MyMenu)自定義選單項Sheets(sheet1).SelectMenuBars(MyMenu).Menus.Add Caption:= 金融增加第一個選單項“金融”以下三句為在“金融”選單下增加“銀行法、貨幣政策和條例”三項選單項Men uBars(MyMe nu ).Me nus(金融).Me nultems.Add Cap ti on :二銀行法,OnAction:= 銀行法MenuBars(MyMenu).Menus(金融).Menultems.Add Caption:二貨幣政策,OnAct

42、ion:= 貨幣政策Men uBars(MyMe nu ).Me nus(” 金融).Me nultems.Add Cap ti on :二條例, OnAction:= 條例以下為創(chuàng)建如圖所示的多級選單MenuBars(MyMenu).Menus.Add Caption:= 經(jīng)濟 建立選單項“經(jīng)濟”以下三句為在“經(jīng)濟”選單下增加“農(nóng)業(yè)、工業(yè)和第三產(chǎn)業(yè)”三項選單項Men uBars(MyMe nu ).Me nus(” 經(jīng)濟).Me nultems.Add Cap ti on :二農(nóng)業(yè), OnAction:= 農(nóng)業(yè)Men uBars(MyMe nu ).Me nus(經(jīng)濟).Me nultems

43、.Add Cap ti on :二工業(yè), OnAction:= 工業(yè)Men uBars(MyMe nu ).Me nus(” 經(jīng)濟).Me nultems.AddMe nu Captio n:=第三產(chǎn)業(yè)II以下三句為在“第三產(chǎn)業(yè)”選單下增加“概況、 范疇”二項選單項和“飲食服 務(wù)業(yè)”子選單第三產(chǎn)業(yè) ).Menultems.Add第三產(chǎn)業(yè) ).Menultems.Add第三產(chǎn)業(yè)1、酒店 2”二項選單項第三產(chǎn)業(yè) ).Menultems( 飲Men uBars(MyMe nu).Me nus(經(jīng)濟).Me nultems( Caption:= 概況, OnAction:= 概況Men uBars(M

44、yMe nu).Me nus(經(jīng)濟).Me nultems(Caption:= 范疇, OnAction:= 范疇Men uBars(MyMe nu).Me nus(經(jīng)濟).Me nultems( ).Menultems.AddMenu Caption:= 飲食服務(wù)業(yè) 以下二句為在“飲食服務(wù)業(yè)”選單下增加“酒店Men uBars(MyMe nu).Me nus(經(jīng)濟).Me nultems(食服務(wù)業(yè) ).Menultems.Add Caption:= 酒店 1, OnAction:= 酒店 1MenuBars(MyMenu).Menus(經(jīng)濟).Menultems(第三產(chǎn)業(yè)).Menultem

45、s(飲食服務(wù)業(yè) ).Menultems.Add Caption:= 酒店 2, OnAction:= 酒店 2Men uBars(MyMe nu ).A ctivate激活自定義選單End SubSub auto_ope n()系統(tǒng)自動打開運行宏OpenMyMenU調(diào)用用戶選單函數(shù)End SubSub auto_close()系統(tǒng)自動關(guān)閉運行宏On Error Resume Next 忽略錯誤Men uBars(MyMe nu).Delete 刪除自定義選單End Sub讀者可以在自己的工作簿選單“工具”中的“宏”下, 創(chuàng)建以上三個函數(shù)并將以 上函數(shù)語句拷貝到其中即可運行。66、.用VBA編程

46、)保護Excel文檔VBA(Visual Basic for Application)是 Excel 應(yīng)用程序中功能非常強大的編程語言,為了規(guī)范不同的用戶對 Excel 應(yīng)用程序的訪問能力,需要對 Excel 文檔及有關(guān)的數(shù)據(jù)進行有效的保護, 這里根據(jù)自己及同行們的體會,從以下二 個方面介紹用VBA編程法實現(xiàn)對Excel文檔的保護。對工作簿的保護1. 利用VBA中Workbook對象的SaveAs方法實現(xiàn)對工作簿的保護,下面就對SaveAs有關(guān)的參量作一介紹:File name :該字符串表示要保存的文件名。可包含完整路徑。如果不指定路徑, Microsoft Excel 將文件保存到當(dāng)前文件

47、夾。FileFormat : 可選,文件的保存格式。Password :為一個區(qū)分大小寫的字符串(不超過 15個字符) ,用于指定文件 的保護密碼。WriteResPassword: 該字符串表示文件的寫保護密碼。 如果文件保存時帶有密 碼,但打開文件時不輸入密碼,則該文件以只讀模式打開。ReadOnlyRecommended如果為True則在打開文件時顯示一條信息,提示該文 件以只讀模式打開。下例就是在 Excel 應(yīng)用程序中添加一工作簿,將工作簿按常規(guī)文件格式存為“C:經(jīng)濟評價.xls ”文件,并給該文件指定保護密碼“ 12”以及寫保護密碼“ 23”。Sub 保護工作簿()NewWorkb

48、ook = Workbooks.add經(jīng)濟評價 .xls, FileFormat: = XINormal,Password:=12,WriteResPassword:= 23End sub2. 利用VBA中Workbook對象的Protect方法對工作簿的結(jié)構(gòu)和窗口進行保護,Workbook對象的Protect方法帶有以下三個參量:Password: 為加在工作表或工作簿上區(qū)分大小寫的密碼字符串。 如果省略本參 數(shù),不用密碼就可以取消對該工作簿的保護。 否則,取消對該工作表或工作簿的 保護時必須提供該密碼。 如果忘記了密碼, 就無法取消對該工作表或工作簿的保 護。最好在安全的 地方保存一份密碼

49、及其對應(yīng)文檔名的列表。Structure : 若為 True 則保護工作簿結(jié)構(gòu)(工作簿中工作表的相對位置)。默 認值為 False。Windows 若為 True 則保護工作簿窗口。下例就是對一名為“經(jīng)濟評價 .xls ”的工作簿實現(xiàn)“結(jié)構(gòu)”和“窗口”保護: Sub 保護工作簿()Workbooks (經(jīng)濟評價).Protect Password: =1234, Structure: =True, Windows:=TrueEnd subWorkbook對象的Un protect方法用于取消對工作簿的保護。Un protect方法只有 一個參量,就是保護工作表時所用的口令。3. 對工作簿進行隱

50、藏保護,可使他人無法看到其對應(yīng)的窗口。操作方法如下:在VBA中使用 Workbook對象下面的 Windows對象的Visible 屬性對工作簿進行 隱藏和取消隱藏,Visible屬性的值可取“ True”和“ False ”兩種。 下面程序代碼完成對工作簿“ book.xls ”的隱藏:Sub 隱藏工作簿()Workbooks(book).ActivateActiveWindow.Visible = FalseEnd sub或:Sub 隱藏工作簿()Workbooks(book).Windows (1) .Visible=FalseEnd sub對工作表的保護1. 對工作表實現(xiàn)口令保護利用

51、VBA調(diào)用Worksheet對象的Protect方法對工作 表進行保護, Protect 帶有以下參量:Password 用于保護工作表的口令。Draw in gobjects 若為True ,則對工作表中的 Drawi ngobjects 對象進行保護,缺 省值為 True。Contents若為True,則對單元格內(nèi)容進行保護,缺省值為 True。 下面程序代碼完成對工作表“基礎(chǔ)數(shù)據(jù)表”的保護:Sub 保護工作表()Worksheets (基礎(chǔ)數(shù)據(jù)表).Protect Password:=1234End sub2. 對工作表實現(xiàn)隱藏保護,使他人無法看到工作表:利用VBA設(shè)置Worksheet

52、對象的Visible屬性來隱藏工作表;Visible屬性的值 為以下三個值中的一個:True 工作表為顯示狀態(tài)。False 工作表為隱藏狀態(tài)。XlVerHidden 工作表為隱藏狀態(tài), 且用戶不能通過“取消隱藏”對話框?qū)⑵涓臑?顯示狀態(tài)。當(dāng)Visible的值為XlVerHidden時,只能利用VBA將其重新設(shè)置為True。Sub 隱藏工作表()Worksheets( 基礎(chǔ)數(shù)據(jù)表 ).Visible=FalseEnd sub67、求: 將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為 萬元的最簡代碼 . 求:將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為 萬元的最簡代碼 .或能完成此功能的最便捷的命令操作 .寫了一個 ,拋磚引玉 :

53、Sub convt()Dim cel As RangeDim dec As VariantApplication.EnableEvents = Falseyesorno = MsgBox( 確實將區(qū)域所有數(shù)值轉(zhuǎn)換為“萬元”? , vbYesNo + vbQuestion + vbDefaultButton1)If yesorno = vbYes Then1: dec = Application.InputBox( 請輸入小數(shù)位數(shù) :, Default:=0, Type:=1)If dec = ThenGoTo 1End IfFor Each cel In SelectionIf IsNumer

54、ic(cel.Value) Thencel = (Round(cel.Value / 10000, 2) & 萬元 cel = (Round(cel.Value / 10000, dec)End IfNextElseIf yesorno = vbNo ThenExit SubEnd IfEnd Sub以下當(dāng)為最簡代碼吧 .Sub Macro2()Selection.NumberFormatLocal = #.#,End Sub68、在VBA開發(fā)環(huán)境中,點擊工具附加控件,出現(xiàn)如下窗口: 在可選控件中選擇 microsoft orogressbar control, 再點擊確定,這時,你會 發(fā)現(xiàn)在你的工具箱中增加了進度條工具,如圖:下面說說進度條的用法:屬性: Max:設(shè)置進度條控件的最大值Min :設(shè)置進度條控件的最小值Value :設(shè)置進度條控件對象的當(dāng)前值Scrolling: 進度條的式樣,即一格一格的進度條或是沒有間隔的進度 條。例子: Private Sub UserForm_Activa

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論