




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Excel宏編程簡明教程一)、宏學(xué)習(xí)首先需要明確的是,本文不可能教會您關(guān)于宏的所有內(nèi)容。您需要學(xué)會利 用”錄制宏”的方法來學(xué)習(xí)宏:點(diǎn)擊Excel”工具”下拉菜單中”宏”下?quot;錄制新宏”,此后可象平時一樣進(jìn) 行有關(guān)操作,待完成后停止錄制。然后再點(diǎn)擊工具“下拉菜單中”宏”下“宏啲“編 輯“選項(xiàng)即可打開剛才所錄制的宏的Visual Basic源程序,并且可以在此時的“幫 助“下拉菜單中獲得有關(guān)的編程幫助。對錄制宏進(jìn)行修改不僅可以學(xué)習(xí)宏的使 用,還能大大簡化宏的編寫。二)、基本概念為了學(xué)習(xí)Excel中的宏,我們需要先了解以下一些基本概念。1、工作簿:Workbooks Workbook、Act
2、iveWorkbook ThisWorkbooks 集合包含 Excel 中 所有當(dāng)前打開的Excel工作簿,亦即所有打開的Excel文件;Workbook對應(yīng) Workbooks中的成員,即其中的Excel文件;ActiveWorkbook代表當(dāng)前處于活動 狀態(tài)的工作簿,即當(dāng)前顯示的Excel文件;ThisWorkbook代表其中有Visual Basic 代碼正在運(yùn)行的工作簿。在具體使用中可用Workbooks(index)來引用Workbook對象,其中index為 工作簿名稱或編號;如Workbooks、Workbooks(年度報(bào)表xls“)。而編號按照創(chuàng)建或打開工作簿的順序來確 定,
3、第一個打開的工作簿編號為1,第二個打開的工作簿為2。2、工作表:Worksheets、Worksheet、ActiveSheetWorksheets集合包含工作簿中所有的工作表,即一個Excel文件中的所有數(shù) 據(jù)表頁;而Worksheet則代表其中的一個工作表;ActiveSheet代表當(dāng)前處于的活動狀態(tài)工作表,即當(dāng)前顯示的一個工作表。可用Worksheets(index)來引用Worksheet對象,其中index為工作表名稱或索引號;如Worksheets、Worksheets第一季度數(shù)據(jù)“)。工作表索引號表明該工作表在工作表標(biāo) 簽中的位置:第一個(最左邊的)工作表的索引號為1,最后一個(
4、最右邊的)為 Worksheets.Counto需要注意的是:在使用過程中Excel會自動重排工作表索引號,保持按照其在工作表標(biāo)簽中 的從左至右排列,工作表的索引號遞增。因此,由于可能進(jìn)行的工作表添加或 刪除,工作表索引號不一定始終保持不變。3、圖表:Chart Charts、Chartobject、ChartobjectsActiveChart 代表工作簿中的圖 表。該圖表既可為嵌入式圖表(包含在Chartobject中),也可為一個分開的 (單獨(dú)的)圖表工作表。Charts代表指定工作簿或活動工作簿中所有圖表工作表的集合,但不包括 嵌入式在工作表或?qū)υ捒蚓庉嫳碇械膱D表。使用Charts(i
5、ndex)可引用單個Chart 圖表,其中index是該圖表工作表的索引號或名稱;如Charts(1)、Charts(銷售圖表“)。圖表工作表的索引號表示圖表工作表在工作簿的 工作表標(biāo)簽欄上的位置。Charts(1)是工作簿中第一個(最左邊的)圖表工作表;ChartsfCharts.Count)為最后 一個(最右邊的)圖表工作表。Chartobject代表工作表中的嵌入式圖表,其作用是作為Chart對象的容 器。利用Chartobject可以控制工作表上嵌入式圖表的外觀和尺寸。Chartobjects代表指定的圖表工作表、對話框編輯表或工作表上所有嵌入式 圖表的集合??捎蒀hartObject
6、s(index)引用單個Chartobject,其中index為嵌入 式圖表的編號或名稱。女口 Worksheets(Sheetl).Chartobjects、Worksheets(,sheetl,).ChartObjects(,chartl,)分別對應(yīng)Sheetl!作表中 的第一個嵌入式圖表、以及名為“Chartl的嵌入式圖表。ActiveChart可以引用活 動狀態(tài)下的圖表,不論該圖表是圖表工作表,或嵌入式圖表。而對于圖表工作 表為活動工作表時,還可以通過ActiveSheet屬性引用之。4、單元格:Cells、ActiveCelK Range、AreasCells(row,column)
7、代表單個單元格,其中row為行號,column為列號。如可 以用 Cells(l,l) Cells(10,4)來引用“Al”、“D10”單元格。ActiveCell 代表活動工作 表的活動單元格,或指定工作表的活動單元格。Range代表工作表中的某一單元格、某一行、某一列、某一選定區(qū)域(該選 定區(qū)域可包含一個或若干連續(xù)單元格區(qū)域)或者某一三維區(qū)域??捎肦ange(arg)來引用單元格或單元格區(qū)域,其中arg可為單元格號、單元 格號范圍、單元格區(qū)域名稱。如Range(HA5) Range(“Al:H8”)、 Range(Criteria)o雖然可用Range(Al)返回單元格Al,但用Cells
8、更方便,因 為此時可用變量指定行和列。可將Range與Cells結(jié)合起來使用,如Range(Cells(l,l),Cells(10,10)代表單元 格區(qū)域A1:J1O;而expression.Cells(row,column)返回單元格區(qū)域中的一部分,其 中expression是返回Range的表達(dá)式,row和column為相對于該區(qū)域的左上角 偏移量。如由 Range(,C5:C10).Cells(l/l)5l用單元格 C5o Areas為選定區(qū)域內(nèi)的連續(xù)單元格塊的集合,其成員是Range對象。而其中 的每個Range對象代表選定區(qū)域內(nèi)與其它部分相分離的一個連續(xù)單元格塊。某 些操作不能在選定
9、區(qū)域內(nèi)的多個單元格塊上同時執(zhí)行;必須在選定區(qū)域內(nèi)的單 元格塊數(shù)Areas.Count 循環(huán),對每個單獨(dú)的單元格塊分別執(zhí)行該操作。此時, 可用Areas(index)從集合中返回單個Range對象,其中index為單元格塊編號; 如 Areas。5、”行與列:Rows、Columns、Row、ColumnRows Columns分別代表活動工作表、單元格區(qū)域范圍Range、指定工作表 中的所有行數(shù)、列數(shù)。對于一個多選單元格區(qū)域范圍Range的Rows、 Columns,只返回該范圍中第一個區(qū)域的行數(shù)、列數(shù)。例如,如果Range對象有 兩個區(qū)域(areas) A1:B2和C3:D4, Rows.C
10、ount返回2而不是4?!笨赏ㄟ^Rows(行號)、Columns例號)來引用相應(yīng)的行與列;如Rows(3) 、Columns(4) 分別對應(yīng)第三行、D列。利用Rows. Column可以獲得區(qū)域中第一塊的第一行行號、第一列列號, 所得值均以十進(jìn)制數(shù)表示。三) 、處理單元格1、直接賦值與引用將變量、常量值直接賦給單元格、或?qū)卧竦闹抵苯淤x給變量、常量, 這是在Excel中最簡單的單元格賦值及引用方法。如下例將工作表“SheetUAl單 元格的值賦給Integer變量I,并將1+1的值賦給當(dāng)前工作表中的B1單元格:Dim I As Integerl=Worksheets(Sheetl).Cell
11、s(l,l)Cells(l,2).Select1選定Bl單元格,使其成為當(dāng)前單元格ActiveCell=l+l *以1+1為當(dāng)前單元格賦值2、用公式賦值在宏的使用中,可能會更多地用公式來給單元格賦值。如下例將相對于活 動單元格左側(cè)第4列、向上第6行至向上第2行的單元格數(shù)值平均值賦給活動 單元格(以本行、本列為第0行、0列):ActiveCell.Formula=,=AVERAGE(R-6C-4:R2C 卜 4)”3、引用其它工作表中的單元格當(dāng)賦值公式中需要引用其它工作表中的單元格時,在被引用的單元格前加 上”工作表名!唧可。如以下即在賦值中引用了“Sheet廣工作表中的A1至A4單 元格:Ra
12、nge(E10,).Formula=SUM(Sheetl!RlCl:R4Cl)但需注意的是:當(dāng)被引用的工作表名中含有某些可能引起公式歧義的字符時,需要用單引 號,將工作表名括起來。女口:Worksheets(Sheetl).ActiveCell.Formula=Max(,l-l 剖面!D3:D5)4、引用其它工作簿中的單元格在被引用單元格所在工作表名前加上“工作簿名“,即可引用其它工作簿中 的單元格。女山ActiveCell.Formula=MAX(Bookl.xlsSheet3!RlC:RC4)同樣需注意的是:當(dāng)被引用的工作簿名中含有某些可能引起公式歧義的字符時,需要用中括 號”、T及單引號
13、將工作簿名括起來。如:Cells(l,2).Formula=MIN(1995-2000 總結(jié).xls 1995-1996 年!$A$l:$A$6)n5、避免循環(huán)引用在上述公式賦值過程中,應(yīng)避免在公式中引用被賦值的單元格,防止循環(huán) 引用錯誤。6、添加批注可按如下方法格給單元格添加批注:Dim批注文本As String批注文本=”批注示例”準(zhǔn)備批注文本ActiveCell.AddComment添加批注ActiveCell.Comme nt.Text Text:二臨時,寫入批注文本ActiveCell.Comment.Visible=False 隱藏批注7、添加、刪除、復(fù)制、剪切、粘貼單元格Rang
14、e(D10H).Insert Shift:=xlToRight1在DIO單元格處添加一新單元格,原D10格右移Range(C2).Insert Shift:=xlDown,在C2單元格處添加一新單元格,原C2格下移Rows(2) EntireRow.lnsert在第2行前添加一空白行,原第2行下移Columns(3) .EntireColumn.InsertC 列前添加一空白列,原 C 列右移 Columns(A:D).Delete Shift:=xlToLeft冊IJ除A列至D列,其右側(cè)列左移Rows(3:5).Delete Shift:=xlUp 刪除第3行至第5彳亍,其下方行上移Rang
15、e(B2).EntireRow.Delete 刪除第2行Range(C4H).Entirecolumn.Delete 刪除 C 列Range(B10:C13).Copy 1 復(fù)制 B10 至 C13 單元格區(qū)域Cells(l,2).Cut 剪切 B1 單元格Range(D10).SelectActiveSheet.Paste 自D10單元格起粘貼剪貼板中的內(nèi)容四) 、圖表1工作表圖表以下為一添加工作表圖表的實(shí)例。Charts.Add after:=Worksheets(,Sheetl),Sheetl,I作表之后添加新圖表工作表ActiveChart.ChartType=xlXYScatterS
16、mooth 圖表類型為 XY 平滑線散點(diǎn)圖ActiveChart.SetSourceData Source:=Sheets(結(jié)點(diǎn)坐標(biāo)”)Range(“Al:B69”),PlotBy:xlColumns 圖表數(shù)據(jù)來源于”結(jié)點(diǎn)坐標(biāo)”工作表的A1至B69單元格,且按列繪圖。ActiveChart.Location Where:=xlLocationAsNewSheetWith ActiveChartH asTitle = True.ChartTitle.Characters.Text = ”節(jié)點(diǎn)坐標(biāo)圖表標(biāo)題節(jié)點(diǎn)坐標(biāo) .Axes(xlCategory, xlPrimary).HasTitle = Tr
17、ue.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = xx 軸標(biāo)題x”.Axes(xlValue, xlPrimary).HasTitle = True.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y y 軸標(biāo)題End WithWith ActiveChart.Axes(xlCategory)HasMajorGridlines = True 顯示x軸主網(wǎng)格線,默認(rèn)情況卜為顯 示.HasMinorGridlines = True,顯示x軸次網(wǎng)格線,默認(rèn)情況下為不顯示End
18、 WithWith ActiveChart.Axes(xlValue)HasMajorGridlines = True標(biāo)出x軸主網(wǎng)格值,默認(rèn)情況下為標(biāo) 注.HasMinorGridlines = False 取消x軸次網(wǎng)格值標(biāo)注,默認(rèn)情況下為不標(biāo)注End WithActiveChart.Legend.Position = xIRight圖例顯示在圖表右狽92、”嵌入式圖表嵌入式圖表僅在添加方式及引用格式上與工作表圖表有所不同,而對圖表 的設(shè)置基本類似。詳見下例。Set 嵌入表=ActiveSheet.ChartObjects.Add(0,0,200,300)在當(dāng)前工作表(0,0)坐標(biāo) 處添加寬
19、200,高300的嵌入式圖表嵌入表.Chart.ChartType = xlColumnClustered 圖表類型為簇狀柱形圖嵌入 Chart.SetSourceData Source:=Sheets(l).Range(,A2:B2,)/PlotBy:二xIRows暇置圖表數(shù)據(jù)來源With 嵌入表.ChartHasTitle = False 無圖表標(biāo)題.Axes(xlCategory, xIPrimary).HasTitle = False 無 x 軸標(biāo)題.Axes(xlValue, xIPrimary).HasTitle = False 無 y 軸標(biāo)題 End With五) 、工作表1、添
20、加Sheets.Add before:=Sheets(1) 在第1工作表前添加新工作表Sheets.Add after:=Sheets(Sheets.Count)在最后工作表后添加新工作表2、移動ActiveSheet.Move before:=Sheets(2) ,將當(dāng)前工作表移動至第2工作表之前3、命名ActiveSheet.Name=n工作表名“,將當(dāng)前工作表命名為,工作表名”4、刪除10/35可以用以下語句刪除當(dāng)前工作表。ActiveSheet.Delete但在刪除前Excel會自動彈出提示框,需在用戶確認(rèn)后方可執(zhí)行刪除。為避 免這一干擾,可以先用以下語句關(guān)閉Excel的警告提示。Ap
21、plicati on .DisplayAlerts = False在刪除完成后,再重新打開Excel的警告提示Applicati on .DisplayAlerts = True六)、工作簿Excel的宏對工作簿的操作主要為保存。Dim存盤文件名As StringActiveWorkbook.Save 保存當(dāng)前匚作簿存盤文件名二“工作表名“ActiveWorkbook.SaveAs Filename:二存盤文件名當(dāng)前工作簿另存為“工作表名xls“在另存時,若指定的存盤文件名不包含路徑,則保存在該工作簿的打開目 錄下。而若此存盤文件已存在,也可用關(guān)閉Excel警告提示的方法以免其自動彈 出提示框
22、。64、”用過VB的人都應(yīng)該知道如何聲明變量,在VBA中聲明變量和VB中是 完全一樣的!使用Dim語句Dim a as integer聲明A為整形變量29 / 35Dim a聲明A為變體變量Dim a as stringDim a,b,c as currency聲明變量可以是:聲明A為字符串變量聲明A,b,c為貨幣變量Byte、Boolean、Integer Long、Currency、Single、Double Decimal (當(dāng)前 不支持)、Date String (只限變長字符串)、String*length (定長字符串)、 Object、Variant、用戶定義類型或?qū)ο箢愋?。?qiáng)制
23、聲明變量Option Explicit說明:該語句必在任何過程之前出現(xiàn)在模塊中。聲明常數(shù),用來代替文字值。Const常數(shù)的默認(rèn)狀態(tài)是PrivateoConst My = 456聲明Public常數(shù)。Public Const MyString = HELP聲明 Private Integer 常數(shù)。Private Const Mylnt As Integer = 5在同一行里聲明多個常數(shù)。Const MyStr = Hello, MyDouble As Double =3”4567在EXCEL97中,有一個十分好的功能,他就是把鼠標(biāo)放置在一個有效數(shù)據(jù) 單元格中,執(zhí)行該段代碼,你就可以將連在一起的
24、一片數(shù)據(jù)全部選中。只要將 該段代碼加入到你的模塊中。Sub My_SelectSelecti on .CurrentRegi on .SelectEnd sub刪除當(dāng)前單元格中數(shù)據(jù)的前后空格。sub my_trimTrimfActiveCell.Value)end sub使單元格位移sub my_offsetActiveCell.Offset(0, l).Select當(dāng)前單元格向左移動一格ActiveCell.Offset(0, -lJ.Select當(dāng)前單元格向右移動一格ActiveCell.Offset(l,OJ.Select當(dāng)前單元格向下移動一格ActiveCell.Offset(-l ,
25、 0).Select當(dāng)前單元格向上移動一格 end sub如果上述程序產(chǎn)生錯誤那是因?yàn)閱卧癫荒芤苿樱瑸榱私獬鲜鲥e誤,我 們可以往sub my_offset 之 卜力口一段代碼 on error resume next注意以下代碼都不再添加sub “代碼名稱和end sub請自己添加!給當(dāng)前單 元格賦值:ActiveCell.Value = ”你好! ! !給特定單元格加入一段代碼:例如:在A 1單元格中插入”H E L L 0 Range(,al,).value=hello,又如:你現(xiàn)在的工作簿在sheetl上,你要往sheet2的A 1單元格中插入H E L L 0“1. sheets(
26、sheet2).selectrange(,al,).value=,hello,* 或2. Sheets(,sheetl,).Range(,al,).Value = hello說明:1. sheet2被打開,然后在將“HELLO”放入到A1單元格中。2. sheet2不被打開,將“HELLO放入到A1單元格中。隱藏工作表隱藏SHEET1這張工作表sheets(sheetl).Visible=False1顯示SHEET1這張工作表sheets(sheetl).Visible=True有時候我們想把所有的EXCEL中的SHEET都打印預(yù)覽,請使用該段代碼, 它將在你現(xiàn)有的工作簿中循壞,直到最后一個工
27、作簿結(jié)束循環(huán)預(yù)覽。Dim my As WorksheetFor Each my In Worksheetsmy.Pri ntPreviewNext my得到當(dāng)前單元格的地址msgbox 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.
28、Add刪除當(dāng)前工作簿activesheet.delete打開一個文件Workbooks.Open FileName:二,C:My DocumentsBook2収創(chuàng)關(guān)閉當(dāng)前工作簿ActiveWindow.Close當(dāng)前單元格定為:左對齊Selection.HorizontalAlignment = xI Left當(dāng)前單元格定為:中心對齊Selecti on.H oriz on talAlig nment = xlCenter當(dāng)前單元格定為:右對齊Selecti on.H orizontalAlig nment = xIRight當(dāng)前單元格為百分號風(fēng)格Selecti on .Style = Per
29、ce nt”當(dāng)前單元格字體為粗體Selecti on.F ont.Bold =True當(dāng)前單元格字體為斜體Selecti on.F ont.ltalic = True當(dāng)前單元格字體為宋體20號字With Selection.Font.Name = u 宋體”.Size = 20End WithWith語句With對象描述End With讓你的機(jī)器發(fā)出響聲BEEP清除單元格中所有文字、批注、格式、所有的東西!ActiveCell.Clear測試選擇狀態(tài)的單元格的行數(shù)MsgBox Selecti on .Rows.Count測試選擇狀態(tài)的單元格的列數(shù)MsgBox Selection.Colum n
30、s.Cou nt測試選擇狀態(tài)的單元格的地址Selecti on .Address讓所有的錯誤不再發(fā)生ON ERROR RESUME NEXT產(chǎn)生錯誤時讓錯誤轉(zhuǎn)到另一個地方on error goto IcodeI:code刪除一個文件kill Hc:l/txt11定制自己的狀態(tài)欄Application.StatusBar = ”現(xiàn)在時刻:”& Time恢復(fù)自己的狀態(tài)欄Applicati on .StatusBar = false在運(yùn)行期執(zhí)行一個宏Applicati on .Run macro:=text滾動窗口到al的位置ActiveWindow.ScrollRow = 1ActiveWindo
31、w.ScrollColu mn = 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輸入框In putBox (E nter nu mber of mon ths to add)得到一個文件名:Dim kk As Stringkk=Application.GetOpenFilename(EXCEL (*.XLS), *.XLSZ Title:請打開一個EXC
32、EL文件:)msgbox kk打開zoom顯示比例對話框Application. Dialogs(xlDialogZoom).Show激活字體對話框Application. Dialogs(xlDialogActiveCellF on t).Show打開另存對話框Dim kk As String 提示:kk = Application.GetSaveAsFilename(Hexcel (*.xls), *.xlsH)Workbooks.Open kk此段代碼尋找字符串中特定字符的位置,需要建立一個窗體,并在窗體 中,放入 TEXTBOX1JEXTBOX2 和 TEXTBOX3(3 個文本框)及
33、 COMMANDBUTTON1(按鈕)Private Sub CommandButtonl_Click()a = TextBox1. HTextb = TextBox2. Textaa = Len(a)i = lDim 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) & 7i = kk + 1Loop While aa = iTextBox3. HText = YYEnd
34、SubActiveX控件在Excel97中的運(yùn)用Excel97在工作表或圖表上可使用ActiveX控件,根據(jù)我使用的體會,在工 作上處理控件時,必須注意和了解如下事項(xiàng):(_)用 Excel5”0/95工作簿文件格式保存Excel97工作簿時,將選擇ActiveX控件信息。 當(dāng)用戶通過雙擊鼠標(biāo)來編輯內(nèi)嵌在其它應(yīng)用程序文檔中的Excel97工作簿時,該 工作簿上的控件將不會正常工作。如果用戶是通過用右鍵單擊工作簿,然后選 中快捷菜單上的打開命令來編輯工作簿的話,工作簿上的控件就能正常工作 To(二)當(dāng)ActiveX控件處于激活狀態(tài)時,將禁用某些MicrosoftExcelVisualBasic方法
35、和屬性。例如,當(dāng)某一控件激活時,就不能使 用Sort方法,故下述按鈕單擊事件處理過程中的代碼將失敗(因?yàn)橛脩魡螕舭粹o 后,該按鈕就處于激活狀態(tài))。PrivateSubCommandButtonl ClickRange(al:alO) SortKeyl:=Range(/,al,/)EndSub解決辦法是通過選激活工作表上其它元素的方法來繞過這種問題。例如, 可用下列代碼對單元格區(qū)域排序:PrivateSubCommandButtonl ClickRange(aT) ActivateRange(al:alO) SortKeyl:=Range(/,al,/)CommandButtonl Activa
36、teEndSub(三)在MicrosoftExcel中,用OLEObjects集合中的OLEObject對象代表 ActiveX控件。如果要用編程的方式向工作表添加ActiveX控件,可用OLEObjects 集合的Add方法。例如向第一張工作表添加命令按鈕。Worksheets(1) OLEObjects Addz/Forms CommandButton 1, _Left:=10,Top:=10,Height:=20,Width:=100因?yàn)锳ctiveX控件也可用OLEObjects集合中的OLEObject對象代表,所以也 可用該集合中的對象來設(shè)置控件的屬性。例如要設(shè)置控件Command
37、Botto nl 的左邊位置屬性。Worksheets(1) OLEObjects(CommandButtonl) Left=10那些不屬于OLEObject對象屬性的控件屬性,可通過由Object屬性返回的 實(shí)際控件對象來設(shè)置。例如要設(shè)置控件CommandButtonr的標(biāo)題。Worksheets(IJOLEObjectsCCommandButtonI)Object Caption=/,runme,/因?yàn)樗械腛LE對象也是Shapes集合的成員,所以也可用該集合設(shè)置若干 控件的屬性。例如要對齊第一張工作表上所有控件的左邊框。ForEachsI nWorksheets(1)ShapesIfs
38、 Type=msoOLEControlObjectThens Left=10Next請注意,當(dāng)在控件所在工作表的類模塊之外使用控件的名稱時,必須用工 作表的名稱限定該控件的名稱。在工作表上ActiveX控件的事件處理過程中, Me關(guān)鍵字所指向的是工作表,而非控件在Excel中利用VBA創(chuàng)建多級選單Excel是我們常用的報(bào)表處理軟件之一,對于大多數(shù)人來說只是使用它進(jìn)行 打印報(bào)表,沒有注意其他功能,其實(shí)利用Excel內(nèi)嵌的VBA語言完全可以快速開 發(fā)出自己企業(yè)的應(yīng)用系統(tǒng)來,而且應(yīng)用系統(tǒng)界面與其它專業(yè)編程語言相當(dāng)相 似。下面筆者簡單通過一個實(shí)例說明如何利用VBA創(chuàng)建多級選單。首先,我們對Excel中
39、兩個重要的內(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ù)0penMyMenu(),用于設(shè)置多級選 單,其他有關(guān)說明見程序內(nèi)注釋,詳細(xì)代碼如下:Sub OpenMyMenu()自定義多級選單函數(shù)On Error Resume
40、 Next 忽略錯誤MenuBars(,MyMenu,).Delete 刪除自定義選單MenuBars.Add (“MyMenu”)自定義選單項(xiàng)Sheets(sheetl).SelectMenuBars(MyMenu).Menus.Add Caption:二”金融”增加第一個選單項(xiàng)金融以下三句為在“金融選單下增加銀行法、貨幣政策和條例三項(xiàng)選單項(xiàng)MenuBars(”MyMenu”)Menus(”金融).Menultems.Add Caption:=銀行法”,OnAction:=“銀行法”MenuBars(MyMenu).Menus(金融).Menultems.Add Caption:=貨幣政策舄
41、OnAction:=“貨幣政策“MenuBars(MyMenu).Menus(金融).Menultems.Add Caption:=“條例,OnAction:=“條例“以下為創(chuàng)建如圖所示的多級選單MenuBars(MyMenu).Menus.Add Caption:二”經(jīng)濟(jì)”建立選單項(xiàng)“經(jīng)濟(jì)以下三句為在經(jīng)濟(jì)選單下增力口“農(nóng)業(yè)、工業(yè)和 第三產(chǎn)業(yè)三項(xiàng)選單項(xiàng) MenuBars(”MyMenu“)Menus(“經(jīng)濟(jì)n).Menultems.Add Capti on:=“農(nóng)業(yè) “QnAction:=“農(nóng)業(yè),MenuBars(MyMenu).Menus(經(jīng)濟(jì)).Menultems.Add Caption:
42、=“工業(yè) u,OnAction:二“工業(yè)”MenuBars(MyMenu).Menus(經(jīng)濟(jì)).Menultems.AddMenu Caption:二”第三產(chǎn)業(yè)“以下三句為在“第三產(chǎn)業(yè)選單下增加“概況、范疇二項(xiàng)選單項(xiàng)和“飲食服務(wù) 業(yè)子選單MenuBars(“MyMenu“)Menus(“ 經(jīng)濟(jì)”)Menultems(” 第三產(chǎn)業(yè)).Menu Items. AddCaption:=“概況, OnAction:二“概況”MenuBars(“MyMenu“)Menus(“ 經(jīng)濟(jì)”)Menultems(” 第三產(chǎn)業(yè)).Menu Items. AddCaption:=“范疇, OnAction:=“范疇
43、,MenuBars(“MyMenu“)Menus(“ 經(jīng)濟(jì)”)Menultems(” 第三產(chǎn)業(yè)).Menultems.AddMenu Caption:二“飲食服務(wù)業(yè)”以下二句為在“飲食服務(wù)業(yè)選單下增加酒店1、”酒店 2二項(xiàng)選單項(xiàng) MenuBars(,MyMenu).MenusC,經(jīng)濟(jì)J.MenultemsC*第 三產(chǎn)業(yè)J.MenultemsC*飲食服務(wù)業(yè)).Menultems.Add Caption:=”酒店 1, OnAction:二“酒店 l,MenuBars(,MyMenu,).Menus(,經(jīng)濟(jì)”)Menultems(”第三產(chǎn)業(yè) J.MenultemsC飲食服務(wù)業(yè)J.Menultems
44、.Add Caption:二”酒店 2, OnAction:二”酒店 2,MenuBars(,MyMenu,).Activate 激活自定義選單End SubSub auto_open()系統(tǒng)自動打開運(yùn)行宏OpenMyMenu八調(diào)用用戶選單函數(shù)End SubSub auto_close()系統(tǒng)自動關(guān)閉運(yùn)行宏On Error Resume Next 忽略錯誤MenuBarsfyMenu).Delete 刪除自定義選單End Sub讀者可以在自己的工作簿選單“工具中的宏下,創(chuàng)建以上三個函數(shù)并將以 上函數(shù)語句拷貝到其中即可運(yùn)行。66、”用VBA(編程)保護(hù)Excel文檔VBA (Visual Bas
45、ic for Application)是Excel應(yīng)用程序中功能非常強(qiáng)大的編程 語言,為了規(guī)范不同的用戶對Excel應(yīng)用程序的訪問能力,需要對Excel文檔及 有關(guān)的數(shù)據(jù)進(jìn)行有效的保護(hù),這里根據(jù)自己及同行們的體會,從以下二個方面 介紹用VBA編程法實(shí)現(xiàn)對Excel文檔的保護(hù)。對工作簿的保護(hù)1 利用VBA中Workbook對象的SaveAs方法實(shí)現(xiàn)對工作簿的保護(hù),下面就 對SaveAs有關(guān)的參量作一介紹:File name:該字符串表示要保存的文件名??砂暾窂?。如果不指定路徑,Microsoft Excel將文件保存到當(dāng)前文件夾。FileFormat:可選,文件的保存格式。Password
46、:為一個區(qū)分大小寫的字符串(不超過15個字符),用于指定文件的保護(hù)密 碼。WriteResPassword:如果為True則在打開文件時顯示一條信息,提示該文件以只讀模式打 開。下例就是在Excel應(yīng)用程序中添加一工作簿,將工作簿按常規(guī)文件格式存為 C:pjobj經(jīng)濟(jì)評價xls文件,并給該文件指定保護(hù)密碼T2以及寫保護(hù)密碼 23。Sub保護(hù)工作簿()NewWorkbook = Workbooks.addNewWorkbook.SaveAs FileName:=HC:pjobj經(jīng)濟(jì)評價xls, FileFormat:=XINormal, Password:=,12H,WriteResPasswo
47、rd:二 23End sub2利用VBA中Workbook對象的Protect方法對工作簿的結(jié)構(gòu)和窗口進(jìn)行保 護(hù),Workbook對象的Protect方法帶有以下三個參量:Password:為加在工作表或工作簿上區(qū)分大小寫的密碼字符串。如果省略本參數(shù),不 用密碼就可以取消對該工作簿的保護(hù)。否則,取消對該工作表或工作簿的保護(hù) 時必須提供該密碼。如果忘記了密碼,就無法取消對該工作表或工作簿的保 護(hù)。最好在安全的地方保存一份密碼及其對應(yīng)文檔名的列表。Structure:若為True則保護(hù)工作簿結(jié)構(gòu)(工作簿中工作表的相對位置)。默認(rèn)值為FalseoWindows若為True則保護(hù)工作簿窗口。下例就是對
48、一名為經(jīng)濟(jì)評價xls 的工作簿實(shí)現(xiàn)“結(jié)構(gòu)和“窗口保護(hù):Sub保護(hù)工作簿()Workbooks (經(jīng)濟(jì)評價,z) .ProtectPassword:=,1234,Structure:=True,Wi ndows:=TrueEnd subWorkbook對象的Unprotect方法用于取消對工作簿的保護(hù)。Unprotect方法 只有一個參量,就是保護(hù)工作表時所用的口令。3對工作簿進(jìn)行隱藏保護(hù),可使他人無法看到其對應(yīng)的窗口。操作方法如 下:在VBA中使用Workbook對象下面的Windows對象的Visible屬性對工作簿 進(jìn)行隱藏和取消隱藏,Visible屬性的值可取True和作alse兩種。下
49、面程序代碼完成對工作簿book.xls的隱藏:Sub隱藏工作簿()Workbooks(book).ActivateActiveWindow.Visible = FalseEnd subnV Sub隱藏工作簿()Workbooks(book). Windows(1) .Visible=FalseEnd sub對工作表的保護(hù)1.對工作表實(shí)現(xiàn)口令保護(hù)利用VBA調(diào)用Worksheet對象的Protect方法對 工作表進(jìn)行保護(hù),Protect帶有以下參量:Password用于保護(hù)工作表的口令。Drawingobjects若為True,則對工作表中的Drawingobjects對象進(jìn)行保護(hù),缺 省值為Tr
50、ueoContents若為True,則對單元格內(nèi)容進(jìn)行保護(hù),缺省值為True。下面程序代碼完成對工作表基礎(chǔ)數(shù)據(jù)表的保護(hù):Sub保護(hù)工作表()Worksheets (基礎(chǔ)數(shù)據(jù)表/z) .Protect Password:End sub2.對工作表實(shí)現(xiàn)隱藏保護(hù),使他人無法看到工作表:利用VBA設(shè)置Worksheet對象的Visible屬性來隱藏丄作表;Visible屬性的 值為以下三個值中的一個:True 11作表為顯示狀態(tài)。False工作表為隱藏狀態(tài)。XIVerHidden工作表為隱藏狀態(tài),且用戶不能通過取消隱藏對話框?qū)⑵涓?為顯示狀態(tài)。當(dāng)Visible的值為XIVerHidden時,只能利用V
51、BA將其重新設(shè)置為 True。Sub隱藏工作表()Worksheets(基礎(chǔ)數(shù)據(jù)表).Visible=FalseEnd sub67、”求:將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為“萬元“的最簡代碼.求:將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為“萬元“的最簡代碼.或能完成此功能的最便捷的命令操作.寫了一個,拋磚引玉:Sub convt()Dim cel As RangeDim dec As VariantApplicati on .EnableEve nts = Falseyesorno = MsgBox(確實(shí)將區(qū)域所有數(shù)值轉(zhuǎn)換為萬元? ,vbYesNo + vbQuestion + vbDefaultButtonl)
52、If yesorno = vbYes The n1:dec = Application. lnputBox(請輸入小數(shù)位數(shù):, Default:=0,Type:=1)If dec 二” ThenGoTolEnd IfFor Each cel In SelectionIf IsNumeric(cel.Value) Thencel = (Round(cel.Value / 100, 2) & 萬元”cel = (Round(cel.Value / 100, dec)End IfNextElself yesor no = vbNo ThenExit SubEnd IfEnd Sub以下當(dāng)為最簡代碼吧
53、.Sub Macro2()Selection.Numbe rFormatLocal =畀End Sub68、”在VBA開發(fā)環(huán)境中,點(diǎn)擊工具一一附加控件,出現(xiàn)如下窗口:在可選控件中選擇microsoft orogressbar control,再點(diǎn)擊確定,這時,你會發(fā) 現(xiàn)在你的工具箱中增加了進(jìn)度條工具,如圖:下面說說進(jìn)度條的用法:屬性:Max:設(shè)置進(jìn)度條控件的最大值Min:設(shè)置進(jìn)度條控件的最小值Value:設(shè)置進(jìn)度條控件對象的當(dāng)前值Scrolli ng:進(jìn)度條的式樣,即一格的進(jìn)度條或是沒有間隔的進(jìn)度條。例子:Private Sub UserForm_Activate()For i = 1 to 5000Pro
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度汽車充電樁場地租賃及維護(hù)服務(wù)合同
- 旅游景區(qū)服務(wù)質(zhì)量提升策略手冊
- 汽車配件銷售及售后支持協(xié)議
- 企業(yè)級軟件系統(tǒng)開發(fā)合作協(xié)議
- 水滸傳經(jīng)典人物宋江征文
- 租賃房屋補(bǔ)充協(xié)議
- 關(guān)于提高工作效率的研討會紀(jì)要
- 文化創(chuàng)意產(chǎn)業(yè)發(fā)展規(guī)劃策略
- 融資租賃資產(chǎn)轉(zhuǎn)讓協(xié)議
- 辦公室環(huán)境改善申請報(bào)告
- (完整版)第五章養(yǎng)殖場環(huán)境保護(hù)
- 祖國版圖知識主題班會
- 2025年上半年東方電氣集團(tuán)科學(xué)技術(shù)研究院限公司公開招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 高中不同主題閱讀理解高頻詞匯清單-2025屆高三下學(xué)期英語一輪復(fù)習(xí)專項(xiàng)
- 2025年上半年高郵市國資產(chǎn)投資運(yùn)營限公司(國企業(yè))公開招聘工作人員易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年高考地理二輪復(fù)習(xí):地球運(yùn)動(講義)解析版
- 2024年金華金開招商招才服務(wù)集團(tuán)有限公司招聘筆試真題
- 【地理】亞洲的自然環(huán)境第3課時 2024-2025學(xué)年七年級地理下冊同步課件(人教版2024)
- 2024年江蘇護(hù)理職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 《國別和區(qū)域研究專題》教學(xué)大綱
-
評論
0/150
提交評論