VBA這個以前用過,放下很久了,最近因需要用Excel處理數(shù)據(jù),用到了它,使用了其它一些方式,對比一下,感到VBA還是有些長處的。故將以前的學習筆記,重新整理了一下,發(fā)表到這里,供有需要的人借鑒。 EXCEL VBA基礎Visual Basic for Applications(VBA)是 VisualBasic 的一種宏語言,是微軟開發(fā)出來在其桌面應用程序中執(zhí)行通用的自動化(OLE)任務的編程語言。主要能用來擴展 Windows 的應用程序功能,特別是Microsoft Office軟件。 如何打開 Excel VBA 編輯器 使用快捷鍵 Alt + F11,打開VBA 編輯器 或 點擊“開發(fā)工具”選項卡的“Visual Basiv”圖標 (沒有看到“開發(fā)工具”選項卡?后面介紹) 插入模塊 在一個 VBA 工程中想要插入新的模塊時,可在 VBA 工程右鍵,選擇插入類型——這里選模塊即可,參見下圖: 【VBA的模塊分類 窗體(窗體模塊),模塊(標準模塊),類模塊。 窗體,一種特殊的模塊,可以設計界面。 模塊,也就是普通模塊,是代碼編輯和執(zhí)行的容器。 類模塊,也是一種特殊的模塊,比較復雜,可以自定義 類,自定義類的 屬性,方法,甚至事件。關于類,類是對象的原始模型,是沒有實例化的對象,類實例化以后叫對象。 一般是用 模塊寫代碼。】 運行 VBA 代碼 現(xiàn)在先給出一段簡單的演示代碼,即在“模塊1”中輸入以下一段代碼 Sub MyCode() Sheet1.Range("A1") = "Hello World" End Sub ★在VBA編輯器中運行 VBA 代碼,可用以下 3 種方法之一: 1.使用菜單欄命令 首選,將光標放置在要運行的代碼的任意一處,再在菜單欄選擇“運行→運行子過程/用戶窗體”命令 2.首選,將光標放置在要運行的代碼的任意一處,再點擊快捷工具欄?按鈕。 3.使用快捷鍵 F5 首選,將光標放置在要運行的代碼的任意一處,再使用快捷鍵 F5,即可運行代碼。 運行后,按Alt + Q 鍵返回表格窗口,可以看到在 Sheet1 工作表 A1 單元格,寫入 “Hello World” 內容,參見下圖: 【如何從VBA窗口返回表格窗口? 按Alt + Q 鍵 】 ★除了前面介紹了VBA 代碼在VBA 編輯器中運行,還可以在Excel 表格界面中,從“開發(fā)工具”選項卡運行。 【若沒有看到“開發(fā)工具”選項卡?如下處理 在功能區(qū)空白處 右擊,單擊快捷菜單的“開發(fā)工具”項,添加“開發(fā)工具”選項卡,參見下圖: 】 點擊“開發(fā)工具”選項卡的 “宏”圖標,會彈出工作簿包含的所有宏的列表,選擇想要的宏,點擊右側“執(zhí)行”按鈕,參見下圖: ★通過給“按鈕”指定宏的方式運行 找到“開發(fā)工具→插入”單擊。選中表單控件部分的“按鈕”,再在工作表(Worksheet)的合適位置單擊,這時出現(xiàn)一個宏列表,其中選擇想要指定的宏,點擊確定,完成指定宏【之后,右擊它將出現(xiàn)的快捷菜單可修改之】。參見下面動圖: 保存含有VBA代碼的excel文件 若想保存含有VBA代碼的文件,應選擴展名為.xlsm,或.xls,【提示:xls是2003版本之前的文件 ,不管有沒有宏程序的話都是xls文件 ,從excel2007開始有了區(qū)分,.xlsm是含有VBA代碼(宏)的,.xlsx是不含VBA代碼(宏)的,默認是.xlsx,如果不想含有代碼,可以保存為xlsx,即可自動刪除其中VBA代碼】參見下圖: VBA 過程和函數(shù) ☆VBA 過程以 Sub 語句開始,以 End Sub 語句結束,包含一個或多個語句,完成一個特定的目標。 VBA 過程的基本語法如下: Sub 過程名([參數(shù)]) 語句1 語句2 ... 語句n End Sub 其中 [參數(shù)]可以沒有,若有語法如下: 變量名1 As 數(shù)據(jù)類型,...變量名n As 數(shù)據(jù)類型 ☆VBA 函數(shù) VBA 函數(shù)與 VBA 過程很相似,除了使用的關鍵詞外,主要區(qū)別是,函數(shù)可以返回值。 VBA 函數(shù)基本語法如下: Function [函數(shù)名]([參數(shù)]) As [返回值類型] 語句1 語句2 ... 語句n [函數(shù)名] = [返回值] End Function 函數(shù)包含的語句中,相比過程,可以看到多一個 [函數(shù)名] = [返回值] 語句,這是函數(shù)的返回值語句。 Excel VBA對象模型 Excel VBA對象模型是編程時可以使用的對象的層次結構,它使得引用要操控的對象更容易。Excel VBA里有好多對象,這些對象其實都是有層級關系的,就像一棵樹一樣,最高級的是Application,簡化的對象的層次結構參見下圖: 這些對象一般常用的有以下四種: 應用程序(Application) 工作簿(Workbook) 工作表(Worksheet) 范圍(Range) 許多使用 Excel 完成的工作都是圍繞這四種對象及其成員進行的。位于頂層的是Application對象,也就是Excel應用程序本身,它包含Excel中的其它的對象,如Workbook對象;一個Workbook對象包含其它一些對象,如Worksheet對象;而一個Worksheet對象又可以包含其它對象,如Range對象, 一個 Range 對象,表示一個單元格、行、列、包含一個或多個單元格塊的單元格選定區(qū)域(選定區(qū)域可能是連續(xù)的,也可能不是連續(xù)的)或甚至多個工作表上的一組單元格)。 引用對象 在編寫VBA代碼時,了解如何引用對象是至關重要的。很明顯,想要開始處理特定的VBA對象時,必須先識別它,也就是說,告訴VBA要處理哪個對象。 可以用句點連接對象名來限定是對某個對象成員的引用。 例如,Application.Workbooks(“Book1.xls”).Worksheets(“Sheet1”).Range(“A1”) 表明是對工作簿Book1上的工作表Sheet1中單元格A1的引用,其中Application代表Excel應用程序本身,可省略。特別地,若Book1是當前活動工作簿,則上述語句可簡寫為 Worksheets(“Sheet1”).Range(“A1”) ;若Sheet1是當前活動工作表,則又可簡寫為 Range(“A1”) 。因此,若在引用中省略了工作簿對象,則表明是使用當前活動工作簿;若再省略了工作表對象,則表明是使用當前活動工作表。 Worksheet.Cells 屬性語法 expression.Cells expression 一個代表 Worksheet 對象的 變量??梢栽?Cells 關鍵字后面緊接著指定行和列索引。 返回一 個 Range 對象,該對象代表工作表上 (單元格,而不只是當前使用的單元格) 。 如: Worksheets("Sheet1").Cells(5, 3).Font.Size = 14 '將 Sheet1 中單元格 C5 的字號設置為 14 磅。 一個實用實例:比較兩個Excel表中相同、不同的數(shù)據(jù)行數(shù)據(jù)如下圖所示: Sheet1和Sheet2表,其中“項名1”、“項名2”列是要比對異同的數(shù)據(jù),“條件”列中的數(shù)據(jù)是由強制連接運算符&將“項名1”、“項名2”列連接起來,這里假設要比對的數(shù)據(jù)行由兩列組成,更多的列可依此類推?!氨葘?”和“比對2”過程用Sheet1表的 “標志”列來記比對結果?!癝heet1中有Sheet2中也有”和 “Sheet1中有而Sheet2中沒有”過程用Sheet3表來記處理結果。 【“&”和“+”兩種運算符 “&”是強制性連接,就是不管什么都連接。 “+”是對字符串進行連接,對數(shù)字則進行加法運算。(用“+”號的時候,“+”前后類型要一致)】 源碼如下:
現(xiàn)在,你可以用前面介紹的運行方法試試了,如:
|
|
來自: wangyong670 > 《6. 宏編程》