EXCEL宏編程簡(jiǎn)明教程有實(shí)例,_第1頁
EXCEL宏編程簡(jiǎn)明教程有實(shí)例,_第2頁
EXCEL宏編程簡(jiǎn)明教程有實(shí)例,_第3頁
EXCEL宏編程簡(jiǎn)明教程有實(shí)例,_第4頁
EXCEL宏編程簡(jiǎn)明教程有實(shí)例,_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余24頁可下載查看

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、引用 Workbook對(duì)象,其中index為 工作簿名稱或編號(hào);如 Workbooks(1)、Workbooks(”年度報(bào)表.xls")。而編號(hào)按照創(chuàng)建或打開工作簿的順序來確 定,第一個(gè)打開的工作簿編號(hào)為 1,第二個(gè)打開的工作簿為 2, 。2、工作表:Worksheets、 Worksheet、 ActiveSheetWorksheets 集合包含工作簿中所有的工作表,即一個(gè)Excel 文件中的所有數(shù)據(jù)表頁;而 Worksheet 則代表其中的一個(gè)工作表; ActiveSheet 代表當(dāng)前處于的 活動(dòng)狀態(tài)工作表,即當(dāng)前顯示的一個(gè)工作表??捎?Worksheets©ndex)

4、來引用 Worksheet對(duì)象,其中index為工作表名稱或 索引號(hào);如 Worksheets(1)、Worksheets(”第一季度數(shù)據(jù)")。工作表索引號(hào)表明該工作表在工作表標(biāo) 簽中的位置:第一個(gè)(最左邊的)工作表的索引號(hào)為 1 ,最后一個(gè)(最右邊的)為Worksheets.Cou nt。需要注意的是:在使用過程中ExceI會(huì)自動(dòng)重排工作表索引號(hào),保持按照其在工作表標(biāo)簽中 的從左至右排列,工作表的索引號(hào)遞增。因此,由于可能進(jìn)行的工作表添加或 刪除,工作表索引號(hào)不一定始終保持不變。3、圖表:Chart、Charts、Chartobject、Chartobjects、ActiveCha

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

6、。ChartObject代表工作表中的嵌入式圖表,其作用是作為Chart對(duì)象的容器。利用ChartObject可以控制工作表上嵌入式圖表的外觀和尺寸。ChartObjects 代表指定的圖表工作表、對(duì)話框編輯表或工作表上所有嵌入式 圖表的集合??捎?ChartObjects(index引用單個(gè)Chartobject,其中index為嵌入 式圖表的編號(hào)或名稱。如 Worksheets("Sheet1").ChartObjects(1)、Worksheets("sheet1").ChartObjects("chart1")分別對(duì)應(yīng)&quo

7、t;Sheetl"工作表中 的第一個(gè)嵌入式圖表、以及名為"Chartl"的嵌入式圖表。ActiveChart可以引用活動(dòng)狀態(tài)下的圖表,不論該圖表是圖表工作表,或嵌 入式圖表。而對(duì)于圖表工作表為活動(dòng)工作表時(shí),還可以通過ActiveSheet屬性引用之。4、 xx:Cells、 ActiveCell、 Range、 AreasCells(row,column)代表單個(gè)單元格,其中row為行號(hào),column為列號(hào)。如可 以用Cells(1,1) Cells(10,4來引用"A1"、"D10"單元格。ActiveCell代表活動(dòng)工作

8、 表的活動(dòng)單元格,或指定工作表的活動(dòng)單元格。Ra nge代表工作表中的某一單元格、某一行、某一列、某一選定區(qū)域(該選 定區(qū)域可包含一個(gè)或若干連續(xù)單元格區(qū)域)或者某一三維區(qū)域??捎肦ange(arg來引用單元格或單元格區(qū)域,其中 arg可為單元格號(hào)、單元 格號(hào)范圍、單元格區(qū)域名稱。如 Range("A5")、 Range("A1:H8")、Range("Criteria")。雖然可用 Range("A1")返回單元格 A1,但用 Cells更方 便,因?yàn)榇藭r(shí)可用變量指定行和列??蓪?Range與 Cells結(jié)合起來使

9、用,如 Range(Cells(1,1),Cells(10,1C代表單元 格區(qū)域"A1:J10"而expression.Cells(row,column返回單元格區(qū)域中的一部分,其 中expression是返回Range的表達(dá)式,row和column為相對(duì)于該區(qū)域的左上角 偏移量。如由Range("C5:C10").Cells(1,引用單元格 C5。Areas為選定區(qū)域內(nèi)的連續(xù)單元格塊的集合,其成員是Ra nge對(duì)象。而其中的每個(gè)Range對(duì)象代表選定區(qū)域內(nèi)與其它部分相分離的一個(gè)連續(xù)單元格塊。某 些操作不能在選定區(qū)域內(nèi)的多個(gè)單元格塊上同時(shí)執(zhí)行;必須在選定

10、區(qū)域內(nèi)的單元格塊數(shù)Areas.Count上循環(huán),對(duì)每個(gè)單獨(dú)的單元格塊分別執(zhí)行該操作。此時(shí), 可用Areas(index從集合中返回單個(gè) Range對(duì)象,其中index為單元格塊編號(hào); 如 Areas(1)。5、行與列:Rows、Columns、Row、ColumnRows、Columns分別代表活動(dòng)工作表、單元格區(qū)域范圍Range指定工作表中的所有行數(shù)、列數(shù)。對(duì)于一個(gè)多選單元格區(qū)域范圍Range的Rows、Colum ns,只返回該范圍中第一個(gè)區(qū)域的行數(shù)、列數(shù)。例如,如果Range對(duì)象有兩個(gè)區(qū)域(areas)A1:B2和 C3:D4, Rows.Count返回 2 而不是 4??赏ㄟ^Rows行

11、號(hào))、Columns例號(hào))來引用相應(yīng)的行與列;女口 Rows(3) 、 Columns(4) 分別對(duì)應(yīng)第三行、 Dxx。利用Rows、Column可以獲得區(qū)域中第一塊的第一行行號(hào)、第一列列號(hào), 所得值均以十進(jìn)制數(shù)表示。三 )、處理單元格1、直接賦值與引用將變量、常量值直接賦給單元格、或?qū)卧竦闹抵苯淤x給變量、常量,這是在ExceI中最簡(jiǎn)單的單元格賦值及引用方法。如下例將工作表"Sheet1"A1單元格的值賦給Integer變量I,并將1+1的值賦給當(dāng)前工作表中的B1單元格:Dim I As IntegerI=Worksheets("Sheet1").C

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

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

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

15、的單元格,防止循環(huán) 引用錯(cuò)誤。6、添加批注可按如下方法格給xx添加批注:Dim 批注文本 As String批注文本 ="批注示例 " '準(zhǔn)備批注文本ActiveCell.AddComment '添加批注ActiveCell.Comment.Text Text:=臨時(shí)'寫入批注文本ActiveCell.Comme nt.Visible二False 隱藏批注7、添加、刪除、復(fù)制、剪切、粘貼xxRange("D10").Insert Shift:=xlToRight在D10單元格處添加一新單元格,原 D10格右移Range("

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

17、2").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 自' D 1 0單元格起粘貼剪貼板中的內(nèi)容四)、圖表1 、工作表圖表 以下為一添加工作表圖表的實(shí)例。Charts.Addafter:二Worksheets("Sheet1&

18、quot;)在"Sheet1"工作表之后添加新圖表工作表ActiveChart.ChartType=xlXYScatterSmoot圖表類型為 XY平滑線散點(diǎn)圖ActiveChart.SetSourceData Source:=Sheets('結(jié)點(diǎn)坐標(biāo)").Range("A1:B69"), PlotBy:xlColumns圖表數(shù)據(jù)來源于”結(jié)點(diǎn)坐標(biāo)”工作表的A1至B69單元格,且按列 繪圖。ActiveChart.Location Where:=xlLocationAsNewSheetWith ActiveChart.HasTitle =

19、 True.ChartTitle.Characters.Text = "節(jié)點(diǎn)坐標(biāo) " '圖表標(biāo)題 "節(jié)點(diǎn)坐標(biāo) ".Axes(xlCategory, xlPrimary).HasTitle = True.Axes(xlCategory,xlPrimary).AxisTitle.Characters.Text二"x"'軸標(biāo)題"x".Axes(xlValue, xlPrimary).HasTitle = True.Axes(xlValue, xlPrimary).AxisTitle.Characters.

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

21、WithActiveChart.Lege nd.Position = xlRight 圖例顯示在圖表右側(cè)2、嵌入式圖表嵌入式圖表僅在添加方式及引用格式上與工作表圖表有所不同,而對(duì)圖表 的設(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&qu

22、ot;),PlotBy:=xlRows '設(shè)置圖表數(shù)據(jù)來源With 嵌入表 .Chart.HasTitle = False無圖表標(biāo)題.Axes(xlCategory, xlPrimary).HasTitle = Falser x 軸標(biāo)題.Axes(xlValue, xlPrimary).HasTitle = False無 y 軸標(biāo)題 End With五 )、工作表1、添加Sheets.Add before:=Sheets(1) '在第 1 工作表前添加新工作表Sheets.Addafter:=Sheets(Sheets.Cou nt在最后工作表后添加新工作表2、移動(dòng)Active

23、Sheet.Movebefore:=Sheets(2)'將當(dāng)前工作表移動(dòng)至第 2 工作表之前3、命名ActiveSheet.Name二工作表名"'將當(dāng)前工作表命名為"工作表名"4、刪除 可以用以下語句刪除當(dāng)前工作表。ActiveSheet.Delete但在刪除前ExceI會(huì)自動(dòng)彈出提示框,需在用戶確認(rèn)后方可執(zhí)行刪除。為避 免這一干擾,可以先用以下語句關(guān)閉Excel的警告提示。AppIication.DispIayAIerts = FaIse在刪除完成后,再重新打開 Exce I的警告提示Application.DisplayAlerts = Tru

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

25、m 語句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 (只限變長字符串)、String*length (定長字符串)、 Object、Variant、用戶定義類型或?qū)ο箢愋?。?qiáng)制聲明變量Option Explicit說明:該語句必在任何過程

26、之前出現(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 '在同一行里聲明多個(gè)常數(shù)。Const MyStr = "Hello", MyDouble As Double =3.4567在EXCEL9中,有一個(gè)十分好的功能,他就是把鼠標(biāo)放置在一個(gè)有效數(shù)據(jù) 單元格中,執(zhí)行

27、該段代碼,你就可以將連在一起的一片數(shù)據(jù)全部選中。只要將 該段代碼加入到你的模塊中。Sub My_SelectSelection.CurrentRegion.SelectEnd sub刪除當(dāng)前xx中數(shù)據(jù)的前后空格。sub my_trimTrim(ActiveCell.Value)end sub使 xx 位移sub my_offsetActiveCell.Offset(0, 1).Select當(dāng)前單元格向左移動(dòng)一格ActiveCell.Offset(0, -1).Select當(dāng)前單元格向右移動(dòng)一格ActiveCell.Offset(1 ,O).Select'當(dāng)前單元格向下移動(dòng)一格Activ

28、eCell.0ffset(-1 , 0).Select 當(dāng)前單元格向上移動(dòng)一格end sub如果上述程序產(chǎn)生錯(cuò)誤那是因?yàn)閱卧癫荒芤苿?dòng),為了解除上述錯(cuò)誤,我 們可以往sub my_offset 之下加一段代碼 on error resume next注意以下代碼都不再添加sub代碼名稱”和end sub請(qǐng)自己添加!給當(dāng)前單元格賦值:ActiveCell.Value = "你好! "給特定xx加入一段代碼:例如:在Al xx中插入” HELLO "Range("a1").value="hello"又如:你現(xiàn)在的工作簿在shee

29、tl上,你要往sheet2的Al單元格中插入” HELLO"1. sheets("sheet2").selectrange("a1").value二"hello"或 2.Sheets("sheet1").Range("a1").Value = "hello"說明:1. sheet2被打開,然后在將“HELLO放入到A1單元格中。2. sheet2不被打開,將“HELLO放入至U A1單元格中。隱藏工作表'隱藏SHEET這張工作表sheets("sh

30、eet1").Visible=False'顯示SHEET這張工作表sheets("sheet1").Visible=True有時(shí)候我們想把所有的EXCELS的SHEET都打印預(yù)覽,請(qǐng)使用該段代碼, 它將在你現(xiàn)有的工作簿中循環(huán),直到最后一個(gè)工作簿結(jié)束循環(huán)預(yù)覽。Dim my As WorksheetFor Each my In Worksheetsmy.PrintPreviewNext my得到當(dāng)前xx的地址msgbox ActiveCell.Address得到當(dāng)前日期及時(shí)間msgbox date & chr(13) & time保護(hù)工作簿Ac

31、tiveSheet.Protect取消保護(hù)工作簿ActiveSheet.Unprotect給當(dāng)前工作簿改名為 "liu"ActiveSheet.Name = "liu"打開一個(gè)應(yīng)用程序AppActivate (Shell("C:WINDOWSCALC.EXE") 增加一個(gè)工作簿 Worksheets.Add 刪除當(dāng)前工作簿 activesheet.delete 打開一個(gè)文件Workbooks.Open FileName:="C:My DocumentsBook2. xls" 關(guān)閉當(dāng)前工作簿ActiveWindow.

32、Close 當(dāng)前 xx 定為: 左對(duì)齊 Selection.HorizontalAlignment = xlLeft 當(dāng)前 xx 定為: 中心對(duì)齊 Selection.HorizontalAlignment = xlCenter 當(dāng)前 xx 定為: 右對(duì)齊 Selection.HorizontalAlignment = xlRight、所有的東西!當(dāng)前 xx 為百分號(hào)風(fēng)格 Selection.Style = "Percent" 當(dāng)前 xx 字體為粗體 Selection.Font.Bold = True 當(dāng)前 xx 字體為斜體 Selection.Font.Italic =

33、 True 當(dāng)前XX字體為xx20號(hào)字 With Selection.Font .Name = "xx" .Size = 20 End With With 語句 With 對(duì)象 .描述 End With 讓你的機(jī)器發(fā)出響聲 BEEP 清除單元格中所有文字、批注、 ActiveCell.Clear 測(cè)試選擇狀態(tài)的xx的行數(shù) MsgBox Selection.Rows.Count測(cè)試選擇狀態(tài)的 xx 的列數(shù)MsgBox Selection.Columns.Count 測(cè)試選擇狀態(tài)的 xx 的地址 Selection.Address 讓所有的錯(cuò)誤不再發(fā)生ON ERROR RESU

34、ME NEXT 產(chǎn)生錯(cuò)誤時(shí)讓錯(cuò)誤轉(zhuǎn)到另一個(gè)地方 on error goto l'codel:'code 刪除一個(gè)文件 kill "c:1.txt" 定制自己的狀態(tài)欄 Application.StatusBar = "現(xiàn)在時(shí)刻 :" & Time恢復(fù)自己的狀態(tài)欄 Application.StatusBar = false 在運(yùn)行期執(zhí)行一個(gè)宏Application.Run macro:="text"滾動(dòng)窗口到 a1 的位置ActiveWindow.ScrollRow = 1ActiveWindow.ScrollCo

35、lumn = 1 定制系統(tǒng)日期Dim MyDate, MyDayMyDay = Day(MyDate)今天的年限D(zhuǎn)im MyDate, MyYearMyDate = DateMyYear = Year(MyDate)MsgBox MyYear產(chǎn)生一個(gè)inputboxv輸入框InputBox ("Enter number of months to add") 得到一個(gè)文件名:Dim kk As Stringkk = Application.GetOpenFilename("EXCEL (*.XLS), *.XLS", Title: ="提示:請(qǐng)打

36、開一個(gè)EXCELS件:")msgbox kk打開 zoom 顯示比例對(duì)話框Application.Dialogs(xlDialogZoom).Show激活字體對(duì)話框Application.Dialogs(xlDialogActiveCellFont).Show 打開另存對(duì)話框Dim kk As Stringkk = Application.GetSaveAsFilename("excel (*.xls), *.xls") Workbooks.Open kk此段代碼尋找字符串中特定字符的位置,需要建立一個(gè)窗體,并在窗體中,放入 TEXTBOX1,TEXTBOX2TE

37、XTBOX3(個(gè)文本框)及COMMANDBUTTON按鈕)Private Sub Comma ndButto n1_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 & CStr(kk) & "/"i = kk

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

39、狀態(tài)時(shí),將禁用某些MicrosoftExcelVisualBasic方法和屬性。例如,當(dāng)某一控件激活時(shí),就不能使 用Sort方法,故下述按鈕單擊事件處理過程中的代碼將失敗(因?yàn)橛脩魡螕舭粹o后,該按鈕就處于激活狀態(tài) )。PrivateSubCommandButton1 ClickRange(” a1:a10 ” ) SortKey1:=Range(” aT)EndSub解決辦法是通過選激活工作表上其它元素的方法來繞過這種問題。例如, 可用下列代碼對(duì)單元格區(qū)域排序:PrivateSubCommandButton1 ClickRange(” a1 ” ) Activateffa1)Range(” a

40、1:a10 ” ) SortKey1:=Range(CommandButton1 ActivateEnd Sub(三)在MicrosoftExcel中,用OLEObjects集合中的OLEObject對(duì)象代表 ActiveX控件。如果要用編程的方式向工作表添加ActiveX控件,可用OLEObjects集合的 Add 方法。例如向第一張工作表添加命令按鈕。Worksheets(1) OLEObjects Add Forms CommandButtc_n_eft:=10,Top:=10,Height:=20,Width:=100因?yàn)锳ctiveX控件也可用OLEObjects集合中的OLEObj

41、ect對(duì)象代表,所以也 可用該集合中的對(duì)象來設(shè)置控件的屬性。例如要設(shè)置控件“ CommandBotton1的 左邊位置”屬性。Worksheets(1) OLEObjects( CommandButton1 ) Left=10那些不屬于OLEObject對(duì)象屬性的控件屬性,可通過由Object屬性返回的實(shí)際控件對(duì)象來設(shè)置。例如要設(shè)置控件“Comma ndButto n1的標(biāo)題。Worksheets(1) OLEObjects( CommandButton1 )Object Caption二 runme 因?yàn)樗械腛LE對(duì)象也是Shapes集合的成員,所以也可用該集合設(shè)置若干 控件的屬性。例如要

