EXCELVBA編程從入門到精通_第1頁
EXCELVBA編程從入門到精通_第2頁
EXCELVBA編程從入門到精通_第3頁
EXCELVBA編程從入門到精通_第4頁
EXCELVBA編程從入門到精通_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、EXCEL VBA編程基礎Excel 最重要的應用就是利用公式進行計算。無論輸入是純粹的數(shù)字運算,還是引用其他單元格計算,只要在一個單元格中輸入公式,就能得到結果。這個直接顯示結果的設計對于絕大多數(shù)場合來說都是適用的,但某些情況下就不那么讓人滿意了。比如說在做工程施工的預結算編寫,使用Excel,既要寫出工程量的計算式,也要看到它的結果,于是這樣相同的公式在Excel里面要填兩次,一次在文本格式的單元格中輸入公式,一次是在數(shù)據(jù)格式的單元格中輸入公式讓Excel計算結果。如何既能看到公式又能看到結果呢?這個問題筆者認為可以從兩個方面考慮:一種方法是所謂“已知結果,顯示公式”,先在數(shù)據(jù)格式單元格中

2、輸入公式讓Excel計算結果,然后在相鄰的單元格中看到公式;另一種方法所謂“已知公式,顯示結果”,就是先在一個文本格式的單元格中輸入公式,在相鄰的單元格中看到結果。已知結果,顯示公式假設C列為通過公式計算得到的結果(假設C1為“=A1+B1”,或者直接是數(shù)字運算“=2+3”),而相鄰的D列是你需要顯示公式的地方(即D1應該顯示為“=A1+B1”或者“=2+3”)。1. 打開“工具”菜單選擇“選項”命令,出現(xiàn)“選項”對話框。2. 在“常規(guī)”選項卡中,選中“R1C1引用方式”選項。3. 定義名稱,將“引用位置”由“=GET.CELL(6,Sheet1!RC-1)”即可。這里的RC-1含義是如果在當

3、前單元格的同行前一列單元格中有公式結果,則在當前單元格中得到公式內(nèi)容,即在含公式結果單元格的同行后一列單元格顯示公式內(nèi)容;如果將RC-1改為RC1,則在公式結果的同行前一列單元格顯示公式內(nèi)容。4. 如果“引用位置”中含有“RC-1”,則在含公式結果單元格的同行后一列單元格中輸入“=FormulaofResult”即可得到公式;如果“引用位置”中含有“RC1”,則在含公式結果單元格的同行前一列單元格中輸入“=FormulaofResult”即可得到公式。提示:如果想要在含公式結果單元格的同行后數(shù)第2列中顯示公式內(nèi)容,則需要把“引用位置”中的“RC 1 ”改為“RC 2 ”。-get.cell函數(shù)

