EXCEL宏編程簡(jiǎn)明教程-_第1頁(yè)
EXCEL宏編程簡(jiǎn)明教程-_第2頁(yè)
EXCEL宏編程簡(jiǎn)明教程-_第3頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ì)利用 "錄制宏"的方法來(lái)學(xué)習(xí)宏:點(diǎn)擊Excel"工具"下拉菜單中"宏"下?quot;錄制新宏 " ,此后可象平時(shí)一樣進(jìn)行有關(guān)操作,待完成后停止錄制。然后再點(diǎn)擊 "工具"下 拉菜單中 "宏"下"宏"的"編輯"選項(xiàng)即可打開(kāi)剛才所錄制的宏的 Visual Basic 源 程序,并且可以在此時(shí)的 "幫助"下拉菜單中獲得有關(guān)的編程幫助

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

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

4、活動(dòng)狀態(tài)工作表,即當(dāng)前顯示的一個(gè)工作表。可用 Worksheets©ndex)來(lái)引用 Worksheet對(duì)象,其中index為工作表名稱(chēng) 或索引號(hào);如 Worksheets(1) 、Worksheets(" 第一季度數(shù)據(jù) ") 。工作表索引號(hào)表 明該工作表在工作表標(biāo)簽中的位置:第一個(gè)(最左邊的)工作表的索引號(hào)為 1, 最后一個(gè)(最右邊的)為 Worksheets.Count 。需要注意的是: 在使用過(guò)程中 Excel 會(huì)自動(dòng)重排工作表索引號(hào), 保持按照其在工作表標(biāo)簽中的從左至右排列, 工作表 的索引號(hào)遞增。 因此,由于可能進(jìn)行的工作表添加或刪除, 工作表索引號(hào)不一

5、定 始終保持不變。3、圖表: Chart 、Charts 、ChartObject 、ChartObjects 、ActiveChartChart 代表工作簿中的圖表。 該圖表既可為嵌入式圖表 (包含在 ChartObject 中),也可為一個(gè)分開(kāi)的(單獨(dú)的)圖表工作表。Charts 代表指定工作簿或活動(dòng)工作簿中所有圖表工作表的集合,但不包括 嵌入式在工作表或?qū)υ捒蚓庉嫳碇械膱D表。使用 Charts(index) 可引用單個(gè) Chart 圖表,其中 index 是該圖表工作表的索引號(hào)或名稱(chēng); 如 Charts(1) 、Charts(" 銷(xiāo)售圖表 ") 。圖表工作表的索引號(hào)表

