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

下載本文檔

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

文檔簡介

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

2、還能大大簡化宏的編寫.二) 、根本概念為了學(xué)習(xí)Excel中的宏,我們需要先了解以下一些根本概念.1、工作簿:Workbooks、Workbook ActiveWorkbook、ThisWorkbookWorkbooks集合包含Excel中所有當(dāng)前翻開的Excel工作簿,亦即所有翻開的 Excel文件;Workbook對應(yīng) Workbooks中的成員,即其中的Excel文件; ActiveWorkbook代表當(dāng)前處于活動狀態(tài)的工作簿,即當(dāng)前顯示的Excel文件; ThisWorkbook代表其中有Visual Basic 代碼正在運行的工作簿.在具體使用中可用 Workbooks(index)來

3、引用 Workbook對象,其中index為工 作簿名稱或編號;如Workbooks(l)、Workbooks("年度報表.xls").而編號根據(jù)創(chuàng) 建或翻開工作簿的順序來確定,第一個翻開的工作簿編號為1,第二個翻開的工作簿 為2.2、工作表:Worksheets、Worksheet> ActiveSheetWorksheets集合包含工作簿中所有的工作表,即一個Excel文件中的所有數(shù) 據(jù)表貞;而Worksheet那么代表其中的一個工作表;ActiveSheet代表當(dāng)前處于的活動 狀態(tài)工作表,即當(dāng)前顯示的一個工作表.可用 Worksheets(index)來引用 W