42、對(duì)齊第一張工作表上所有控件的左邊框。ForEachsInWorksheets(1) ShapesIfs Type=msoOLEControlObjectThens Left=10Next請(qǐng)注意,當(dāng)在控件所在工作表的類模塊之外使用控件的名稱時(shí),必須用工 作表的名稱限定該控件的名稱。在工作表上 ActiveX控件的事件處理過程中, Me 關(guān)鍵字所指向的是工作表,而非控件在Excelxx利用VBA創(chuàng)建多級(jí)選單Excel是我們常用的報(bào)表處理軟件之一,對(duì)于大多數(shù)人來說只是使用它進(jìn)行 打印報(bào)表,沒有注意其他功能,其實(shí)利用Excel內(nèi)嵌的VBA語言完全可以快速開發(fā)出自己企業(yè)的應(yīng)用系統(tǒng)來,而且應(yīng)用系統(tǒng)界面與其

43、它專業(yè)編程語言相當(dāng)相 似。下面筆者簡(jiǎn)單通過一個(gè)實(shí)例說明如何利用VBA創(chuàng)建多級(jí)選單。首先,我們對(duì)Excel中兩個(gè)重要的內(nèi)置函數(shù)auto_open()和auto_close()作一 簡(jiǎn)單說明。 auto_open():在打開工作簿時(shí)系統(tǒng)將自動(dòng)執(zhí)行該函數(shù),因此我們可以在該函數(shù)中調(diào)用自 己應(yīng)用程序的選單函數(shù)以及其它需要初始化設(shè)置的函數(shù)及宏語句;auto_close():在關(guān)閉工作簿時(shí)系統(tǒng)將自動(dòng)執(zhí)行該函數(shù)。所以我們需要在該函數(shù)中放置刪 除用戶自定義選單語句,否則只有退出Excel才能恢復(fù)EXCE的系統(tǒng)選單。在以下語句中,我們定義了選單設(shè)置函數(shù)Ope nM yMe nu(),用于設(shè)置多級(jí)選單,其他有關(guān)說明