6、示圖表工作表在工作簿的工作表標(biāo)簽欄上的 位置。 Charts(1) 是工作簿中第一個(gè)(最左邊的)圖表工作表; Charts(Charts.Count) 為最后一個(gè)(最右邊的)圖表工作表。ChartObject 代表工作表中的嵌入式圖表, 其作用是作為 Chart 對(duì)象的容器。利用 ChartObject 可以控制工作表上嵌入式圖表的外觀和尺寸。ChartObjects 代表指定的圖表工作表、對(duì)話框編輯表或工作表上所有嵌入 式圖表的集合??捎?ChartObjects(index) 引用單個(gè) ChartObject ,其中 index 為嵌入式圖表的編號(hào)或名稱(chēng)。如 Worksheets(&quo

7、t;Sheet1").ChartObjects(1) 、 Worksheets("sheet1").ChartObjects("chart1") 分別對(duì)應(yīng) "Sheet1" 工作表中的 第一個(gè)嵌入式圖表、以及名為 "Chart1" 的嵌入式圖表。ActiveChart 可以引用活動(dòng)狀態(tài)下的圖表,不論該圖表是圖表工作表,或嵌 入式圖表。 而對(duì)于圖表工作表為活動(dòng)工作表時(shí), 還可以通過(guò) ActiveSheet 屬性引 用之。4、單元格: Cells 、 ActiveCell 、 Range、AreasCells

8、(row,column) 代表單個(gè)單元格,其中 row 為行號(hào), column 為列號(hào)。如 可以用 Cells(1,1) 、Cells(10,4) 來(lái)引用 "A1" 、"D10" 單元格。 ActiveCell 代表 活動(dòng)工作表的活動(dòng)單元格,或指定工作表的活動(dòng)單元格。Ran ge代表工作表中的某一單元格、某一行、某一列、某一選定區(qū)域(該選 定區(qū)域可包含一個(gè)或若干連續(xù)單元格區(qū)域)或者某一三維區(qū)域??捎?Range(arg) 來(lái)引用單元格或單元格區(qū)域,其中 arg 可為單元格號(hào)、單 元格號(hào)范圍、單元格區(qū)域名稱(chēng)。如 Range("A5")

9、、 Range("A1:H8") 、Range("Criteria")。雖然可用Range("A1")返回單元格A1,但用Cells更方便, 因?yàn)榇藭r(shí)可用變量指定行和列??蓪?Range與 Cells 結(jié)合起來(lái)使用,如 Range(Cells(1,1),Cells(10,10)代表單元格區(qū)域 "A1:J10" ;而 expression.Cells(row,column) 返回單元格區(qū)域中 的一部分,其中expression是返回Range的表達(dá)式,row和column為相對(duì)于該 區(qū)域的左上角偏移量。如由 Rang

10、e("C5:C10").Cells(1,1) 引用單元格 C5。Areas為選定區(qū)域內(nèi)的連續(xù)單元格塊的集合,其成員是Range對(duì)象。而其中的每個(gè)Range對(duì)象代表選定區(qū)域內(nèi)與其它部分相分離的一個(gè)連續(xù)單元格塊。某些 操作不能在選定區(qū)域內(nèi)的多個(gè)單元格塊上同時(shí)執(zhí)行; 必須在選定區(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

11、分別代表活動(dòng)工作表、單元格區(qū)域范圍 Range指定工作表 中的所有行數(shù)、列數(shù)。對(duì)于一個(gè)多選單元格區(qū)域范圍 Range的Rows Columns, 只返回該范圍中第一個(gè)區(qū)域的行數(shù)、列數(shù)。例如,如果 Ra nge對(duì)象有兩個(gè)區(qū)域(areas)A1:B2 和 C3:D4,Rows.Count返回 2 而不是 4。可通過(guò)Rows行號(hào))、Columns(列號(hào))來(lái)引用相應(yīng)的行與列;女口 Rows(3)、 Columns(4)分別對(duì)應(yīng)第三行、D列。利用Rows Column可以獲得區(qū)域中第一塊的第一行行號(hào)、第一列列號(hào),所得值 均以十進(jìn)制數(shù)表示。三) 、處理單元格1 、直接賦值與引用 將變量、常量值直接賦給單元

12、格、或?qū)卧竦闹抵苯淤x給變量、常量,這 是在 Excel 中最簡(jiǎn)單的單元格賦值及引用方法。如下例將工作表 "Sheet1"A1 單 元格的值賦給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、用公式賦值在宏的使用中, 可能會(huì)更多地用公式來(lái)給單元格賦值。 如下例將相對(duì)于活動(dòng) 單元格左側(cè)

13、第 4 列、向上第 6 行至向上第 2 行的單元格數(shù)值之和賦給活動(dòng)單元格 (以本行、本列為第 0 行、0 列):ActiveCell.Formula="=AVERAGE(R-6C-4:R-2C-4)"3、引用其它工作表中的單元格 當(dāng)賦值公式中需要引用其它工作表中的單元格時(shí), 在被引用的單元格前加上"工作表名!"即可。如以下即在賦值中引用了 "Sheetl"工作表中的A1至A4單元 格:Range("E10").Formula="=SUM(Sheet1!R1C1:R4C1)" 但需注意的是:當(dāng)被引

14、用的工作表名中含有某些可能引起公式歧義的字符 時(shí),需要用單引號(hào) ' 將工作表名括起來(lái)。如:Worksheets("Sheet1").ActiveCell.Formula="=Max('1-1剖面'!D3:D5)"4、引用其它工作簿中的單元格在被引用單元格所在工作表名前加上 " 工作簿名 " ,即可引用其它工作簿中 的單元格。如:ActiveCell.Formula="=MAX(Book1.xlsSheet3!R1C:RC4)" 同樣需注意的是:當(dāng)被引用的工作簿名中含有某些可能引起公式歧義的字