4、orksheet對象,其中index為工作表名稱或 索引號;如Worksheets(l)、Worksheets(-第一季度數(shù)據(jù)").工作表索引號說明該 工作表在工作表標(biāo)簽中的位置:第一個(最左邊的)工作表的索引號為1,最后一個 (最右邊的)為Worksheets.Count.需要注意的是:在使用過程中Excel會自動重排 工作表索引號,保持根據(jù)其在工作表標(biāo)簽中的從左至右排歹0,工作表的索引號遞增.因此,由于可能進(jìn)行的工作表添加或刪除,工作表索引號不一定始終保持不變.3、圖表:Chart 、Charts、ChartObject、ChartObjects、ActiveChartChart

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

6、.ChartObject代表工作表中的嵌入式圖表,其作用是作為Chart對象的容器. 利用ChartObject可以限制工作表上嵌入式圖表的外觀和尺寸.ChartObjects代表指定的圖表工作表、對話框編輯表或工作表上所有嵌入式 圖表的集合.可由 ChartObjects(index) 引用單個ChartObject,其中index 為嵌 入式圖表的編號或名稱.如 Worksheets("Sheet1").ChartObjects(1) 、 Worksheets("sheetT').ChartObjects("chart1")分別對應(yīng)

7、"Sheet1"工作表中的第一個嵌入式圖表、以及名為"Chartl"的嵌入式圖表.ActiveChart可以引用活動狀態(tài)下的圖表,不管該圖表是圖表工作表,或嵌入 式圖表.而對于圖表工作表為活開工作表時,還可以通過ActiveSheet屆性引用 之.4、單元格:Cells、ActiveCell、Rangg AreasCells(row,column) 代表單個單元格,其中row為行號,column為歹U號.如可 以用 Cells(1,1) 、Cells(10,4) 來引用"A1"、"D10"單元格.ActiveCel

8、l 代表活動 工作表的活動單元格,或指定工作表的活動單元格.Range代表工作表中的某一單元格、某一行、某一歹0、某一選定區(qū)域 (該選定 區(qū)域可包含一個或假設(shè)十連續(xù)單元格區(qū)域)或者某一三維區(qū)域.可用Range(arg)來引用單元格或單元格區(qū)域,其中arg可為單元格號、單元 格號范圍、單元格區(qū)域名稱.如 Range("A5")、Range("A1:H8")、Range("Criteria").雖然可用Range("A1")返回單元格A1,但用Cells更方 便,由于此時可用變量指定行和列.可將 Range與 Cell

9、s 結(jié)合起來使用,如 Range(Cells(1,1),Cells(10,10) 代 表單元格區(qū)域"A1:J10"而expression.Cells(row,column) 返回單元格區(qū)域中的一 局部,其中expression是返回Range的表達(dá)式,row和column為相對于該區(qū)域的左 上角偏移量.如由Range("C5:C10").Cells(1,1) 引用單元格C5Areas為選定區(qū)域內(nèi)的連續(xù)單元格塊的集合,其成員是Range對象.而其中的 每個Range對象代表選定區(qū)域內(nèi)與其它局部相別離的一個連續(xù)單元格塊.某些操作 不能在選定區(qū)域內(nèi)的多個單元格

10、塊上同時執(zhí)行;必須在選定區(qū)域內(nèi)的單元格塊數(shù) Areas.Count上循環(huán),對每個單獨的單元格塊分別執(zhí)行該操作.此時,可用Areas(index)從集合中返回單個 Range對象,其中index為單元格塊編號;如 Areas(1).5、行與歹U :Rows、Columns Row ColumnRows Columns分別代表活開工作表、單元格區(qū)域范圍Range指定工作表中的所有行數(shù)、歹0數(shù).對于一個多項選擇單元格區(qū)域范圍Range的Rows Columns,只返回該范圍中第一個區(qū)域的行數(shù)、歹0數(shù).例如,如果Range對象有兩個區(qū)域 (areas)A1:B2 和 C3:D4,Rows.Count

11、返回 2 而不是 4.可通過Rows亍號)、Columns(歹0號)來引用相應(yīng)的行與歹U ;如Rows(3)、 Columns(4)分別對應(yīng)第三行、D歹0.利用Rows Column可以獲得區(qū)域中第一塊的第一行行號、第一列列號,所得值均以十進(jìn)制數(shù)表小.三) 、處理單元格1、直接賦值與引用將變量、常量值直接賦給單元格、或?qū)卧竦闹抵苯淤x給變量、常量 ,這是 在Excel中最簡單的單元格賦值及引用方法.如下例將工作表"Sheet1"A1單元格的值賦給Integer變量I,并將I+1的值賦給當(dāng)前工作表中的 B1單元格:Dim I As IntegerI=Worksheets(&

12、quot;Sheet1").Cells(1,1)Cells(1,2).Select ' 選定B1單元格,使其成為當(dāng)前單元格ActiveCell=I+1 ' 以I+1為當(dāng)前單元格賦值2、用公式賦值在宏的使用中,可能會更多地用公式來給單元格賦值.如下例將相對于活動單 元格左側(cè)第4列、向上第6行至向上第2行的單元格數(shù)值平均值賦給活動單元格 (以本行、本列為第0行、0列):ActiveCell.Formula="=AVERAGE(R-6C-4:R-2C-4)"3、引用其它工作表中的單元格當(dāng)賦值公式中需要引用其它工作表中的單元格時,在被引用的單元格前加上&q

13、uot; 工作表名!即可.如以下即在賦值中引用了 "Sheetl"工作表中的A1至A4單元格:Range("E10").Formula="=SUM(Sheet1!R1C1:R4C1)"但需注意的是:當(dāng)被引用的工作表名中含有某些可能引起公式歧義的字符時,需要用單引號'將工作表名括起來.如:Worksheets("Sheet1").ActiveCell.Formula="=Max('1-1 剖面'!D3:D5)"4、引用其它工作簿中的單元格在被引用單元格所在工作表名前加上&q

14、uot;工作簿名",即可引用其它工作簿中的 單元格.如:ActiveCell.Formula="=MAX(Book1.xlsSheet3!R1C:RC4)"同樣需注意的是:當(dāng)被引用的工作簿名中含有某些可能引起公式歧義的字符時 需要用中括號""、""及單引號將工作簿名括起來.如:Cells(1,2).Formula="=MIN('1995-2000 總結(jié).xls1995-1996 年'!$A$1:$A$6)"5、預(yù)防循環(huán)引用在上述公式賦值過程中,應(yīng)預(yù)防在公式中引用被賦值的單元格,預(yù)防循環(huán)引用

15、 錯誤.6、添加批注可按如下方法格給單元格添加批注:Dim批注文本As String批注文本=批注例如"'準(zhǔn)備批注文本ActiveCell.AddComment '添加批注ActiveCell.Comment.Text Text:= 臨時'寫入批注文本ActiveCell.Comment.Visible=False ' 隱藏批注7、添加、刪除、復(fù)制、剪切、粘貼單元格Range("D10").Insert Shift:=xlToRight ' 在 D10單元格處添加一新單元格, 原D10格右移Range("C2&qu

16、ot;).Insert Shift:=xlDown ' 在 C2單元格處添加一新單元格,原 C2 格下移Rows(2).EntireRow.Insert ' 在第2行前添加一空白行,原第2行下移刪除A列至D列,其右側(cè)列左移Columns.EntireColumn.Insert '在C歹0前添加一空白歹U ,原C歹U右移Columns("A:D").Delete Shift:=xlToLeft 'Rows("3:5").Delete Shift:=xlUp ' 刪除第3行至第5行,其下方行上移 Range("