44、見程序內(nèi)注釋,詳細(xì)代碼如下:Sub Ope nM yMe nu()自定義多級(jí)選單函數(shù)On Error Resume Next 忽略錯(cuò)誤MenuBars("MyMenu").Delete 刪除自定義選單Men uBars.Add ("MyMenu")自定義選單項(xiàng)Sheets("sheet1").SelectMenuBars("MyMenu").Menus.Add Caption:="金融"'增加第一個(gè)選單項(xiàng)金融”'以下三句為在金融”選單下增加銀行法、貨幣政策和條例”三項(xiàng)選單項(xiàng)Men

45、 uBars("MyMe nu").Me nus(” 金融").Me nultems.Add Captio n:="銀行法 ",OnAction:="銀行法"MenuBars("MyMenu").Menus(” 金融").Menultems.Add Caption:="貨幣政策 ",OnAction:="貨幣政策"MenuBars("MyMenu").Menus(” 金融").Menultems.Add Caption:=&q

46、uot;條例",O nActio n:="條例"以下為創(chuàng)建如圖所示的多級(jí)選單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ì)").Menultems.Add Caption:="農(nóng)業(yè)",O nActio n:="農(nóng)業(yè)"MenuBars("MyMenu").

47、Menus(" 經(jīng)濟(jì) ").MenuItems.Add Caption:="工業(yè)",O nActio n:="工業(yè)"MenuBars("MyMenu").Menus(" 經(jīng)濟(jì) ").MenuItems.AddMenu Caption:="第三產(chǎn)業(yè) "'以下三句為在 第三產(chǎn)業(yè)”選單下增加 概況、范疇”二項(xiàng)選單項(xiàng)和 飲食服務(wù) 業(yè)”子選單MenuBars("MyMenu”).Menus(” 經(jīng)濟(jì)”).Menultems(” 第三產(chǎn)業(yè) ").MenuIte