15、符時(shí), 需要用中括號(hào) "" 、"" 及單引號(hào) ' 將工作簿名括起來(lái)。如:Cells(1,2).Formula="=MIN('1995-2000 總結(jié).xls1995-1996 年'! $A$1:$A$6)"5、避免循環(huán)引用在上述公式賦值過(guò)程中, 應(yīng)避免在公式中引用被賦值的單元格, 防止循環(huán)引 用錯(cuò)誤。6、添加批注可按如下方法格給單元格添加批注:Dim 批注文本 As String批注文本 =" 批注示例 " ' 準(zhǔn)備批注文本ActiveCell.AddComment ' 添加

16、批注ActiveCell.Comment.Text Text:= 臨時(shí) ' 寫(xiě)入批注文本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").

17、Delete Shift:=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("

18、B10:C13").Copy '復(fù)制 B10至 C13單元格區(qū)域Cells(1,2).Cut ' 剪切 B1 單元格Range("D10").SelectActiveSheet.Paste ' 自D10單元格起粘貼剪貼板中的內(nèi)容四 ) 、圖表1 、工作表圖表以下為一添加工作表圖表的實(shí)例。Charts.Add after:=Worksheets("Sheet1") '在"Sheet1"工作表之后添加新 圖表工作表ActiveChart.ChartType=xlXYScatterSmooth &#

19、39;圖表類(lèi)型為 XY平滑線散點(diǎn)圖 ActiveChart.SetSourceData Source:=Sheets(" 結(jié)點(diǎn)坐標(biāo) ").Range("A1:B69"), PlotBy:= _xlColumns '圖表數(shù)據(jù)來(lái)源于"結(jié)點(diǎn)坐標(biāo)"工作表的A1至B69單元格,且按列 繪圖。ActiveChart.Location Where:=xlLocationAsNewSheetWith ActiveChart.HasTitle = True.ChartTitle.Characters.Text = " 節(jié)點(diǎn)坐標(biāo)&quo

20、t; ' 圖表標(biāo)題"節(jié)點(diǎn)坐標(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.Characters.Text = "y" 'y 軸標(biāo)題 "y"

21、End With顯示 x 軸主網(wǎng)格線,默認(rèn)情況下為顯示 顯示 x 軸次網(wǎng)格線,默認(rèn)情況下為不顯標(biāo)出 x 軸主網(wǎng)格值,默認(rèn)情況下為標(biāo)注 取消 x 軸次網(wǎng)格值標(biāo)注,默認(rèn)情況下為With ActiveChart.Axes(xlCategory) .HasMajorGridlines = True ' .HasMinorGridlines = True ' 示End WithWith ActiveChart.Axes(xlValue) .HasMajorGridlines = True ' .HasMinorGridlines = False 不標(biāo)注End WithActive

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

23、quot;A2:B2"), PlotBy:=xlRows ' 設(shè)置圖表數(shù)據(jù)來(lái)源With 嵌入表 .Chart.HasTitle = False ' 無(wú)圖表標(biāo)題.Axes(xlCategory, xlPrimary).HasTitle = False ' 無(wú) x 軸標(biāo)題 .Axes(xlValue, xlPrimary).HasTitle = False ' 無(wú) y 軸標(biāo)題End With五 ) 、工作表1、添加Sheets.Add before:=Sheets(1) ' 在第 1 工作表前添加新工作表Sheets.Add after:=Shee

24、ts(Sheets.Count) ' 在最后工作表后添加新工作表 2、移動(dòng)ActiveSheet.Move before:=Sheets(2) ' 將當(dāng)前工作表移動(dòng)至第 2 工作表之、八前3、命名ActiveSheet.Name=" 工作表名 " ' 將當(dāng)前工作表命名為 " 工作表名 "4、刪除 可以用以下語(yǔ)句刪除當(dāng)前工作表。ActiveSheet.Delete但在刪除前 Excel 會(huì)自動(dòng)彈出提示框, 需在用戶確認(rèn)后方可執(zhí)行刪除。 為避 免這一干擾,可以先用以下語(yǔ)句關(guān)閉 Excel 的警告提示。Application.Displ

25、ayAlerts = False在刪除完成后,再重新打開(kāi) Excel 的警告提示Application.DisplayAlerts = True六) 、工作簿Excel 的宏對(duì)工作簿的操作主要為保存。Dim 存盤(pán)文件名 As StringActiveWorkbook.Save ' 保存當(dāng)前工作簿存盤(pán)文件名 ="工作表名 "ActiveWorkbook.SaveAs 存盤(pán)文件名 ' 當(dāng)前工作簿另存為 " 工作表名 .xls" 在另存時(shí), 若指定的存盤(pán)文件名不包含路徑, 則保存在該工作簿的打開(kāi)目錄 下。而若此存盤(pán)文件已存在, 也可用關(guān)閉 Ex