17、;B2").EntireRow.Delete ' 刪除第 2 行Range("C4").EntireColumn.Delete ' 刪除 C列Range("B10:C13").Copy '復(fù)制 B10至 C13單元格區(qū)域Cells(1,2).Cut ' 剪切 B1 單元格Range("D10").SelectActiveSheet.Paste ' 自D10單元格起粘貼剪貼板中的內(nèi)容四) 、圖表1、工作表圖表以下為一添加工作表圖表的實例.Charts.Add after:=Workshe

18、ets("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單元格,且按列繪ActiveChart.Location Where:=xlLocationA

19、sNewSheetWith 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(xlVa

20、lue, xlPrimary).AxisTitle.Characters.Text = "y" 'y軸標(biāo)題"y"End WithWith ActiveChart.Axes(xlCategory).HasMajorGridlines = True ' 顯示x軸主網(wǎng)格線,默認(rèn)情況下為顯示.HasMinorGridlines = True ' 顯示x軸次網(wǎng)格線,默認(rèn)情況下為不顯示End WithWith ActiveChart.Axes(xlValue).HasMajorGridlines = True ' 標(biāo)出x軸主網(wǎng)格值,默

21、認(rèn)情況下為標(biāo)注.HasMinorGridlines = False ' 取消x軸次網(wǎng)格值標(biāo)注,默認(rèn)情況下為不標(biāo)注End 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 

22、9; 圖表類型為簇狀柱形圖嵌 入表.Chart.SetSourceData Source:=Sheets(1).Range("A2:B2), 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:=S

23、heets(1)' 在第1工作表前添加新工作表Sheets.Add after:=Sheets(Sheets.Count)'在最后工作表后添加新工作2、移動ActiveSheet.Move before:=Sheets(2)'將當(dāng)前工作表移動至第 2工作表之、人刖3、命名ActiveSheet.Name="工作表名"'將當(dāng)前工作表命名為"工作表名"4、刪除可以用以下語句刪除當(dāng)前工作表.ActiveSheet.Delete但在刪除前Excel會自動彈出提示框,需在用戶確認(rèn)前方可執(zhí)行刪除.為預(yù)防這一十?dāng)_,可以先用以下語句關(guān)閉E

24、xcel的警告提示.Application.DisplayAlerts = False在刪除完成后,再重新翻開Excel的警告提示Application.DisplayAlerts = True六) 、工作簿Excel的宏對工作簿的操作主要為保存.Dim存盤文件名As StringActiveWorkbook.Save '保存當(dāng)前工作簿存盤文件名=工作表名"ActiveWorkbook.SaveAs Filename:=存盤文件名'當(dāng)前工作簿另存為"工作表名.xls"在另存時,假設(shè)指定的存盤文件名不包含路徑,那么保存在該工作簿的翻開目錄下.而假設(shè)此