4、說明函數(shù)定義:GET.CELL(類型號,單元格(或范圍)實例:比如現(xiàn)在我們要取得A1單元格里的數(shù)據(jù)格式?結果顯示在B1步驟如下:1.任選一個單元格->插入->名稱->定義2.在名稱稱輸入AA(任意名稱)3.在引用位置上寫入=GET.CELL(7,Sheet1!$A$1)4.點添加5.在B1單元格里輸入=AA其中類型號,即你想要得到的信息的類型號,可以在1-66(表示可以返回一個單元格里66種你要的信息)以下是類型號及代表的意思1 參照儲存格的絕對地址2 參照儲存格的列號3 參照儲存格的欄號4 類似TYPE函數(shù)5 參照地址的內(nèi)容6 文字顯示參照位址的公式7 參照位址的格式,文字

5、顯示8 文字顯示參照位址的格式9 傳回儲存格外框左方樣式,數(shù)字顯示10 傳回儲存格外框右方樣式,數(shù)字顯示11 傳回儲存格外框方上樣式,數(shù)字顯示12 傳回儲存格外框方下樣式,數(shù)字顯示13 傳回內(nèi)部圖樣,數(shù)字顯示14 如果儲存格被設定locked傳回True15 如果公式處于隱藏狀態(tài)傳回True16 傳回儲存格寬度17 以點為單位傳回儲存格高度 18 字型名稱19 以點為單位元傳回字號20 如果儲存格所有或第一個字符為加粗傳回 True21 如果儲存格所有或第一個字符為斜體傳回 True22 如果儲存格所有或第一個字符為單底線傳回True23 如果儲存格所有或第一個字符字型中間加了一條水平線傳回

6、True24 傳回儲存格第一個字符色彩數(shù)字, 1 至 56。如果設定為自動,傳回025 MS Excel不支持大綱格式26 MS Excel不支持陰影格式27 數(shù)字顯示手動插入的分頁線設定28 大綱的列層次29 大綱的欄層次30 如果范圍為大綱的摘要列則為 True31 如果范圍為大綱的摘要欄則為 True32 顯示活頁簿和工作表名稱33 如果儲存格格式為多行文字則為 True34 傳回儲存格外框左方色彩,數(shù)字顯示。如果設定為自動,傳回 035 傳回儲存格外框右方色彩,數(shù)字顯示。如果設定為自動,傳回 036 傳回儲存格外框上方色彩,數(shù)字顯示。如果設定為自動,傳回 037 傳回儲存格外框下方色彩

7、,數(shù)字顯示。如果設定為自動,傳回 038 傳回儲存格前景陰影色彩,數(shù)字顯示。如果設定為自動,傳回 039 傳回儲存格背影陰影色彩,數(shù)字顯示。如果設定為自動,傳回 040 文字顯示儲存格樣式41 傳回參照地址的原始公式42 以點為單位傳回使用中窗口左方至儲存格左方水平距離43 以點為單位傳回使用中窗口上方至儲存格上方垂直距離44 以點為單位傳回使用中窗口左方至儲存格右方水平距離45 以點為單位傳回使用中窗口上方至儲存格下方垂直距離46 如果儲存格有插入批注傳回 True47 如果儲存格有插入聲音提示傳回 True48 如果儲存格有插入公式傳回 True49 如果儲存格是數(shù)組公式的范圍傳回 Tru

8、e50 傳回儲存格垂直對齊,數(shù)字顯示51 傳回儲存格垂直方向,數(shù)字顯示52 傳回儲存格前綴字符53 文字顯示傳回儲存格顯示內(nèi)容54 傳回儲存格數(shù)據(jù)透視表名稱55 傳回儲存格在數(shù)據(jù)透視表的位置56 樞紐分析57 如果儲存格所有或第一個字符為上標傳回True58 文字顯示傳回儲存格所有或第一個字符字型樣式59 傳回儲存格底線樣式,數(shù)字顯示60 如果儲存格所有或第一個字符為下標傳回True61 樞紐分析62 顯示活頁簿和工作表名稱63 傳回儲存格的填滿色彩64 傳回圖樣前景色彩65 樞紐分析66 顯示活頁簿名稱-已知公式,顯示結果假設C列為輸入的沒有等號公式(假設C1為“A1+B1”),而相鄰的D列

9、是你需要存放公式計算結果的地方(即D1顯示A1和B1單元格相加的結果)。1. 選中D1,然后打開“插入”菜單選擇“名稱”命令中的“定義”子命令,出現(xiàn)“定義名稱”對話框。2. 在“在當前工作表中的名稱”輸入欄中輸入定義的名稱“ResultofFomula”,在下方的“引用位置”編輯欄中輸入“=EVALUATE(Sheet1!C1)”,單擊確認按鈕退出。3. 在 D1中輸入“=ResultofFomula”,然后選中按住右下角的填充柄向下拉動填充即可。提示:EVALUATE 是Eexcel 40版的宏表函數(shù),Excel 2000和Excel 2002中還支持,但只可用于名稱定義中。4. 填充后要按

10、F9進行重算,如果C列的公式有改動,也需要及時按F9進行重算。巧施妙計,就能讓公式和結果在Excel中和平共處了,你也試試吧。62、Microsoft Excel是一款功能非常強大的電子表格軟件。它可以輕松地完成數(shù)據(jù)的各類數(shù)學運算,并用各種二維或三維圖形形象地表示出來,從而大大簡化了數(shù)據(jù)的處理工作。但若僅利用Excel的常用功能來處理較復雜的數(shù)據(jù),可能仍需進行大量的人工操作。但Excel的強大遠遠超過人們的想象-宏的引入使其具有了無限的擴展性,因而可以很好地解決復雜數(shù)據(jù)的處理問題。隨著支持Windows的應用程序的不斷增多和功能的不斷增強,越來越多的程序增加了宏處理來方便用戶的自由擴展。但初期

11、各應用程序所采用的宏語言并不統(tǒng)一,這樣用戶每使用一種應用程序時都得重新學習一種宏語言。為了統(tǒng)一各種應用程序下的宏,Microsoft推出了VBA(Visual Basic for Applications)語言。VBA是從流行的Visual Basic編程語言中派生出來的一種面向應用程序的語言,它適用于各種Windows應用程序,可以解決各應用程序的宏語言不統(tǒng)一的問題。除此之外,使用VBA語言還有如下優(yōu)點:1、VBA是一種通用程序語言,通過它不僅可以共享Microsoft相關的各種軟件(如Excel、Word、Access),而且隨著其它的一些軟件(如大名鼎鼎的AutoCAD2000)等對VB

12、A的支持,這些軟件也已進入到了VBA的控制范圍;2、可以將用VBA編寫的程序復制到Visual Basic中調(diào)試并運行,從而實現(xiàn)用Visual Basic來控制有關的應用程序;3、VBA提供的大量內(nèi)部函數(shù)大大簡化了用戶的操作。對于而今的宏,不僅語言統(tǒng)一規(guī)范,而且其功能也已非常強大。但在大多數(shù)介紹Excel的"傻瓜書"、"指南"、"入門與提高"等參考書中往往略過不提,或淺淺帶過,讀者從中獲得的有關知識往往不足以應付處理復雜數(shù)據(jù)的需求。為了完成工作,就讓我們一起來學習"宏"的妙用吧。一)、宏的自學首先需要明確的是,本文