26、cel 警告提示的方法以免其自動(dòng)彈出 提示框。64、用過(guò)VB的人都應(yīng)該知道如何聲明變量,在VBA中聲明變量和VB中是完全一 樣的! 使用 Dim 語(yǔ)句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 (只限變長(zhǎng)字符串)、St

27、ring * length(定長(zhǎng)字符串)、 Object 、Variant 、用戶定義類(lèi)型或?qū)ο箢?lèi)型 強(qiáng)制聲明變量Option Explicit 說(shuō)明:該語(yǔ)句必在任何過(guò)程之前出現(xiàn)在模塊中。 聲明常數(shù),用來(lái)代替文字值。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 M

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

29、ub my_offsetActiveCell.Offset(0, 1).Select'ActiveCell.Offset(0, -1).Select'ActiveCell.Offset(1 ,ActiveCell.Offset(-1 end sub如果上述程序產(chǎn)生錯(cuò)誤那是因?yàn)閱卧癫荒芤苿?dòng), 為了解除上述錯(cuò)誤, 我們可以 往sub my_offset 之下加一段代碼 on error resume next 注意以下代碼都不再添加 sub “代碼名稱(chēng)” 和 end sub 請(qǐng)自己添加 ! 給當(dāng)前單元格賦值:ActiveCell.Value = "你好! "給

30、特定單元格加入一段代碼 :例如:在A1單元格中插入"HELLO "Range("a1").value="hello"又如:你現(xiàn)在的工作簿在sheetl上,你要往sheet2的Al單元格中插入"HELLO"1. sheets("sheet2").selectrange("a1").value="hello" 或 2.Sheets("sheet1").Range("a1").Value = "hello&quo

31、t; 說(shuō)明:1. sheet2被打開(kāi),然后在將“ HELLO放入到A1單元格中。2. sheet2不被打開(kāi),將“ HELLO放入到A1單元格中。 隱藏工作表'隱藏SHEET這張工作表sheets("sheet1").Visible=False'顯示SHEET這張工作表sheets("sheet1").Visible=True有時(shí)候我們想把所有的EXCEL中的SHEET都打印預(yù)覽,請(qǐng)使用該段代碼,它將在 你現(xiàn)有的工作簿中循環(huán),直到最后一個(gè)工作簿結(jié)束循環(huán)預(yù)覽。Dim my As WorksheetFor Each my In Workshee

