Excel VBA 入門學(xué)習(xí)總結(jié)

Excel VBA 入門學(xué)習(xí)總結(jié)

編輯工具欄:屬性/方法列表、常數(shù)列表、快速信息、參數(shù)信息、自動完成關(guān)鍵字、縮進、凸出、切換斷點、設(shè)置注釋塊、解除注釋塊、切換書簽、上一個/下一個書簽、清除書簽。
調(diào)試工具欄:設(shè)計模式、運行子過程/用戶窗體、中斷、重新設(shè)置、切換斷點、逐語句、逐過程、跳出、本地窗口、立即窗口、監(jiān)視窗口、快速監(jiān)視、調(diào)用堆棧。
MsgBox ("彈窗一個提升窗口")

需要查看代碼幫助說明,可將光標定位至查看語句位置,點擊【F1】鍵,在聯(lián)網(wǎng)狀態(tài)下可打開對應(yīng)VBA幫助文檔。
Dim 變量名 As 數(shù)據(jù)類型
Dim str1 As String????定義字符串變量str1
Dim str2 As String*10????定義字符串變量str2最大長度為10個字符
Dim str3$????使用變量類型聲明符定義字符串變量str3
Option Explicit 規(guī)定強制聲明變量

勾選后強制聲明變量
變量賦值
[Let]變量名=數(shù)據(jù)????[]方括號表示可選可省略
引用對象
Set 變量 = 對象????Set不能省略
創(chuàng)建過程:在過程中插入要運行的代碼
Sub 過程名()
????代碼...
End Sub
引用工作表對象
Dim sheet1 As Worksheet????'定義一個工作表變量
Set sheet1 = Worksheets("aaa")????'引用一個名稱為aaa的工作表
Set sheet1 = Worksheets(1)????'引用當前工作簿中的第一個工作表
定義常量
Const 常量名 As 數(shù)據(jù)類型 = 值
定義數(shù)組
Public|Dim 數(shù)組名????([數(shù)組下界 to ]數(shù)組上界)??? As 數(shù)據(jù)類型????'默認下界值時0,可省略
Dim 商品 (1 to 10) As String????'定義商品數(shù)組,包含10個文本元素
商品(1)="電視機"'????第1個元素文本值是電腦
商品(5)="電腦"????'第5個元素文本值是電腦
定義二維數(shù)組
Dim 位置(1 to 4,1 to 5) As String????'定義一個存儲地理位置的二維數(shù)組

位置(2,2) = "地點A"
同理可定義更多維數(shù)的數(shù)組
使用Array函數(shù)創(chuàng)建數(shù)組
Dim 水果 As Variant????'要使用Array函數(shù)定義時必須是變體類型
水果=Array("香蕉","蘋果","菠蘿","西瓜")
使用Split函數(shù)創(chuàng)建數(shù)組
Dim 數(shù)碼產(chǎn)品 As Variant????'要使用Split函數(shù)定義時必須是變體類型
數(shù)碼產(chǎn)品=Array("手機|顯示器|相機|耳機|平板|電腦","|")????'第一個參數(shù)為需要分割的字符串,第二個參數(shù)為分隔符
將數(shù)組寫入單元格區(qū)域
Range("A1:D1")????=????Array(1,2,3,4)????'一維數(shù)組寫入單元格區(qū)域,單元格區(qū)域必須位于同一行

Dim arr As Variant
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
Range("B2:B10") = Application.WorksheetFunction.Transpose(arr)

使用Join函數(shù)鏈接字符串

數(shù)組ar1使用Join函數(shù)使用"--"符號連接所有數(shù)組元素

二維數(shù)組賦值到單元格區(qū)域時,第一維對應(yīng)相同數(shù)量的單元格區(qū)域行數(shù)量,第二維對應(yīng)相同區(qū)域的列數(shù)量。