13、不可能教會您關于宏的所有內(nèi)容。您需要學會利用"錄制宏"的方法來學習宏:點擊Excel"工具"下拉菜單中"宏"下"錄制新宏",此后可象平時一樣進行有關操作,待完成后停止錄制。然后再點擊"工具"下拉菜單中"宏"下"宏"的"編輯"選項即可打開剛才所錄制的宏的Visual Basic源程序,并且可以在此時的"幫助"下拉菜單中獲得有關的編程幫助。對錄制宏進行修改不僅可以學習宏的使用,還能大大簡化宏的編寫。二)、基本概念為了學習

14、Excel中的宏,我們需要先了解以下一些基本概念。1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbookWorkbooks集合包含Excel中所有當前打開的Excel工作簿,亦即所有打開的Excel文件;Workbook對應Workbooks中的成員,即其中的Excel文件;ActiveWorkbook代表當前處于活動狀態(tài)的工作簿,即當前顯示的Excel文件;ThisWorkbook代表其中有Visual Basic代碼正在運行的工作簿。在具體使用中可用Workbooks(index)來引用Workbook對象,其中index為工作簿名稱或編號

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

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

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

18、hartObject可以控制工作表上嵌入式圖表的外觀和尺寸。ChartObjects代表指定的圖表工作表、對話框編輯表或工作表上所有嵌入式圖表的集合??捎蒀hartObjects(index)引用單個ChartObject,其中index為嵌入式圖表的編號或名稱。如Worksheets("Sheet1").ChartObjects(1)、Worksheets("sheet1").ChartObjects("chart1")分別對應"Sheet1"工作表中的第一個嵌入式圖表、以及名為"Chart1"

19、;的嵌入式圖表。ActiveChart可以引用活動狀態(tài)下的圖表,不論該圖表是圖表工作表,或嵌入式圖表。而對于圖表工作表為活動工作表時,還可以通過ActiveSheet屬性引用之。4、單元格:Cells、ActiveCell、Range、AreasCells(row,column)代表單個單元格,其中row為行號,column為列號。如可以用Cells(1,1)、Cells(10,4)來引用"A1"、"D10" 單元格。ActiveCell代表活動工作表的活動單元格,或指定工作表的活動單元格。Range代表工作表中的某一單元格、某一行、某一列、某一選定區(qū)域