32、ts my.PrintPreview Next my 得到當(dāng)前單元格的地址 msgbox ActiveCell.Address 得到當(dāng)前日期及時(shí)間 msgbox date & chr(13) & time 保護(hù)工作簿ActiveSheet.Protect取消保護(hù)工作簿ActiveSheet.Unprotect給當(dāng)前工作簿改名為 "liu"ActiveSheet.Name = "liu"打開(kāi)一個(gè)應(yīng)用程序AppActivate (Shell("C:WINDOWSCALC.EXE")增加一個(gè)工作簿W(wǎng)orksheets.Add

33、刪除當(dāng)前工作簿activesheet.delete打開(kāi)一個(gè)文件Workbooks.Open "C:My DocumentsBook2.xls" 關(guān)閉當(dāng)前工作簿ActiveWindow.Close當(dāng)前單元格定為:左對(duì)齊Selection.HorizontalAlignment = xlLeft 當(dāng)前單元格定為:中心對(duì)齊Selection.HorizontalAlignment = xlCenter 當(dāng)前單元格定為:右對(duì)齊Selection.HorizontalAlignment = xlRight當(dāng)前單元格為百分號(hào)風(fēng)格Selection.Style = "Perce

34、nt" 當(dāng)前單元格字體為粗體Selection.Font.Bold = True 當(dāng)前單元格字體為斜體 Selection.Font.Italic = True 當(dāng)前單元格字體為宋體 20 號(hào)字With Selection.Font .Name = " 宋體 " .Size = 20 End WithWith 語(yǔ)句With 對(duì)象. 描述End With 讓你的機(jī)器發(fā)出響聲 BEEP 清除單元格中所有文字、批注、格式、所有的東西! ActiveCell.Clear測(cè)試選擇狀態(tài)的單元格的行數(shù)MsgBox Selection.Rows.Count 測(cè)試選擇狀態(tài)的單元格的

35、列數(shù)MsgBox Selection.Columns.Count 測(cè)試選擇狀態(tài)的單元格的地址 Selection.Address 讓所有的錯(cuò)誤不再發(fā)生ON ERROR RESUME NEXT 產(chǎn)生錯(cuò)誤時(shí)讓錯(cuò)誤轉(zhuǎn)到另一個(gè)地方 on error goto l'code l: 'code 刪除一個(gè)文件 kill "c:1.txt" 定制自己的狀態(tài)欄 Application.StatusBar = "現(xiàn)在時(shí)刻 : " & Time恢復(fù)自己的狀態(tài)欄Application.StatusBar = false 在運(yùn)行期執(zhí)行一個(gè)宏Applicat

36、ion.Run macro:="text" 滾動(dòng)窗口到 a1 的位置 ActiveWindow.ScrollRow = 1 ActiveWindow.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)生一個(gè) inputbox< 輸入框 >InputBox ("Enter number of months t

37、o add")得到一個(gè)文件名:Dim kk As Stringkk = Application.GetOpen("EXCEL (*.XLS), *.XLS", Title:="提示:請(qǐng)打開(kāi)一個(gè)EXCEL文件:")msgbox kk打開(kāi)zoom顯示比例對(duì)話框Application.Dialogs(xlDialogZoom).Show激活字體對(duì)話框Application.Dialogs(xlDialogActiveCellFont).Show打開(kāi)另存對(duì)話框Dim kk As Stringkk = Application.GetSaveAs(&quo

38、t;excel (*.xls), *.xls")Workbooks.Open kk此段代碼尋找字符串中特定字符的位置, 需要建立一個(gè)窗體, 并在窗體中, 放入TEXTBOX1,TEXTBO和2TEXTBOX3(個(gè)文本框)及 COMMANDBUTT按鈕()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)

39、= 0 Then Exit Dokk = InStr(i, a, b, vbTextCompare)YY = YY & CStr(kk) & "/"i = kk + 1Loop While aa >= iTextBox3.Text = YYEnd SubActiveX 控件在 Excel97 中的運(yùn)用Excel97 在工作表或圖表上可使用 ActiveX 控件,根據(jù)我使用的體 會(huì),在工作上處理控件時(shí),必須注意和了解如下事項(xiàng):( 一)用 Excel5.0/95 工作簿文件格式保存 Excel97 工作簿時(shí),將選擇 ActiveX 控件信息。 當(dāng)用戶通過(guò)雙

40、 擊鼠標(biāo)來(lái)編輯內(nèi)嵌在其它應(yīng)用程序文檔中的 Excel97 工作簿時(shí),該工作簿上的控 件將不會(huì)正常工作。 如果用戶是通過(guò)用右鍵單擊工作簿, 然后選中快捷菜單上的“打開(kāi)”命令來(lái)編輯工作簿的話,工作簿上的控件就能正常工作了。(二)當(dāng)ActiveX控件處于激活狀態(tài)時(shí),將禁用某些 MicrosoftExcelVisualBasic 方法和屬性。例如,當(dāng)某一控件激活時(shí),就不能使 用 Sort 方法,故下述按鈕單擊事件處理過(guò)程中的代碼將失敗 ( 因?yàn)橛脩魡螕舭粹o 后,該按鈕就處于激活狀態(tài) ) 。PrivateSubCommandButton1 ClickRange(' a1:a10 ) SortKe

41、y1:=Range( " aT)EndSub 解決辦法是通過(guò)選激活工作表上其它元素的方法來(lái)繞過(guò)這種問(wèn)題。 例如,可用下列代碼對(duì)單元格區(qū)域排序:PrivateSubCommandButton1 ClickRange( aT ) ActivateRan ge(' a1:a10 ) SortKey1:=Ra nge( " aT) CommandButton1 ActivateEnd Sub(三)在 MicrosoftExcel 中,用 OLEObjects 集合中的 OLEObject對(duì)象 代表 ActiveX 控件。如果要用編程的方式向工作表添加 ActiveX 控件,

42、可用 OLEObjects集合的Add方法。例如向第一張工作表添加命令按鈕。Worksheets(1) OLEObjects Add " Forms CommandButton 1, _ Left:=10,Top:=10,Height:=20,Width:=100因?yàn)锳ctiveX 控件也可用 OLEObjects集合中的OLEObject對(duì)象代 表,所以也可用該集合中的對(duì)象來(lái)設(shè)置控件的屬性。例如要設(shè)置控件“ Comma ndBotto n1的“左邊位置”屬性。Worksheets(1) OLEObjects( " CommandButton 1 ) Left=10 那些不

