VBA基础知识小结
一、什么是宏?
1、? 宏錄制器好比就是個錄像機,它具備有錄像機的錄制和播放功能,當然錄像機錄制的是視頻資料,而宏錄制器錄制的剛是操作命令集,即宏。
2、? 引伸到Excel中,當你打開宏的錄制功能時,宏錄制器會像錄像機一樣將你在Excel中的大多數操作進行錄制,并且可對這些錄制內容(即代碼)進行回放和編輯。
二、實例演示宏錄制,執行(回放)的過程
1、? 打開Excel工作表→工具→宏→錄制新宏→宏的名稱→確定→先中A1單元格→字體改為12號字→顏色橙色→停止錄制宏。
2、? 回放,選中2月工作表→工具→宏→執行宏。回放完成。
3、? 修改宏,工具→宏→Visual Basic編輯器(Alt+F11)→雙擊模塊1→正文前加dim sht as wotksheet
For each sht in thisworkbook.worksheets
Sht.select
Next
End sub
右擊→smart indent →indent procedure 美化代碼
4、? 運行子過程/用戶窗體→視圖Microslft Excel
5、? Crtl+F11,右擊→VBA Friend→Add Line Nunbers
6、? 分析,sub后面為宏的名字
'開頭為注釋,不被執行,
第10行為dim語言,
第20-210行為for each
With 語句是宏的主要語句通常和selection font并用
Name = “微軟雅黑”
Strikethrough = false
……
Colorindex = xlautomatic
不影響宏執行可刪除
刪除多余的代碼提高運行速度
三、介紹一個批量打印文檔的宏
Sub sanjteprinter()
Application sereenupdating = false
With application.file search
.lookin = “d:我的文檔桌面已經實施行”?? 此處為可變
.filetype = msofile typecxcelworkbook
.search subfolders = true
If execute>0 then
For I = 1 to.foundfiles.count
Workbooks.openfilename:=foundfiles(i)
Worksheets(1).printout
Activeworkbook.closesavechanges:=false
Next
Else
Magbox”沒有找到任何工作簿文件”
End if
End with
Application.screenupdating=true
End sub
?單擊→運行子過程/用戶窗體→確定
Sub過程與程序流程控制語句
一、sub過程
1、? 一個過程就是一組完成所需操作的VBA代碼的組合;
2、? VBA的過程主要包括“sub過程”和“Function過程”兩種;
3、? Sub過程不可以返回值,Function過程可以返回值。
二、聲明sub過程
1、? 錄制的“宏”就是一個簡單的sub過程,使用錄制宏功能只能生成sub過程的代碼;
2、? Sub過程的特點:
(1)?????? 以“sub過程名()”開頭,以“End sub”結尾;
(2)?????? Sub過程一般保存在模塊里;
(3)?????? 不返回運行結果。
3、? 聲明sub過程語法形式:
[public/private][static]sub過程名稱([參數1,參數2……])
公共過程/私有過程,二選一
[語句塊]
[Exit sub]
[語句塊]
End sub
打開VBA編輯器→右擊→插入→模塊→雙擊模塊→錄入:
Sub mysub()
Msgbox”這是我的第一個VBA過程”
End sub
→單擊運行子過程/用戶窗體→確定
不寫參數默認為公共過程
Private sub siyou()
Msgbox”這是我的私有過程”
End sub
4、? 同一個過程執行另一個過程:
(1)?????? 輸入過程名稱以及參數,參數用逗號隔開;
過程名[參數1,參數2,……]
Sub test()
‘mysub
siyou
End sub
打開工具→宏→mysub→運行→確定
打開工具→宏→test→運行→確定
(2)?????? 在過程名稱以及參數前使用call關鍵字,參粗線條用括號括起來,并用逗號隔開;
Call過程名[(參數1,參數2,……)]
Sub rest()
‘mysub
‘siyou’第一種方法
Call mysub
Callsiyou
End sub
打開→工具→宏→test→執行宏→確定
?
?
5、利用application對像的run方法:
Application.run表示過程名的學符串(或字符串變量)[參數1,參數2,……]
Sub test()
‘mysub
‘siyou’第一種方法
‘call mysub
‘call siyou’第二種方法
Application.run “mysub”
Dim a as string
A = “siyou”
Application.run a
End sub
單擊→運行子過程/用戶窗體→確定
三、判斷與循環語句:
順序結構判斷分之,循環語句
(一)IF語句
IF邏輯表達式樣 then
語句塊1
[else
??? 語句塊2]?? 可選
End if
羅輯表達式值是否為真
????????? ?↓是????? ↓否
?????? 語句塊??????? ↓
?????????? ↓??????? ↓
?????????? ↓?????? ←
比一比,看誰算的又對又快!
11+19=?
回答完畢
Sub出題()’生成新的題目
[d6].value = int(rnd * 20)
[f6[.ralue = int(rnd * 20)
End sub
Sub dt()
If[h6].value = [d6].value+[f6].value then ‘檢查是否答對
End if
Call 出題 ‘調用過程,得新生成題目
End sub
添加if[h6].value<>[d6],value+[f6].value then’檢查是否答對
Magbox”答錯了,繼續努力!”
End if
Else
邏輯表達式值是否為真
是→語名塊1/不是→語句塊2
注釋前面語句→視圖→工具→編輯→設置注釋塊
If[h6].value = [d6].value + [f6].value the ‘檢查是否答對
Msgbox”答對了,你真棒!”
Else
Msgbox”答錯了,繼續努力!”
End if
Call 出題 ‘調用過程,重新生成題目
End sub
If邏輯表達式1是否為真? then
語句1
[else if邏輯表達式2 then
語句2
[else if] 邏輯表達3 then
語句3
……
Else
語句塊n]
End if
判斷H6單元格是否為空
Sub test()
If [h6].value = “” then
Msgbox”還沒有輸入答案!”
Else if [h6].value = [d6].value + [f6].value then ‘檢查是否答對
Msgbox”答對了,你真棒!”
Else
Msgbox”答錯了,繼續努力!”
End if
Call 出題
End sub
插入窗體控件,命名為答題
IF使用兩次判斷
(二)Select case 語句(三種更多選擇項做選擇)
Select case? 測試表達式
Case 表達式列表1
語句塊1
Case 表達式列表2
語句塊2
Case 表達式列表3
語句塊3
……
Case 表達式列表n
語句塊 n
[case else
??? 語句塊 n + 1]
End select
測試表達式必須為數值表達式或字符串表達式:
表達式列表可以是用逗事情分開的表達式,也可以使用to或is關鍵字,如“
Case1,1,2,3,4
Case 1 to 4
Case is < 4
Case語句后面可以使用多重表達工,各表達式的數據類型可以不相同,它們之間是邏輯或的關系如:
Case 1 to 4 ,”a”?? ‘數值或文本
Sub sll()
Select case[f6].value
Case””
Msgvox”還沒有輸入答案”
Case [d6].value + [f6].value
Msgbox”答對了,你真棒!”
Case else
Msgbox”答錯了,請繼續努力!”
End select
Call出題
Edn sub
插入窗體控件,命名為答案
Sub 等sl級()
Dim dj as string
Select case [d3].value
Case is >= 90
Dj = “A”
Case is >= 80
Dj = “B”
Case is >= 60
Dj = “C”
Case is >= 200
Dj = “D”
Case else
Dj = “E”
End select
[e3].value = dj
End sub
(三)for循環語句
For-------next 循環語句
For循環變量 = 初值to 終值[step步長]
循環體
[next for]
循環體
Next[循環變量] []內為可選參數
初值小于終值,步長大于1
循環變量初始化
???? ?↓
循環變量<=(>=)終值
????? ↓
????? Y
????? ↓
循環體
?
循環變量 = 循環變量 + 步長
循環語句結束
Sub sum 1 to 100()
Dim mysum as long,I as integer
For I = 1 to 100 step 1
Mysum = mysum + i
Debug print i
Next i
Msgbox”1到100的自然數和是:”& mysum”
End sub
Sub 等級for()
Dim dj as string,I as integer
For I = 14 to 143 srep 1
Select case cells(I,”d”).value
Case is >=90
Dj = “A”
Case is >=80
Dj = “B”
Case is >=60
Dj = “C”
Case is >=20
Dj = “D”
Case else
Dj = “E”
End select
End sub
(四)For each-------next循環語句
For each元素變量in對象集合
語句塊
[next for]
語句塊
Next[元素變量]
Sub 等級 each()
Dim dj as string, rng as range
For each rng in range(“d14”:”d143”)
Select case rng.value
Case is >=90
Dj = “A”
Case is >=80
Dj = “B”
Case is >=60
Dj = “C”
Case is >=20
Dj = “D”
Case else
Dj = “E”
End select
Rng.lffser(0,1).value = dj
Next rng
End sub
(五)do while循環語句
1、開頭判斷循環語句條件
Do [wihle循環條件]
循環體
[next do]
循環體
Loop
2、結尾判斷循環語句條件
Do
循環體
[next do]
循環體
Loop[wihle循環條件]
第二種比第一種多執行一次循環部分的語句
開頭判斷循環語句流程圖
轉載于:https://www.cnblogs.com/snake-hand/archive/2010/04/25/2452321.html
總結
- 上一篇: SQL Cookbook:一、检索记录(
- 下一篇: 关于const记录类型全局变量赋初值的问