20、(該選定區(qū)域可包含一個或若干連續(xù)單元格區(qū)域)或者某一三維區(qū)域??捎肦ange(arg)來引用單元格或單元格區(qū)域,其中arg可為單元格號、單元格號范圍、單元格區(qū)域名稱。如Range("A5")、Range("A1:H8")、Range("Criteria")。雖然可用Range("A1")返回單元格A1,但用Cells更方便,因為此時可用變量指定行和列??蓪ange與Cells結合起來使用,如Range(Cells(1,1),Cells(10,10)代表單元格區(qū)域"A1:J10";而expres

21、sion.Cells(row,column)返回單元格區(qū)域中的一部分,其中expression是返回Range的表達式,row和column為相對于該區(qū)域的左上角偏移量。如由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)從集合中返回單個

22、Range對象,其中index為單元格塊編號;如Areas(1)。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.Count返回2而不是4??赏ㄟ^Rows(行號)、Columns(列號)來引用相應的行與列;如Rows(3)、Columns(4)分別對應第三行、D列。利用Rows、Column可以獲得區(qū)域

23、中第一塊的第一行行號、第一列列號,所得值均以十進制數(shù)表示。三)、處理單元格1、直接賦值與引用將變量、常量值直接賦給單元格、或?qū)卧竦闹抵苯淤x給變量、常量,這是在Excel中最簡單的單元格賦值及引用方法。如下例將工作表"Sheet1"A1單元格的值賦給Integer變量I,并將I+1的值賦給當前工作表中的B1單元格:Dim I As IntegerI=Worksheets("Sheet1").Cells(1,1) Cells(1,2).Select '選定B1單元格,使其成為當前單元格ActiveCell=I+1 '以I+1為當前單元格賦

24、值2、用公式賦值在宏的使用中,可能會更多地用公式來給單元格賦值。如下例將相對于活動單元格左側第4列、向上第6行至向上第2行的單元格數(shù)值之和賦給活動單元格(以本行、本列為第0行、0列):ActiveCell.Formula="=AVERAGE(R-6C-4:R-2C-4)"3、引用其它工作表中的單元格當賦值公式中需要引用其它工作表中的單元格時,在被引用的單元格前加上"工作表名!"即可。如以下即在賦值中引用了"Sheet1"工作表中的A1至A4單元格:Range("E10").Formula="=SUM(Sh

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

26、引用的工作簿名中含有某些可能引起公式歧義的字符時,需要用中括號""、""及單引號'將工作簿名括起來。如:Cells(1,2).Formula="=MIN('1995-2000總結.xls1995-1996年'! $A$1:$A$6)"5、避免循環(huán)引用在上述公式賦值過程中,應避免在公式中引用被賦值的單元格,防止循環(huán)引用錯誤。6、添加批注可按如下方法格給單元格添加批注:Dim 批注文本 As String批注文本="批注示例" '準備批注文本ActiveCell.AddComment &

27、#39;添加批注ActiveCell.Comment.Text Text:=臨時 '寫入批注文本ActiveCell.Comment.Visible=False '隱藏批注7、添加、刪除、復制、剪切、粘貼單元格Range("D10").Insert Shift:=xlToRight '在D10單元格處添加一新單元格,原D10格右移 Range("C2").Insert Shift:=xlDown '在C2單元格處添加一新單元格,原C2格下移Rows(2).EntireRow.Insert '在第2行前添加一空白行,

28、原第2行下移Columns(3).EntireColumn.Insert '在C列前添加一空白列,原C列右移Columns("A:D").Delete Shift:=xlToLeft '刪除A列至D列,其右側列左移Rows("3:5").Delete Shift:=xlUp '刪除第3行至第5行,其下方行上移Range("B2").EntireRow.Delete '刪除第2行Range("C4").EntireColumn.Delete '刪除C列Range("B

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