43、屬于OLEObject對(duì)象屬性的控件屬性,可通過(guò)由Object屬性 返回的實(shí)際控件對(duì)象來(lái)設(shè)置。例如要設(shè)置控件“Comma ndButt on1的標(biāo)題。Worksheets( 1) OLEObjects( CommandButton1 )Object Caption= runme因?yàn)樗械腛LE對(duì)象也是Shapes集合的成員,所以也可用該集合設(shè) 置若干控件的屬性。例如要對(duì)齊第一張工作表上所有控件的左邊框。ForEachsInWorksheets(1) ShapesIfs Type=msoOLEControlObjectThens Left=10Next 請(qǐng)注意,當(dāng)在控件所在工作表的類(lèi)模塊之外使用

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

45、open() :在打開(kāi)工作簿時(shí)系統(tǒng)將自動(dòng)執(zhí)行該函數(shù), 因此我們可以在該函數(shù) 中調(diào)用自己應(yīng)用程序的選單函數(shù)以及其它需要初始化設(shè)置的函數(shù)及宏語(yǔ)句; auto_close() :在關(guān)閉工作簿時(shí)系統(tǒng)將自動(dòng)執(zhí)行該函數(shù)。 所以我們需要在該函數(shù) 中放置刪除用戶自定義選單語(yǔ)句,否則只有退出Excel才能恢復(fù)EXCE的系統(tǒng)選 單。在以下語(yǔ)句中,我們定義了選單設(shè)置函數(shù)OpenMyMenu(,用于設(shè)置多級(jí)選單,其他有關(guān)說(shuō)明見(jiàn)程序內(nèi)注釋?zhuān)敿?xì)代碼如下:Sub Ope nMyMeu()'自定義多級(jí)選單函數(shù)On Error Resume Next '忽略錯(cuò)誤Men uBars("MyMe nu&

46、quot;).Delete '刪除自定義選單MenuBars.Add ("MyMenu")'自定義選單項(xiàng)Sheets("sheet1").SelectMenuBars("MyMenu").Menus.Add Caption:=" 金融"'增加第一個(gè)選單項(xiàng)“金融”'以下三句為在“金融”選單下增加“銀行法、貨幣政策和條例”三項(xiàng)選單項(xiàng)Men uBars("MyMe nu ").Me nus("金融").Me nultems.Add Cap ti on

