一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

EXCEL VBA 入門與實用例子

 wangyong670 2024-11-10

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ù)字則進行加法運算。(用“+”號的時候,“+”前后類型要一致)】

源碼如下

  1. Sub 比對1() '在sheet1的標志列,將sheet1中有,sheet2也有的,加標記A;未有A 的說明將sheet1中有sheet2沒有的
  2. Sheet1.Range("D2:D1000").ClearContents
  3. Dim Sheet1數(shù)據(jù)行數(shù), Sheet2數(shù)據(jù)行數(shù)
  4. Sheet1數(shù)據(jù)行數(shù) = 15
  5. Sheet2數(shù)據(jù)行數(shù) = 11
  6. For I = 2 To Sheet1數(shù)據(jù)行數(shù) 'Worksheets("Sheet1").Cells(行,列) 和 Sheet1.Cells(行,列)等效
  7. For j = 2 To Sheet2數(shù)據(jù)行數(shù)
  8. If Worksheets("Sheet1").Cells(I, 3) = Worksheets("Sheet2").Cells(j, 3) Then '兩表的比較列——條件
  9. Worksheets("Sheet1").Cells(I, 4) = "A" '在標志列加標志
  10. Exit For
  11. End If
  12. Next
  13. Next
  14. End Sub
  15. 'Sheet1中有Sheet2中也有,拷貝到heet3中
  16. Sub Sheet1中有Sheet2中也有()
  17. Sheet3.Range("A2:D1000").ClearContents
  18. Set conn = CreateObject("adodb.connection")
  19. conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  20. Sq1 = "select * from [Sheet1$] where 條件 in(select 條件 from [Sheet2$])" ''在select之后加Distinct將刪除重復的
  21. Sheet3.[B2].CopyFromRecordset conn.Execute(Sq1)
  22. conn.Close
  23. Set conn = Nothing
  24. End Sub
  25. Sub 比對2() '在sheet1標志列,將sheet1中有,sheet2沒有的,加標記B
  26. Sheet1.Range("D2:D1000").ClearContents
  27. Dim Sheet1數(shù)據(jù)行數(shù), Sheet2數(shù)據(jù)行數(shù)
  28. Sheet1數(shù)據(jù)行數(shù) = 15
  29. Sheet2數(shù)據(jù)行數(shù) = 11
  30. For I = 2 To Sheet1數(shù)據(jù)行數(shù) 'Worksheets("Sheet1").Cells(行,列) 和 Sheet1.Cells(行,列)等效
  31. Worksheets("Sheet1").Cells(I, 4) = "B" '在標志列加標志
  32. For j = 2 To Sheet2數(shù)據(jù)行數(shù)
  33. If Worksheets("Sheet1").Cells(I, 3) = Worksheets("Sheet2").Cells(j, 3) Then '兩表的比較列——條件
  34. Worksheets("Sheet1").Cells(I, 4) = ""
  35. Exit For
  36. End If
  37. Next
  38. Next
  39. End Sub
  40. 'Sheet1中有而Sheet2中沒有,拷貝到heet3中
  41. Sub Sheet1中有而Sheet2中沒有()
  42. Sheet3.Range("A2:D1000").ClearContents
  43. Set conn = CreateObject("adodb.connection")
  44. conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
  45. Sq1 = "select * from [Sheet1$] where 條件 not in(select 條件 from [Sheet2$])" ''在select之后加Distinct將刪除重復的
  46. Sheet3.[a2].CopyFromRecordset conn.Execute(Sq1)
  47. conn.Close
  48. Set conn = Nothing
  49. End Sub

現(xiàn)在,你可以用前面介紹的運行方法試試了,如:

 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本成人三级在线播放| 蜜桃av人妻精品一区二区三区| 国产精品一区二区视频| 都市激情小说在线一区二区三区| 99久久婷婷国产亚洲综合精品| 精品亚洲香蕉久久综合网| 性欧美唯美尤物另类视频 | 成年人免费看国产视频| 日本精品最新字幕视频播放| 久久综合亚洲精品蜜桃| 美女被后入福利在线观看| 激情视频在线视频在线视频| 熟女乱一区二区三区四区| 欧美亚洲综合另类色妞| 国内胖女人做爰视频有没有| 国产精品一区二区视频成人| 精品一区二区三区人妻视频| 午夜福利黄片免费观看| 日韩精品综合免费视频| 不卡免费成人日韩精品| 日本女人亚洲国产性高潮视频| 国产精品香蕉免费手机视频| 麻豆欧美精品国产综合久久| 日本av在线不卡一区| 日韩黄色一级片免费收看| 欧美乱视频一区二区三区| 国产亚洲精品一二三区| 日韩午夜老司机免费视频| 色综合久久六月婷婷中文字幕| 日韩人妻中文字幕精品| 91爽人人爽人人插人人爽| 日本精品最新字幕视频播放| 九九九热视频最新在线| 美女激情免费在线观看| 欧美乱码精品一区二区三| 色哟哟精品一区二区三区| 国产欧美日韩精品成人专区| 精品欧美日韩一二三区| 中文字幕91在线观看| 欧美视频在线观看一区| 搡老熟女老女人一区二区|