30、滑線散點圖ActiveChart.SetSourceData Source:=Sheets("結點坐標").Range("A1:B69"), PlotBy:= _xlColumns '圖表數(shù)據(jù)來源于"結點坐標"工作表的A1至B69單元格,且按列繪圖。ActiveChart.Location Where:=xlLocationAsNewSheetWith ActiveChart.HasTitle = True.ChartTitle.Characters.Text = "節(jié)點坐標" '圖表標題"

31、;節(jié)點坐標".Axes(xlCategory, xlPrimary).HasTitle = True.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x" 'x軸標題"x".Axes(xlValue, xlPrimary).HasTitle = True.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y" 'y軸標題"y"End WithWith ActiveCh

32、art.Axes(xlCategory).HasMajorGridlines = True '顯示x軸主網(wǎng)格線,默認情況下為顯示.HasMinorGridlines = True '顯示x軸次網(wǎng)格線,默認情況下為不顯示End WithWith ActiveChart.Axes(xlValue).HasMajorGridlines = True '標出x軸主網(wǎng)格值,默認情況下為標注.HasMinorGridlines = False '取消x軸次網(wǎng)格值標注,默認情況下為不標注End WithActiveChart.Legend.Position = xlRight

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

34、據(jù)來源With 嵌入表.Chart.HasTitle = False '無圖表標題.Axes(xlCategory, xlPrimary).HasTitle = False '無x軸標題.Axes(xlValue, xlPrimary).HasTitle = False '無y軸標題End With五)、工作表1、添加Sheets.Add before:=Sheets(1) '在第1工作表前添加新工作表Sheets.Add after:=Sheets(Sheets.Count) '在最后工作表后添加新工作表2、移動ActiveSheet.Move bef

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

36、l的宏對工作簿的操作主要為保存。Dim 存盤文件名 As StringActiveWorkbook.Save '保存當前工作簿存盤文件名="工作表名"ActiveWorkbook.SaveAs Filename:= 存盤文件名 '當前工作簿另存為"工作表名.xls"在另存時,若指定的存盤文件名不包含路徑,則保存在該工作簿的打開目錄下。而若此存盤文件已存在,也可用關閉Excel警告提示的方法以免其自動彈出提示框。 63、用VBA的幾個誤區(qū)1、想通過Excel+vba來編程發(fā)財,不管怎么說,目前這種可能性很小。2、錄制宏后的代碼不進行簡化,這

37、種情況初學者常犯;或者不屑于用錄制宏,這種相反。3、喜歡用.select、.copy、.active等,如果不是迫不得已,還是不要用這些東西好。4、不喜歡用公式、函數(shù),什么都喜歡用程序;活用公式函數(shù)是我們學EXCEL中重要的重點,學會嵌套著用,很多事情都可以解決。譬如表1的A1單元格如果要等于表2的A列中的某個單元格,很多人都是用程序來直接賦值,數(shù)量少這也可以,但如果數(shù)量很多的話,為何不試用一下offset呢?偏移都指向同一個單元格,就當是一個變量,改一下這個單元格的值,表1用offset的單元格的值就全部改了。5、設計輸入數(shù)據(jù)的界面竟然用用戶窗口+文本框之類的東西,天,我為什么要用EXCEL

38、,原因之一不就是圖個方便嗎?!直接在工作表中操作就是輸入數(shù)據(jù)最好的方法,如果一些功能你不想給別人用,頂多你屏蔽掉吧。6、關閉程序的時候很喜歡退出整個EXCEL,這樣自我感覺更象一個完整的程序。其實完全有必要考慮其他用戶是否也在用EXCEL,所以,必須做好一下判斷,不要自作聰明全部退出來,還幫忙把每個工作簿都保存一下。7、不喜歡用with,總是workbook("").worksheet("").range("").*一行行排得挺整齊的,還說都用復制,其實也不麻煩。8、總想把VBA+EXCEL做得象一個程序一樣,其實,就因為它不獨立,所