47、 :二"銀行法",OnAction:=" 銀行法"MenuBars("MyMenu").Menus("金融").Menultems.Add Caption:二"貨幣政策",OnAction:=" 貨幣政策 "Men uBars("MyMe nu ").Me nus(” 金融").Me nultems.Add Cap ti on :二"條例", OnAction:=" 條例"'以下為創(chuàng)建如圖所示的多級(jí)

48、選單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)Men uBars("MyMe nu ").Me nus(” 經(jīng)濟(jì)").Me nultems.Add Cap ti on :二"農(nóng)業(yè)", OnAction:=" 農(nóng)業(yè)"Men uBars("MyMe nu ").Me nus("經(jīng)濟(jì)").Me nulte

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

50、n uBars("MyMe nu").Me nus("經(jīng)濟(jì)").Me nultems(" Caption:=" 概況", OnAction:=" 概況"Men uBars("MyMe nu").Me nus("經(jīng)濟(jì)").Me nultems(" Caption:=" 范疇", OnAction:=" 范疇"Men uBars("MyMe nu").Me nus("經(jīng)濟(jì)").Me

51、 nultems(" ").Menultems.AddMenu Caption:=" 飲食服務(wù)業(yè) " '以下二句為在“飲食服務(wù)業(yè)”選單下增加“酒店Men uBars("MyMe nu").Me nus("經(jīng)濟(jì)").Me nultems("食服務(wù)業(yè) ").Menultems.Add Caption:=" 酒店 1", OnAction:=" 酒店 1"MenuBars("MyMenu").Menus("經(jīng)濟(jì)")

52、.Menultems("第三產(chǎn)業(yè)").Menultems("飲食服務(wù)業(yè) ").Menultems.Add Caption:=" 酒店 2", OnAction:=" 酒店 2"End SubSub auto_ope n()'系統(tǒng)自動(dòng)打開(kāi)運(yùn)行宏OpenMyMenU調(diào)用用戶選單函數(shù)End SubSub auto_close()'系統(tǒng)自動(dòng)關(guān)閉運(yùn)行宏On Error Resume Next '忽略錯(cuò)誤Men uBars("MyMe nu").Delete '刪除自定義選單

53、End Sub讀者可以在自己的工作簿選單“工具”中的“宏”下, 創(chuàng)建以上三個(gè)函數(shù)并將以 上函數(shù)語(yǔ)句拷貝到其中即可運(yùn)行。66、.用VBA編程)保護(hù)Excel文檔VBA(Visual Basic for Application)是 Excel 應(yīng)用程序中功能非常強(qiáng)大的編程語(yǔ)言,為了規(guī)范不同的用戶對(duì) Excel 應(yīng)用程序的訪問(wèn)能力,需要對(duì) Excel 文檔及有關(guān)的數(shù)據(jù)進(jìn)行有效的保護(hù), 這里根據(jù)自己及同行們的體會(huì),從以下二 個(gè)方面介紹用VBA編程法實(shí)現(xiàn)對(duì)Excel文檔的保護(hù)。對(duì)工作簿的保護(hù)1. 利用VBA中Workbook對(duì)象的SaveAs方法實(shí)現(xiàn)對(duì)工作簿的保護(hù),下面就對(duì)SaveAs有關(guān)的參量作一介紹

54、:該字符串表示要保存的文件名。 可包含完整路徑。 如果不指定路徑, Microsoft Excel 將文件保存到當(dāng)前文件夾。: 可選,文件的保存格式。Password :為一個(gè)區(qū)分大小寫(xiě)的字符串(不超過(guò) 15個(gè)字符) ,用于指定文件 的保護(hù)密碼。WriteResPassword: 該字符串表示文件的寫(xiě)保護(hù)密碼。 如果文件保存時(shí)帶有密 碼,但打開(kāi)文件時(shí)不輸入密碼,則該文件以只讀模式打開(kāi)。ReadOnlyRecommended如果為T(mén)rue則在打開(kāi)文件時(shí)顯示一條信息,提示該文 件以只讀模式打開(kāi)。下例就是在 Excel 應(yīng)用程序中添加一工作簿,將工作簿按常規(guī)文件格式存為“C:經(jīng)濟(jì)評(píng)價(jià).xls ”文件

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

56、,取消對(duì)該工作表或工作簿的 保護(hù)時(shí)必須提供該密碼。 如果忘記了密碼, 就無(wú)法取消對(duì)該工作表或工作簿的保 護(hù)。最好在安全的 地方保存一份密碼及其對(duì)應(yīng)文檔名的列表。Structure : 若為 True 則保護(hù)工作簿結(jié)構(gòu)(工作簿中工作表的相對(duì)位置)。默 認(rèn)值為 False。Windows 若為 True 則保護(hù)工作簿窗口。下例就是對(duì)一名為“經(jīng)濟(jì)評(píng)價(jià) .xls ”的工作簿實(shí)現(xiàn)“結(jié)構(gòu)”和“窗口”保護(hù): Sub 保護(hù)工作簿()Workbooks ("經(jīng)濟(jì)評(píng)價(jià)").Protect Password: ="1234", Structure: =True, Window

57、s:=TrueEnd subWorkbook對(duì)象的Un protect方法用于取消對(duì)工作簿的保護(hù)。Un protect方法只有 一個(gè)參量,就是保護(hù)工作表時(shí)所用的口令。3. 對(duì)工作簿進(jìn)行隱藏保護(hù),可使他人無(wú)法看到其對(duì)應(yīng)的窗口。操作方法如下:在VBA中使用 Workbook對(duì)象下面的 Windows對(duì)象的Visible 屬性對(duì)工作簿進(jìn)行 隱藏和取消隱藏,Visible屬性的值可取“ True”和“ False ”兩種。 下面程序代碼完成對(duì)工作簿“ book.xls ”的隱藏:Sub 隱藏工作簿()Workbooks("book").ActivateActiveWindow.Vi

58、sible = FalseEnd sub或:Sub 隱藏工作簿()Workbooks("book").Windows (1) .Visible=FalseEnd sub對(duì)工作表的保護(hù)1. 對(duì)工作表實(shí)現(xiàn)口令保護(hù)利用 VBA調(diào)用Worksheet對(duì)象的Protect方法對(duì)工作 表進(jìn)行保護(hù), Protect 帶有以下參量:Password 用于保護(hù)工作表的口令。Draw in gobjects 若為T(mén)rue ,則對(duì)工作表中的 Drawi ngobjects 對(duì)象進(jìn)行保護(hù),缺 省值為 True。Contents若為T(mén)rue,則對(duì)單元格內(nèi)容進(jìn)行保護(hù),缺省值為 True。 下面程序代碼

59、完成對(duì)工作表“基礎(chǔ)數(shù)據(jù)表”的保護(hù):Sub 保護(hù)工作表()Worksheets ("基礎(chǔ)數(shù)據(jù)表").Protect Password:="1234"End sub2. 對(duì)工作表實(shí)現(xiàn)隱藏保護(hù),使他人無(wú)法看到工作表:利用VBA設(shè)置Worksheet對(duì)象的Visible屬性來(lái)隱藏工作表;Visible屬性的值 為以下三個(gè)值中的一個(gè):True 工作表為顯示狀態(tài)。False 工作表為隱藏狀態(tài)。XlVerHidden 工作表為隱藏狀態(tài), 且用戶不能通過(guò)“取消隱藏”對(duì)話框?qū)⑵涓臑?顯示狀態(tài)。當(dāng)Visible的值為XlVerHidden時(shí),只能利用VBA將其重新設(shè)置為T(mén)r