25、存盤文件已存在,也可用關(guān)閉Excel警告提示的方法以免其自動 彈出提示框.64、用過VB的人都應(yīng)該知道如何聲明變量,在VBA中聲明變量和VB中是完全 一樣的!使用Dim語句Dim a as integer ' 聲明A為整形變量Dim a '聲明A為變體變量Dim 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只限變長字符申、

26、String * length 定長字符申、Object > Variant、用戶定義類型或?qū)ο箢愋?強制聲明變量Option Explicit說明:該語句必在任何過程之前出現(xiàn)在模塊中聲明常數(shù),用來代替文字值.Const,常數(shù)的默認(rèn)狀態(tài)是Private.Const My = 456,聲明Public 常數(shù).Public Const MyString = "HELP"'聲明 Private Integer 常數(shù).Private Const MyInt As Integer = 5'在同一行里聲明多個常數(shù).Const MyStr = "Hello

27、", MyDouble As Double = 3.4567在EXCEL9沖,有一個十分好的功能,他就是把鼠標(biāo)放置在一個有效數(shù)據(jù)單元 格中,執(zhí)行該段代碼,你就可以將連在一起的一片數(shù)據(jù)全部選中.只要將該段代碼加 入到你的模塊中.Sub My_SelectSelection.CurrentRegion.SelectEnd sub刪除當(dāng)前單元格中數(shù)據(jù)的前后空格.sub my_trimTrim(ActiveCell.Value)end sub使單元格位移當(dāng)前單元格向左移動一格當(dāng)前單元格向右移動一格當(dāng)前單元格向下移動一格當(dāng)前單元格向上移動一格sub my_offsetActiveCell.Of

28、fset(0, 1).Select'ActiveCell.Offset(0, -1).Select'ActiveCell.Offset(1 , 0).Select'ActiveCell.Offset(-1 , 0).Select'end sub如果上述程序產(chǎn)生錯誤那是由于單元格不能移動,為了解除上述錯誤,我們可以往sub my_offset 之下加一段代碼 on error resume next注意以下代碼都不再添加 sub “代碼名稱和end sub請自己添加!給當(dāng)前單元格賦值:ActiveCell.Value =" 你好!給特定單元格參加一段代碼