使用Like語句判斷字符串文本
通配符:
*????代表任意多個字符????"張三" Like "張*"????=????True,"張婷婷" Like "張*"????=????True
?? 代表任意一個字符????"張三" Like "張?"????=????True,"張婷婷" Like "張?"????=????False,"張婷婷" Like "張??"????=???True
#????代表任意一個數(shù)字????"678" Like "#78" = True,? ?"商品1" Like "商品#" = True
[字符范圍]? ?查找該字符范圍內(nèi)的任意一個字符????“B”?Like "[A-C]"?=True ,“B”?Like "[D-E]"?=False
[!字符范圍]? ?查找不在該字符范圍內(nèi)的任意一個字符????“B”?Like "[!A-C]"?=False ,“B”?Like "[!D-E]"?=True,“6”?Like "[!1-5]"?=True
通配符必須在英文/半角符號下輸入
循環(huán)單行/單列區(qū)域內(nèi)所有單元格方式:
Dim i As Integer
i = 起始位置行號
?'以循環(huán)一列單元格數(shù)據(jù)為例,單元格不為空時循環(huán)執(zhí)行
Do While Cells(i,列號) <> ""???
????? ? 處理代碼
????i=i+1????'每次增加一行,執(zhí)行下一行的處理程序
Loop?
?'以循環(huán)一行單元格數(shù)據(jù)為例,當單元格為空時停止執(zhí)行
Dim j As Integer
j = 起始位置列號
Do?
????? ? 處理代碼
????j=j+1????'每次增加一列,執(zhí)行下一列的處理程序
Loop Until???Cells(行號,j) =?""? ?
For Each...Next 語句
工作表循環(huán)(同一工作簿)
Dim sht As WorkSheet
For Each sht In WorkSheets
????處理代碼
Next sht
循環(huán)單元格區(qū)域
Dim r1 As Range
For Each r1 In Range("A1:D5")
????處理代碼
Next r1
With……End With????語句
With Range("A1").Font
????.Bold = True????'字體格式為加粗。 讀/寫 variant 類型的值 。
? ? .Color =?RGB(0, 255, 0)????'設(shè)置對象顏色
????.ColorIndex = 3????'設(shè)置字體顏色(紅色)
????.FontStyle = "Bold Italic"????'返回或設(shè)置字型(單元格的字體樣式設(shè)置為加粗和傾斜)
????.Italic = True????'設(shè)置為斜體
????.Name="宋體"????返回或設(shè)置字體格式
????.Size=12????'返回或設(shè)置字號
????.Strikethrough = True????'添加水平刪除線????
????.Subscript = False????'設(shè)置字體格式為下標(默認情況下為False)
????.Superscript = False????'設(shè)置字體格式為上標(默認情況下為False)
????.Underline = xlUnderlineStyleSingle????'設(shè)置字體下劃線類型(單下劃線)
Rem 以上設(shè)置的是單元格Font對象的常用屬性
End With
調(diào)用過程的方式
直接輸入過程名和參數(shù):過程名
Call語句調(diào)用過程:Call 過程名[(參數(shù)1,參數(shù)2……)[
Application.Run????過程名[參數(shù)1,參數(shù)2……]
私有過程
Private Sub 私有過程名([參數(shù)……])
????代碼……
End Sub
私有過程不會在宏對話框中顯示
設(shè)置底紋顏色
Range("A1").Interior.Color=RGB(255,255,0)????'設(shè)置A1單元格底紋顏色為黃色
若應(yīng)用到 If 語句中,則? '判斷A1單元格底紋顏色是否為黃色,是返回真
If?Range("A1").Interior.Color=RGB(255,255,0)????Then??
????代碼……
End If
易失性函數(shù)
Application.Volatile = True????將自定義函數(shù)設(shè)置成易失性函數(shù)后,每次工作表重算時,函數(shù)進行重新計算。
不顯示警告框
Application.DisplayAlerts = False '不顯示警告信息
在函數(shù)運行完成后,應(yīng)將Application.DisplayAlerts設(shè)置恢復(fù)為True,顯示警告信息
關(guān)閉屏幕更新
Application.ScreenUpdating = False '關(guān)閉屏幕更新可以提高代碼運行速度
在函數(shù)運行完成后,應(yīng)將Application.ScreenUpdating設(shè)置恢復(fù)為True,打開屏幕更新
清除表中所有數(shù)據(jù)
Cells.ClearContents
單元格區(qū)域賦值
Range("A1:A10")=1????'A1至A10區(qū)域中的每個單元格都賦值為數(shù)字1
禁止事件執(zhí)行
Application.EnableEvents = False????'禁止所在的過程事件執(zhí)行
使用Excel中的內(nèi)置函數(shù)
Application.WorksheetFunction.Sum(Range("A1:A10"))????'使用Sum函數(shù)求A1至A10單元格區(qū)域數(shù)值的和。
當前活動對象
ActiveCell????當前活動單元格
ActiveChart????當前活動圖表
ActiveSheet????當前活動工作表
ActiveWindow????當前活動窗口
ActiveWorkbook????當前活動工作簿
引用工作簿
Workbooks.Itme(索引號)????效果等同于Workbooks(索引號)????
Workbooks("工作簿名稱")
獲取當前工作簿(ThisWorkbook)地址和名稱
Sub 工作簿地址名稱()
? ? Dim wbName As String
? ? Dim wbPath As String
? ? Dim wbFullName As String
? ? wbName = ThisWorkbook.Name? '當前工作簿名稱
? ? wbPath = ThisWorkbook.Path? '當前工作簿路徑
? ? wbFullName = ThisWorkbook.FullName? '當前工作簿路徑和名稱
? ? MsgBox "當前工作簿名稱:" & wbName & Chr(13) & "當前工作簿路徑:" & wbPath & Chr(13) & "當前工作簿路徑和名稱:" & wbFullName
End Sub

? ? ? ? ? ? ? ? ? ? ? ?
創(chuàng)建當前工作表
Workboos.add(Template)方法:新建一個工作簿。 新工作表將成為活動工作簿。
參數(shù):Template,可選 Variant,確定如何創(chuàng)建新工作簿。 如果此參數(shù)為指定現(xiàn)有 Microsoft Excel 文件名的字符串,那么創(chuàng)建新工作簿將以該指定的文件作為模板。 如果此參數(shù)為常量,新工作簿將包含一個指定類型的工作表。 可為以下 XlWBATemplate 常量之一:xlWBATChart、xlWBATExcel4IntlMacroSheet、xlWBATExcel4MacroSheet 或 xlWBATWorksheet。 如果省略此參數(shù), Microsoft Excel 將創(chuàng)建一個新的工作簿, 其中包含許多空白工作表 (工作表數(shù)由**SheetsInNewWorkbook** 屬性設(shè)置)。

Workbooks.Add("C:\Excel 學(xué)習(xí).xls")????'以C盤的Excel 學(xué)習(xí).xls文件為模板創(chuàng)建一個工作簿
Workbooks.Add(xlWBATChart)????新建一個包含圖表工作表的工作簿
打開工作簿:Workbooks.Open(參數(shù)列表)? ?
Workbooks.Open("C:\Excel 學(xué)習(xí).xls")????'打開C盤的Excel 學(xué)習(xí).xls工作簿
保存工作簿
ThisWorkbook.Save????'保存當前工作簿
工作簿對象.Save????'保存工作簿
另存工作簿
ThisWorkbook.SaveAs filename:=保存的路徑和文件名????'省略路徑則保存到當前文件夾中
關(guān)閉工作簿
Workbooks.Close????'關(guān)閉所有工作簿
工作簿對象.Close????'關(guān)閉指定工作簿如:Workbook("Excel 學(xué)習(xí)").Close
SaveChanges參數(shù):為True時關(guān)閉工作簿時保存更改,F(xiàn)alse不保存對工作簿所做更改。
ThisWorkbook是對程序所在工作簿的引用,ActiveWorkbook是對活動工作簿的引用
引用工作表
Worksheets.Item(3)????'引用工作簿中的第3個工作簿,等同于Worksheets(3)
Worksheets("Excel學(xué)習(xí)')????'引用工作簿中名稱為“Excel學(xué)習(xí)”的工作表????
工作表屬性標簽名稱Name,代碼名稱CodeName


新建工作表
WorkSheets.Add方法:創(chuàng)建新的工作表、圖表或宏工作表。 新工作表成為活動工作表。

Worksheets.Add befor:=Worksheets(1)????'在第一張工作表前插入一張新工作表
在最后一個工作表后插入一個新工作表并修改標簽名


在第一張工作表后插入3張工作表(若省略After參數(shù)則再活動工作表前插入)
Worksheets.Add After:=Worksheets(1),?Count:=3
刪除工作表
Worksheet(1).Delete????'刪除第一個工作表
激活工作表
Worksheet(1).Activeate????'激活第一張工作表,等效于Worksheet(1).Select
復(fù)制工作表
Worksheets("Excel學(xué)習(xí)").Copy befor:=Worksheets(1)????'將Excel學(xué)習(xí)工作表復(fù)制到第一張工作表之前
若不使用參數(shù),默認將復(fù)制的工作表粘貼到新工作簿中
FillAcrossSheets 方法:將單元格區(qū)域復(fù)制到集合中所有其他工作表的同一位置。
'將單元格區(qū)域復(fù)制到集合中所有其他工作表的同一位置。
x = Array("Sheet1", "Sheet5", "Sheet7")?
Sheets(x).FillAcrossSheets _?
Worksheets("Sheet1").Range("A1:C5")
移動工作表
Worksheets.Move 方法:將工作表移到工作簿中的其他位置。

Worksheets("Sheet1").Move after:=Worksheets("Sheet3")????'此示例將當前活動工作簿的 Sheet1 移到 Sheet3 之后。
PrintOut 方法:打印對象。
PrintPreview 方法:按對象打印后的外觀效果顯示對象的預(yù)覽。
Select 方法:選擇工作表對象
隱藏工作表
Visible 屬性 :返回或設(shè)置一個**xlSheetVisibility** 值, 該值確定對象是否可見。
xlSheetHidden 0 隱藏工作表,用戶可以通過菜單取消隱藏。
xlSheetVeryHidden 2 隱藏對象,以便使對象重新可見的唯一方法是將此屬性設(shè)置為 True(用戶無法使該對象可見)。
xlSheetVisible -1 顯示工作表。
Worksheets("Sheet1").Visible = False????'示例隱藏 Sheet1。
單元格區(qū)域Range對象和單元格Cells對象
Range("B5:H12").Cells(1,1)????'引用單元格區(qū)域B5:H12中第1行,第1列單元格
Range("A1:C9").Cells(5)????'引用單元格區(qū)域A1:C9中第5個單元格

若單元格所有號大于區(qū)域中所有單元格,則按區(qū)域的行向下拓展,列數(shù)不變
Range("A1:C9").Cells? ?'引用單元格區(qū)域A1:C9中所有單元格
ActiveSheet.Cells????????'引用活動工作表中所有單元格
行Rows列Columns對象
ActiveSheet.Rows("2:5")????'引用活動工作表的第2至第5行
Worksheets(1).Rows????'引用第1張工作表中的所有行
Range("B2:C5").Rows("1:1")????'引用單元格區(qū)域B2:C5中的第1行,即引用工作表中的第2行
ActiveSheet.Columns("E:F")????'引用活動工作表中的E至F列
Worksheets(1).Columns(2)???????‘引用第1張工作表中的第2列
Columns("B:E").Columns(2)????'引用B至E列中的第2列,即C列
Union方法
Application.Union(Range("區(qū)域1"),Range("區(qū)域2"))????連接多個不連續(xù)區(qū)域
Offset屬性
Range("B2").Offset(1,2)????'引用B2單元格向下1行,向右2列移動的單元格,即D4單元格

Range("C2:D3").Offset(2,-1)????'單元格區(qū)域C2:D3向下移動2行,向左移動1列,即B4:C5

Resize屬性
放大或縮小單元格區(qū)域,
Range("B2:C3').Resize(3,5)????'擴大后的區(qū)域為B2:D6,即縮放是以所選區(qū)域左上角第一個單元格為基準。

Range("B2:D6").Resize(2,2)????'縮小至B2:C3區(qū)域
UsedRange屬性返回工作表中以使用的所有單元格圍成的矩形區(qū)域,忽略其中的空單元格,空行,空列,空值等。
CurrentRegion屬性返回當前區(qū)域以空行,空列為邊界圍成的區(qū)域,對于同一工作簿,其小于或等于UsedRange屬性返回的區(qū)域。
End屬性
Range("A65536").End(xlUp).Offset(1,0)????'返回A列中最后一個非空單元格下移一行,常用語填寫新一行數(shù)據(jù)
Value屬性
Range("A1:B2").Value="aaa"????在A1:B2區(qū)域每個單元格中都輸入文本aaa
Count屬性
Range("A1:B2").Count????'返回A1:B2區(qū)域單元格的數(shù)量
Range("A1:B2").Rows.Count????'返回A1:B2區(qū)域行的數(shù)量
Range("A1:B2").Columns.Count????'返回A1:B2區(qū)域列的數(shù)量
Address屬性
返回單元格區(qū)域的地址
MsgBox Range("A1:B2").Offset(15,21).Address

PasteSpecial 方法?
'本示例用單元格 Sheet1 上單元格區(qū)域 C1:C5 和單元格區(qū)域 D1:D5 原有內(nèi)容相加之和來替換單元格區(qū)域 D1:D5 中的數(shù)據(jù)。
With Worksheets("Sheet1")?????
?.Range("C1:C5").Copy?
?.Range("D1:D5").PasteSpecial _?
? Operation:=xlPasteSpecialOperationAdd?
End With
以上內(nèi)容是本人自學(xué)筆記總結(jié),歡迎指正,有關(guān)Excel的問題,可私信聯(lián)系,互相交流討論,共同進步,謝謝。