60、ue。Sub 隱藏工作表()Worksheets(" 基礎(chǔ)數(shù)據(jù)表 ").Visible=FalseEnd sub67、求: 將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為 "萬(wàn)元"的最簡(jiǎn)代碼 . 求:將所選區(qū)域中的數(shù)值全部轉(zhuǎn)化為 "萬(wàn)元"的最簡(jiǎn)代碼 . 或能完成此功能的最便捷的命令操作 .寫(xiě)了一個(gè) ,拋磚引玉 :Sub convt()Dim cel As RangeDim dec As VariantApplication.EnableEvents = Falseyesorno = MsgBox(" 確實(shí)將區(qū)域所有數(shù)值轉(zhuǎn)換為“萬(wàn)元”?&quo

61、t;, vbYesNo + vbQuestion + vbDefaultButton1)If yesorno = vbYes Then1: dec = Application.InputBox(" 請(qǐng)輸入小數(shù)位數(shù) :", Default:=0, Type:=1)If dec = "" ThenGoTo 1End IfFor Each cel In SelectionIf IsNumeric(cel.Value) Then'cel = (Round(cel.Value / 10000, 2) & "萬(wàn)元 "cel = (Round(cel.Value / 10000, dec)End IfNextElseIf yesorno = vbNo ThenExit SubEnd IfEnd Sub以下當(dāng)為最簡(jiǎn)代碼吧 .Sub Macro2() Selection.NumberFormatLocal = "#"".""#,"End Sub68、在VBA開(kāi)發(fā)環(huán)境中,點(diǎn)擊工具附加控件,出現(xiàn)如下窗口: 在可選控件中選擇 microsoft orogres

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論