29、:例如:在A1單元格中插入"HELLO"Range("a1").value="hello"乂如:你現(xiàn)在的工作簿在sheetl上,你要往sheet2的A1單元格中插入"HELLO"1.sheets("sheet2).selectrange("a1").value="hello"或 2.Sheets("sheet1).Range("a1).Value = "hello"說明:1. sheet2被翻開,然后在將“ HELLO放入到A

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

31、ActiveCell.Address得到當(dāng)前日期及時間msgbox date & chr(13) & time保護(hù)工作簿ActiveSheet.Protect取消保護(hù)工作簿ActiveSheet.Unprotect給當(dāng)前工作簿改名為"liu"ActiveSheet.Name = "liu"翻開一個應(yīng)用程序AppActivate (Shell("C:WINDOWSCALC.EXE")增加一個工作簿W(wǎng)orksheets.Add刪除當(dāng)前工作簿activesheet.delete翻開一個文件Workbooks.Open Fil

32、eName:="C:My DocumentsBook2.xls" 關(guān)閉當(dāng)前工作簿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 = T

33、rue當(dāng)前單元格字體為斜體Selection.Font.Italic = True當(dāng)前單元格字體為宋體20號字With Selection.Font.Name ="宋體".Size = 20End WithWith語句With對象.描述End With讓你的機器發(fā)出響聲! ActiveCell.ClearBEEP活除單元格中所有文字、批注、格式、所有的東西測試選擇狀態(tài)的單元格的行數(shù)MsgBox Selection.Rows.Count測試選擇狀態(tài)的單元格的列數(shù)MsgBox Selection.Columns.Count測試選擇狀態(tài)的單元格的地址Selection.Addre

34、ss讓所有的錯誤不再發(fā)生ON ERROR RESUME NEXT產(chǎn)生錯誤時讓錯誤轉(zhuǎn)到另一個地方on error goto l'codel:'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 = 1ActiveWi

35、ndow.ScrollColumn = 1定制系統(tǒng)日期Dim MyDate, MyDayMyDate = #12/12/69#MyDay = Day(MyDate)今天的年限D(zhuǎn)im MyDate, MyYearMyDate = DateMyYear = Year(MyDate)MsgBox MyYear產(chǎn)生一個inputbox輸入框InputBox ("Enter number of months to add")得到一個文件名:Dim kk As Stringkk = Application.GetOpenFilename("EXCEL (*XLS), *XLS

36、", Title:="提示:請翻開一個EXCE以件:")msgbox kk翻開zoom顯示比例對話框Application.Dialogs(xlDialogZoom).Show激活字體對話框Application.Dialogs(xlDialogActiveCellFont).Show翻開另存對話框Dim kk As Stringkk = Application.GetSaveAsFilename("excel (*.xls), *.xls")Workbooks.Open kk此段代碼尋找字符申中特定字符的位置,需要建立一個窗體,并在窗體中,放

37、入TEXTBOX1,TEXTBOX2TEXTBOX3(免文本框)及 COMMANDBUTTON!.Private Sub CommandButton1_Click()a = TextBox1.Textb = TextBox2.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 & CStrkk & "

38、/"i = kk + 1Loop While aa >= iTextBox3.Text = YYEnd SubActiveX控件在Excel97中的運用Excel97在工作表或圖表上可使用 ActiveX控件,根據(jù)我使用的體會,在工作 上處理控件時,必須注意和了解如下事項:一用Excel5.0/95工作簿文件格式保 存Excel97工作簿時,將選擇ActiveX控件信息.當(dāng)用戶通過雙擊鼠標(biāo)來編輯內(nèi)嵌在其它應(yīng)用程序文檔中的Excel97工作簿時,該工作簿上的控件將不會正常工作.如果用戶是通過用右鍵單擊工作簿,然后選中快捷菜單上的“翻開命令來編輯工作簿的話,工作簿上的控件就能正常工

39、作了.二當(dāng)ActiveX控件處于激活狀態(tài)時,將禁用某些 MicrosoftExcelVisualBasic方法和屆性.例如,當(dāng)某一控件激活時,就不能使用Sort方法,故下述按鈕單擊事件處理過程中的代碼將失敗由于用戶單擊按鈕后,該按鈕就處于激活狀態(tài).PrivateSubCommandButtonl ClickRange( a1:a10 ) SortKey1:=Range( a1 )EndSub解決方法是通過選激活工作表上其它元素的方法來繞過這種問題.例如,可用以下代碼對單元格區(qū)域排序:PrivateSubCommandButtonl ClickRange( a1)ActivateRange( a

40、1:a10 )SortKey1:=Range( a1)CommandButton1 ActivateEnd Sub(三)在MicrosoftExcel 中,用OLEObjects集合中的OLEObject對象代表 ActiveX控件.如果要用編程的方式向工作表添加 ActiveX控件,可用OLEObjects 集合的Add方法.例如向第一張工作表添加命令按鈕.Worksheets(1) OLEObjects Add " Forms CommandButton 1 ,_Left:=10,Top:=10,Height:=20,Width:=100由于ActiveX控件也可用 OLEObj

41、ects集合中的OLEObject對象代表,所以也 可用該集合中的對象來設(shè)置控件的屆性.例如要設(shè)置控件“ CommandBotton1的 “左邊位置屆性.Worksheets(1) OLEObjects( CommandButton1 ) Left=10那些不屆于OLEObject對象屆性的控件屆性,可通過由Object屆性返回的實 際控件對象來設(shè)置.例如要設(shè)置控件“ CommandButton1的標(biāo)題.Worksheets(l) OLEObjects( CommandButtonl )Object Caption= runme由于所有的OLEM象也是Shapes集合的成員,所以也可用該集合設(shè)

42、置假設(shè)十控 件的屆性.例如要對齊第一張工作表上所有控件的左邊框.ForEachsInWorksheets(1) ShapesIfs Type=msoOLEControlObjectThens Left=10Next請注意,當(dāng)在控件所在工作表的類模塊之外使用控件的名稱時 ,必須用工作表 的名稱限定該控件的名稱.在工作表上 ActiveX控件的事件處理過程中,Me關(guān)鍵 字所指向的是工作表,而非控件在Excel中利用VBA&I建多級選單Excel是我們常用的報表處理軟件之一,對于大多數(shù)人來說只是使用它進(jìn)行打 印報表,沒有注意其他功能,其實利用Excel內(nèi)嵌的VBA語言完全可以快速開發(fā)出 自己

43、企業(yè)的應(yīng)用系統(tǒng)來,而且應(yīng)用系統(tǒng)界面與其它專業(yè)編程語言相當(dāng)相似.下面筆 者簡單通過一個實例說明如彳利用VBA創(chuàng)立多級選單.首先,我們對Excel中兩個重要的內(nèi)置函數(shù) auto_open()和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ù)EXCEL勺系統(tǒng)選單.在以下語句中,我們定義了選單設(shè)置函數(shù)OpenMyMen

44、u(),用于設(shè)置多級選單, 其他有關(guān)說明見程序內(nèi)注釋,詳細(xì)代碼如下:Sub OpenMyMenu()'自定義多級選單函數(shù)On Error Resume Next '忽略錯誤MenuBars("MyMenu").Delete '刪除自定義選單MenuBars.Add ("MyMenu")'自定義選單項Sheets("sheet1").SelectMenuBars("MyMenu").Menus.Add Caption:="金融"'增加第一個選單項“金融

45、9;以下三句為在“金融選單下增加“銀行法、貨幣政策和條例三項選單項 MenuBars("MyMenu").Menus("金融").MenuItems.Add Caption:=" 銀行法", OnAction:="銀行法"MenuBars("MyMenu").Menus("金融").MenuItems.Add Caption:="貨幣政策",OnAction:="貨幣政策"MenuBars("MyMenu").Men

46、us("金融").MenuItems.Add Cap tion:="條例,OnAction:="條例'以下為創(chuàng)立如下圖的多級選單MenuBars("MyMenu").Menus.Add Caption:="經(jīng)濟(jì)"'建立選單項“經(jīng)濟(jì)'以下三句為在“經(jīng)濟(jì)選單下增加“農(nóng)業(yè)、工業(yè)和第三產(chǎn)業(yè)三項選單項MenuBars"MyMenu".Menus"經(jīng)濟(jì)".MenuItems.Add Caption:="農(nóng)業(yè)", OnAction:="

47、農(nóng)業(yè)"MenuBars"MyMenu".Menus"經(jīng)濟(jì)".MenuItems.Add Cap tion:="工業(yè)", OnAction:="工業(yè)"MenuBars"MyMenu".Menus"經(jīng)濟(jì)".MenuItems.AddMenu Caption:="第三產(chǎn) 業(yè)"'以下三句為在“第三產(chǎn)業(yè)選單下增加“概況、范疇二項選單項和“飲 食效勞業(yè)子選單MenuBars"MyMenu".Menus"經(jīng)濟(jì)".

48、MenuItems"第三產(chǎn)業(yè)".MenuItems.Add Cap tion:="概況", OnAction:=" 概況"MenuBars"MyMenu".Menus"經(jīng)濟(jì)".MenuItems"第三產(chǎn)業(yè) ".MenuItems.Add Cap tion:="范疇", OnAction:=" 范疇"MenuBars"MyMenu".Menus"經(jīng)濟(jì)".MenuItems"第三產(chǎn)業(yè)&quo

49、t;.MenuItems.AddMenu Caption:=" 飲食效勞業(yè)"'以下二句為在“飲食效勞業(yè)選單下增加"酉店 1、灑店2二項選單項MenuBars"MyMenu".Menus"經(jīng)濟(jì)".MenuItems"第三產(chǎn)業(yè)".MenuItems"飲食服務(wù)業(yè)".MenuItems.Add Caption:=" 酒店 1, OnAction:=" 酒店 1MenuBars"MyMenu".Menus"經(jīng)濟(jì)".MenuIte

50、ms"第三產(chǎn)業(yè)".MenuItems"飲食服務(wù)業(yè)".MenuItems.Add Caption:=" 酒店 2, OnAction:=" 酒店 2MenuBars"MyMenu".Activate '激活自定義選單End SubSub auto_open()'系統(tǒng)自動翻開運行宏OpenMyMenU調(diào)用用戶選單函數(shù)End SubSub auto_close()'系統(tǒng)自動關(guān)閉運行宏On Error Resume Next '忽略錯誤MenuBars("MyMenu")

51、.Delete '刪除自定義選單End Sub讀者可以在自己的工作簿選單“工具中的“宏下,創(chuàng)立以上三個函數(shù)并將以上函數(shù)語句拷貝到其中即可運行.66、.用VBA編程)保護(hù)Excel文檔VBA(Visual Basic for Application) 是Excel應(yīng)用程序中功能非常強大的編 程語言,為了標(biāo)準(zhǔn)不同的用戶對Excel應(yīng)用程序的訪問水平,需要對Excel文檔及 有關(guān)的數(shù)據(jù)進(jìn)行有效的保護(hù),這里根據(jù)自己及同行們的體會,從以下二個方面介紹用 VBA編程法實現(xiàn)對Excel文檔的保護(hù).對工作簿的保護(hù)1.利用VBA中Workbook對象的SaveAs方法實現(xiàn)對工作簿的保護(hù),下面就對 Sav

52、eAs有關(guān)的參量作一介紹:Filename:該字符申表示要保存的文件名.可包含完整路徑.如果不指定路徑,Microsoft Excel將文件保存到當(dāng)前文件夾FileFormat:可選,文件的保存格式.Password :為一個區(qū)分大小寫的字符申不超過15個字符,用于指定文件的 保護(hù)密碼.WriteResPassword:該字符申表示文件的寫保護(hù)密碼.如果文件保存時帶有密 碼,但翻開文件時不輸入密碼,那么該文件以只讀模式翻開.ReadOnlyRecommended如果為True那么在翻開文件時顯示一條信息,提示該文 件以只讀模式翻開.下例就是在Excel應(yīng)用程序中添加一工作簿,將工作簿按常規(guī)文件

53、格式存為“C:經(jīng)濟(jì)評價.xls 文件,并給該文件指定保護(hù)密碼“ 12以及寫保護(hù)密碼 “23.Sub保護(hù)工作簿NewWorkbook = Workbooks.add經(jīng)濟(jì)評價.xls",FileFormat:=XlNormal,Password:="12", WriteResPassword:= " 23End sub2.利用VBA中Workbook對象的Protect方法對工作簿的結(jié)構(gòu)和窗口進(jìn)行保護(hù)Workbook對象的Protect方法帶有以下三個參量:Password:為加在工作表或工作簿上區(qū)分大小寫的密碼字符申.如果省略本參 數(shù),不用密碼就可以取消對

54、該工作簿的保護(hù).否那么,取消對該工作表或工作簿的保護(hù) 時必須提供該密碼.如果忘記了密碼,就無法取消對該工作表或工作簿的保護(hù).最好在平安的地方保存一份密碼及其對應(yīng)文檔名的歹0表.Structure:假設(shè)為True那么保護(hù)工作簿結(jié)構(gòu)工作簿中工作表的相對位置.默認(rèn)值為False oWindows假設(shè)為True那么保護(hù)工作簿窗口.下例就是對一名為“經(jīng)濟(jì)評價.xls 的工作簿實現(xiàn)“結(jié)構(gòu)和“窗口保護(hù) Sub保護(hù)工作簿W(wǎng)orkbooks 經(jīng)濟(jì)評價 .Protect Password: ="1234", Structure: =True, Windows:=TrueEnd subWorkb

55、ook對象的Unprotect方法用于取消對工作簿的保護(hù).Unprotect方法 只有一個參量,就是保護(hù)工作表時所用的口令.3. 對工作簿進(jìn)行隱藏保護(hù),可使他人無法看到其對應(yīng)的窗口.操作方法如下: 在VBA中使用 Workbook對象下面的 Windows對象的Visible 屆性對工作簿進(jìn)行隱 藏和取消隱藏,Visible 屆性的值可取“True和“False兩種.下面程序代碼完成對工作簿“ book.xls 的隱藏:Sub隱藏工作簿W(wǎng)orkbooks"book".ActivateActiveWindow.Visible = FalseEnd subSub隱藏工作簿W(wǎng)or

56、kbooks"book".Windows1.Visible=FalseEnd sub對工作表的保護(hù)1. 對工作表實現(xiàn)口令保護(hù)利用 VBA®用Worksheet對象的Protect方法對工 作表進(jìn)行保護(hù),Protect帶有以下參量:Password用于保護(hù)工作表的口令.Drawingobjects 假設(shè)為True,那么對工作表中的 Drawingobjects 對象進(jìn)行保護(hù), 缺省值為True.Contents假設(shè)為True,那么對單元格內(nèi)容進(jìn)行保護(hù),缺省值為True.下面程序代碼完成對工作表“根底數(shù)據(jù)表的保護(hù):Sub保護(hù)工作表Worksheets 根底數(shù)據(jù)表 .P

57、rotect Password:="1234"End sub2. 對工作表實現(xiàn)隱藏保護(hù),使他人無法看到工作表:利用VBA設(shè)置 Worksheet對象的Visible 屆性來隱藏工作表;Visible 屆性的 值為以下三個值中的一個:True工作表為顯示狀態(tài)False工作表為隱藏狀態(tài)XlVerHidden工作表為隱藏狀態(tài),且用戶不能通過“取消隱藏對話框?qū)⑵涓?為顯示狀態(tài).當(dāng)Visible的值為XlVerHidden時,只能利用VBA將其重新設(shè)置為 True oSub隱藏工作表Worksheets"根底數(shù)據(jù)表".Visible=FalseEnd sub67、

58、求:將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為萬元的最簡代碼.求:將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為萬元的最簡代碼.或能完成此功能的最便捷的命令操作.寫了一個,拋磚引玉:Sub convtDim cel As RangeDim dec As VariantApplication.EnableEvents = Falseyesorno = MsgBox"確實將區(qū)域所有數(shù)值轉(zhuǎn)換為“萬元 ?",vbYesNo + vbQuestion + vbDefaultButtonlIf yesorno = vbYes Then1: dec = Application.InputBox("請輸入小數(shù)位

59、數(shù):",Default:=0,Type:=1)If dec = "" ThenGoTo 1End IfFor Each cel In SelectionIf IsNumeric(cel.Value) Then'cel = (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、在VB磯發(fā)環(huán)境中,點擊工具附加控件,出現(xiàn)如下窗口 :在可選控件中選擇 microsoft orogressbar control,再點擊確定,這時,你會發(fā)現(xiàn)在你的工具箱中增加了進(jìn)度條工具,如圖:下面說說進(jìn)度條的用

溫馨提示

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

評論

0/150

提交評論