第一章 VBA是什么
Visual Basic Application
一個Excel文件就是一個工作簿(Workbook)伊佃,一個Excel應用程序可以打開多個Excel文件掂骏,這些工作簿文件統(tǒng)稱為工作簿集合(Workbooks),可以用Workbooks("xxx.xlsx")來表示某個工作簿絮识。一個工作簿文件可以有多個工作表(Worksheet),同一個工作簿的所有工作表統(tǒng)稱為工作表集合(Worksheets)嗽上,可以用Workbooks("xxx.xlsx").Worksheets("Sheet1")來表示工作簿(xxx.xlsx)中的名稱為Sheet1的工作表次舌。ThisWorkbook表示當前工作簿。
類似的兽愤,某個工作表中的所有單元格集合用Cells來表示彼念。Workbooks("xxx.xlsx").Worksheets("Sheet1").Cells(1,1)表示(A1)單元格挪圾。
某個單元格區(qū)域用Range來表示。Workbooks("xxx.xlsx").Worksheets("Sheet1").range("A1")或Workbooks("xxx.xlsx").Worksheets("Sheet1").range("A1:D100")表示相應的單元格區(qū)域逐沙。
第二章 第一個VBA程序
調出“開發(fā)工具”選項卡: Alt+T哲思、O =>“自定義功能區(qū)”的“主選項卡”下方勾選“開發(fā)工具”選項=>“確定”
打開VB編輯器(Visual Basic 編輯器):在“開發(fā)工具”選項卡中或Alt+F11
代碼可以寫在多個地方(可以用相對路徑來簡化對象指代),一般是寫在模塊中吩案。
運行代碼:將光標置于所要執(zhí)行的過程中也殖,點擊運行按鈕或F5
含有VBA代碼的文件要以.xlsm為后綴名來保存。
在未設置的Excel中打開.xlsm中會有警告信息彈出务热,可以在Excel選項中添加“受信任位置”(某個文件夾路徑)來設置以后打開該類文件不再提示警告信息。
第三章 VBA中的等號
這一章就4頁己儒。崎岂。。太汗了吧
就說了VBA中等號“=”就兩層含義:1闪湾、賦值冲甘;2、比較途样。
文中還說了VBA復制的let可省略江醇, ?Let a=1 可以寫作 a=1,還有何暇,每行代碼前加一個以英文冒號結束的標簽陶夜,該標簽并不影響代碼的運行。如裆站,L01: Let a = 1
第四章 VBA編程再探索
這一章也很短条辟,還把一段代碼重復多次,并用單元格名稱的方式把變量有啰嗦了一遍宏胯,唉羽嫡,這樣太溫柔了吧,拜托肩袍,咱能簡單粗暴點不杭棵。。氛赐。
第五章 正式開始VBA編程之旅
就是講到一個循環(huán)語句: For ... to ... Next
For r = 1 to 50000 Step 1 ‘Step省略時魂爪,步長為1
? ? ...
Next
這里在講解循環(huán)時用到了單步執(zhí)行(F8),這是調試的一種方法鹰祸。
講到一點是新建的工作簿文件未保存前是沒有后綴名的甫窟,可是保存后有后綴名的,要注意代碼中相應的調整蛙婴,避免出現指代錯誤粗井。
講到了“錄制宏”功能,可以通過錄制宏來看看相應操作對應的VBA代碼,從而減輕我們記憶負擔浇衬。羅剛君也強調懒构,我們錄制宏并不是為了得到宏,而是為了得到相應的VBA對象和屬性耘擂。
講到一個結構: With ... End With
With Selection.Interior
? ? .Color = 255
End With
下面三段代碼做的事情一樣胆剧,只是形式上越來越簡化
Range("A1:A10").Select
With Selection.Interior
? ? .Color = 255
End With
With ... End With的作用是省去每次寫對象名
Range("A1:A10").Select
Selection.Interior.Color = 255
Select返回一個Selection對象
Range("A1:A10").Interior.Color = 255
Cells(3, 4) 和 Range("D3")效果是一樣的,但是有各有特長醉冤。
Range("A1:D10")? Range("A1", "D10")? Range(Cells(1,1), Cells(10,4)) Range("A1").Resize(10, 4)
CurrentRegion指的是當前區(qū)域由周圍空行或空列圍成的最小區(qū)域秩霍。
第六章 VBA是一種語言
條件結構
If? 條件 Then
條件為真時執(zhí)行的語句
End If? 條件為假時則什么都不執(zhí)行
稍微復雜一點的條件結構
If ?條件 Then
? ? 條件為真時執(zhí)行的語句
Else
? ? 條件為假時執(zhí)行的語句
End If
Cells.Clear 可以清除單元格的內容及格式
更復雜一些的條件結構
If? 條件1 Then
? ? 條件1為真時執(zhí)行的語句
ElseIf 條件2
? ? 條件2為假時執(zhí)行的語句
...
Else
? ? 以上條件都為假時執(zhí)行的語句
End If
分支語句,從上面的多條件結構已經可以延伸出分支語句了蚁阳。
Select Case 表達式或變量
? ? Case 值1
? ? ? ? 為值1時執(zhí)行的語句
? ? Case 值2
? ? ? ? 為值2時執(zhí)行的語句
? ? ...
? ? Case Else
? ? ? ? 不為以上所有值時執(zhí)行的語句
End Select
循環(huán)結構铃绒,之前已經有了For ... to ... Next,下面還有For Each
For Each mysht In ThisWorkbook.Worksheets
? ? mysht.Cells(1, 1).Value = "a111bc" ?'Value可以省略
Next
此外螺捐,還有Do Until循環(huán)
Do Until 退出循環(huán)條件
? ? 循環(huán)語句
Loop
UsedRange對象(數據占用區(qū)域)颠悬,.Rows.Count? .Columns.Count有其獨特的用法。
Exit For ? ?Exit Loop 可以用在跳出相應的循環(huán)體(這顯然不是一個好主意定血,最好還是別用)赔癌。
第七章 Excel就是小怪獸
這一章又是重復,并且通過“小怪獸”的例子來把抽象的計算機概念具體化澜沟、形象化灾票。怎么說呢,面向初學者吧茫虽,減緩學習曲線的陡峭程度铝条,重復呢,是加深印象席噩,便于記憶吧班缰。
第八章 對象! 對象5渴唷埠忘!
其實對象在計算機語言中,就是一個實體馒索,它有著自己的屬性莹妒、方法,并且能夠響應特定的事件绰上。
介紹了Worksheet旨怠、Workbook的內置的事件。
有個小技巧蜈块,按住Shift鍵打開文件可以忽略自動執(zhí)行的宏鉴腻。
這一章內容不少迷扇,尤其是8.7小節(jié)的案例,我覺得可以獨立開一章了爽哎,值得細細體會蜓席。
第九章 VBA變量類型
Sub myVar141()
Dim dMyNum As Long
Dim sMyString As String
sMyString = "1112"
MsgBox sMyString
dMyNum = sMyString
MsgBox dMyNum
End Sub
Sub Example_08_146()
Dim mySheet As Worksheet
Set mySheet = ThisWorkbook.Worksheets("Sheet1")
For r = 1 To 10
mySheet.Cells(r, 1).Value = r
mySheet.Cells(r, 1).Interior.Color = vbRed
mySheet.Cells(r, 1).Font.Color = vbWhite
Next
End Sub
Sub my100num148()
Dim myNum(99)
For i = 1 To 100
myNum(i - 1) = i
ThisWorkbook.Worksheets(1).Cells(i, 1).Value = myNum(i - 1)
Next
End Sub
Sub arrayDemo151()
Dim a(2) As String
a(0) = "one"
a(1) = "two"
a(2) = "three"
ThisWorkbook.Worksheets("Sheet1").Range("A1:E5") = a()
MsgBox UBound(a(), 1)
End Sub
Sub array2DDemo152()
Dim b(2, 3)? '3行4列的數組 數組從0開始計數,UBound返回最大序數课锌,個數=最大序數+1
For i = 1 To 3
For j = 1 To 4
b(i - 1, j - 1) = 10 * i + j
Next
Next
ThisWorkbook.Worksheets("Sheet1").Range("A1:E5") = b()
MsgBox b(1, 1)? ' 22
MsgBox UBound(b(), 1)? '? 2
MsgBox UBound(b(), 2)? '? 3
End Sub
Sub arrayUBoundDemo153()
Dim b(2, 3)
MsgBox UBound(b(), 1)
MsgBox UBound(b(), 2)
End Sub
Sub arrayDemo155()
Dim a()
Dim mySheet As Worksheet
Set mySheet = ThisWorkbook.Worksheets("Sheet1")
a() = mySheet.Range("A1:D3")? '.value可以省略? ? '3行4列的數組厨内,這種從表格中轉換過來的數組從1開始計數,UBound返回最大序數渺贤,個數=最大序數
MsgBox a(1, 1)? ? ? ? ? ? ? ' 11
MsgBox UBound(a(), 1)? ? ? ' 3
MsgBox UBound(a(), 2)? ? ? ' 4
mySheet.Range("H8").Resize(UBound(a(), 1), UBound(a(), 2)) = a()
End Sub
Sub cellsClear()
Cells.Clear
End Sub