48、ms.AddCaption:="概況", OnAction:="概況"MenuBars("MyMenu”).Menus(” 經(jīng)濟(jì)").Menultems(” 第三產(chǎn)業(yè) ").Menultems.AddCaption:="xx", OnAction:="xx"MenuBars("MyMenu”).Menus(” 經(jīng)濟(jì)").Menultems(” 第三產(chǎn)業(yè)").Menultems.AddMenu Caption:="飲食服務(wù)業(yè) "'

49、以下二句為在飲食服務(wù)業(yè)”選單下增加酒店1、酒店 2”二項(xiàng)選單項(xiàng) MenuBars("MyMenu").Menus(” 經(jīng)濟(jì)").Menultems(” 第 三產(chǎn)業(yè)").Menultems(” 飲食服務(wù)業(yè)").Menultems.Add Caption:="酒店 1", OnAction:="酒店 1"MenuBars("MyMenu").Menus(” 經(jīng)濟(jì)”).Menultems(”第三產(chǎn)業(yè)”).Menultems(”飲食服務(wù)業(yè) ”).Menultems.Add Caption:=&

50、quot;酒店 2", OnAction:="酒店 2"MenuBars("MyMenu”).Activate 激活自定義選單下例就是對(duì)一名為 “經(jīng)濟(jì)評(píng)價(jià) .xls 的”工作簿實(shí)現(xiàn) “結(jié)構(gòu)”和“窗口”保護(hù):Sub保護(hù)工作簿()Workbooks (經(jīng)濟(jì)評(píng)價(jià)).ProtectPassword:="1234",Structure:=True,Windows:=TrueEnd subWorkbook 對(duì)象的 Unprotect 方法用于取消對(duì)工作簿的保護(hù)。 Unprotect 方法 只有一個(gè)參量,就是保護(hù)工作表時(shí)所用的口令。3.對(duì)工作簿進(jìn)行