39、以才更加為我們喜愛,不是嗎?64、用過VB的人都應該知道如何聲明變量,在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(當前不支持)、Date、String(只限變長字符串)、Stri

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

41、ot;Hello", MyDouble As Double = 3.4567 在EXCEL97中,有一個十分好的功能,他就是把鼠標放置在一個有效數(shù)據(jù)單元格中,執(zhí)行該段代碼,你就可以將連在一起的一片數(shù)據(jù)全部選中。只要將該段代碼加入到你的模塊中。Sub My_SelectSelection.CurrentRegion.SelectEnd sub刪除當前單元格中數(shù)據(jù)的前后空格。sub my_trimTrim(ActiveCell.Value)end sub使單元格位移sub my_offsetActiveCell.Offset(0, 1).Select'當前單元格向左移動一格Act

42、iveCell.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請自己添加!給當前單元格賦值:ActiveCell.Value =

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

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

45、ksheetsmy.PrintPreviewNext my得到當前單元格的地址msgbox ActiveCell.Address得到當前日期及時間msgbox date & chr(13) & time保護工作簿ActiveSheet.Protect 取消保護工作簿ActiveSheet.Unprotect給當前工作簿改名為 "liu"ActiveSheet.Name = "liu"打開一個應用程序AppActivate (Shell("C:WINDOWSCALC.EXE")增加一個工作簿W(wǎng)orksheets.Add刪

46、除當前工作簿activesheet.delete打開一個文件Workbooks.Open FileName:="C:My DocumentsBook2.xls"關閉當前工作簿ActiveWindow.Close當前單元格定為:左對齊Selection.HorizontalAlignment = xlLeft當前單元格定為:中心對齊Selection.HorizontalAlignment = xlCenter當前單元格定為:右對齊Selection.HorizontalAlignment = xlRight當前單元格為百分號風格Selection.Style = "

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

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

49、t"滾動窗口到a1的位置ActiveWindow.ScrollRow = 1ActiveWindow.ScrollColumn = 1定制系統(tǒng)日期Dim MyDate, MyDayMyDate = #12/12/69#MyDay = Day(MyDate)今天的年限Dim MyDate, MyYearMyDate = Date MyYear = Year(MyDate)MsgBox MyYear 產(chǎn)生一個inputbox<輸入框>InputBox ("Enter number of months to add")得到一個文件名:Dim kk As St

50、ringkk = Application.GetOpenFilename("EXCEL (*.XLS), *.XLS", Title:="提示:請打開一個EXCEL文件:")msgbox kk打開zoom顯示比例對話框Application.Dialogs(xlDialogZoom).Show激活字體對話框Application.Dialogs(xlDialogActiveCellFont).Show打開另存對話框Dim kk As Stringkk = Application.GetSaveAsFilename("excel (*.xls),

51、 *.xls")Workbooks.Open kk此段代碼尋找字符串中特定字符的位置,需要建立一個窗體,并在窗體中,放入TEXTBOX1,TEXTBOX2和TEXTBOX3(3個文本框)及COMMANDBUTTON1(按鈕)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 D

52、okk = InStr(i, a, b, vbTextCompare)YY = YY & CStr(kk) & "/"i = kk + 1Loop While aa >= iTextBox3.Text = YYEnd SubActiveX控件在Excel97中的運用Excel97在工作表或圖表上可使用ActiveX控件,根據(jù)我使用的體會,在工作上處理控件時,必須注意和了解如下事項:(一)用Excel5.0/95工作簿文件格式保存Excel97工作簿時,將選擇ActiveX控件信息。當用戶通過雙擊鼠標來編輯內(nèi)嵌在其它應用程序文檔中的Excel97工作簿時

53、,該工作簿上的控件將不會正常工作。如果用戶是通過用右鍵單擊工作簿,然后選中快捷菜單上的“打開”命令來編輯工作簿的話,工作簿上的控件就能正常工作了。(二)當ActiveX控件處于激活狀態(tài)時,將禁用某些MicrosoftExcelVisualBasic方法和屬性。例如,當某一控件激活時,就不能使用Sort方法,故下述按鈕單擊事件處理過程中的代碼將失敗(因為用戶單擊按鈕后,該按鈕就處于激活狀態(tài))。PrivateSubCommandButton1 ClickRange(a1:a10) SortKey1:=Range(a1)EndSub解決辦法是通過選激活工作表上其它元素的方法來繞過這種問題。例如,可用

54、下列代碼對單元格區(qū)域排序:PrivateSubCommandButton1 ClickRange(a1) ActivateRange(a1:a10) SortKey1:=Range(a1)CommandButton1 ActivateEnd Sub(三)在MicrosoftExcel中,用OLEObjects集合中的OLEObject對象代表ActiveX控件。如果要用編程的方式向工作表添加ActiveX控件,可用OLEObjects集合的Add方法。例如向第一張工作表添加命令按鈕。Worksheets(1) OLEObjects AddForms CommandButton 1,_Left:

55、=10,Top:=10,Height:=20,Width:=100因為ActiveX控件也可用OLEObjects集合中的OLEObject對象代表,所以也可用該集合中的對象來設置控件的屬性。例如要設置控件“CommandBotton1”的“左邊位置”屬性。Worksheets(1) OLEObjects(CommandButton1) Left=10那些不屬于OLEObject對象屬性的控件屬性,可通過由Object屬性返回的實際控件對象來設置。例如要設置控件“CommandButton1”的標題。Worksheets(1) OLEObjects(CommandButton1) Object

56、 Caption=runme因為所有的OLE對象也是Shapes集合的成員,所以也可用該集合設置若干控件的屬性。例如要對齊第一張工作表上所有控件的左邊框。ForEachsInWorksheets(1) ShapesIfs Type=msoOLEControlObjectThens Left=10Next請注意,當在控件所在工作表的類模塊之外使用控件的名稱時,必須用工作表的名稱限定該控件的名稱。在工作表上ActiveX控件的事件處理過程中,Me關鍵字所指向的是工作表,而非控件65、在Excel中利用VBA創(chuàng)建多級選單Excel是我們常用的報表處理軟件之一,對于大多數(shù)人來說只是使用它進行打印報表,

57、沒有注意其他功能,其實利用Excel內(nèi)嵌的 VBA 語言完全可以快速開發(fā)出自己企業(yè)的應用系統(tǒng)來,而且應用系統(tǒng)界面與其它專業(yè)編程語言相當相似。下面筆者簡單通過一個實例說明如何利用VBA創(chuàng)建多級選單。首先,我們對Excel中兩個重要的內(nèi)置函數(shù)auto_open() 和 auto_close()作一簡單說明。auto_open() :在打開工作簿時系統(tǒng)將自動執(zhí)行該函數(shù),因此我們可以在該函數(shù)中調(diào)用自己應用程序的選單函數(shù)以及其它需要初始化設置的函數(shù)及宏語句;auto_close():在關閉工作簿時系統(tǒng)將自動執(zhí)行該函數(shù)。所以我們需要在該函數(shù)中放置刪除用戶自定義選單語句,否則只有退出Excel才能恢復EXC

58、EL的系統(tǒng)選單。在以下語句中,我們定義了選單設置函數(shù) OpenMyMenu(),用于設置多級選單,其他有關說明見程序內(nèi)注釋,詳細代碼如下:Sub OpenMyMenu() 自定義多級選單函數(shù)On Error Resume Next 忽略錯誤MenuBars("MyMenu").Delete 刪除自定義選單MenuBars.Add ("MyMenu") 自定義選單項Sheets("sheet1").SelectMenuBars("MyMenu").Menus.Add Caption:="金融"增加

59、第一個選單項“金融”以下三句為在“金融”選單下增加“銀行法、貨幣政策和條例”三項選單項MenuBars("MyMenu").Menus("金融").MenuItems.Add Caption:="銀行法", OnAction:="銀行法"MenuBars("MyMenu").Menus("金融").MenuItems.Add Caption:="貨幣政策", OnAction:="貨幣政策"MenuBars("MyMenu&q

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

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

溫馨提示

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

評論

0/150

提交評論