51、隱藏保護(hù),可使他人無法看到其對(duì)應(yīng)的窗口。操作方法如 下:在VBA中使用 Workbook對(duì)象下面的 Windows對(duì)象的Visible屬性對(duì)工作簿 進(jìn)行隱藏和取消隱藏,Visible屬性的值可取“True和“Fals兩種。下面程序代碼完成對(duì)工作簿“ book.xl啲隱藏:Sub隱藏工作簿()Workbooks("book").ActivateActiveWindow.Visible = FalseEnd sub或:Sub隱藏工作簿()Workbooks("book").Windows( 1) .Visible=FalseEnd sub對(duì)工作表的保護(hù)1.

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

53、:利用VBA設(shè)置Worksheet對(duì)象的Visible屬性來隱藏工作表;Visible屬性的 值為以下三個(gè)值中的一個(gè):True 工作表為顯示狀態(tài)。False工作表為隱藏狀態(tài)。XIVerHidden工作表為隱藏狀態(tài),且用戶不能通過取消隱藏”對(duì)話框?qū)⑵涓?為顯示狀態(tài)。當(dāng)Visible的值為XIVerHidden時(shí),只能利用VBA將其重新設(shè)置為 True。Sub隱藏工作表()Worksheets(”基礎(chǔ)數(shù)據(jù)表 ”).Visible二FalseEnd sub67、求: 將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為 "萬元"的最簡(jiǎn)代碼 .求:將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為 "萬元"

54、的最簡(jiǎn)代碼 . 或能完成此功能的最便捷的命令操作 .寫了一個(gè) ,拋磚引玉 :Sub convt()Dim cel As RangeDim dec As VariantApplication.EnableEvents = Falseyesorno = MsgBox('確實(shí)將區(qū)域所有數(shù)值轉(zhuǎn)換為 萬元” ",vbYesNo + vbQuestion + vbDefaultButton1)If yesorno = vbYes Then1:dec = Application.lnputBox("請(qǐng)輸入小數(shù)位數(shù):", Default:=0,Type:=1)If dec

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論