一、VBA對象
幾乎90%的VBA程式都是在操作對象,VBA有相應的對象、屬性、方法和事件,其中對象是核心
a) 對象如何操作
對象.屬性、對象.方法、父物件.子物件.屬性
例:Sheets("工作表").Name----Sheets("工作表")是對象,Name是對象的屬性
WorkBooks(2).Close-----前者是對象,Close是對象的方法
Range("a1:a100").Comment.Delete--------Range是父物件 Comment是子物件 Delete是方法
b) 常用的對象及其含義
i. Application 代表整個Excel應用程式
ii. Window 代表視窗
iii. Worksheet 代表一個工作表
iv. Sheets 執行的或活動活頁簿中所有工作表的集合
v. ShapeRange 代表形狀地區,它是文檔中的一組形狀
vi. PivotTable 代表工作表上的樞紐分析表
vii. Workbook 代表一個Excel活頁簿
viii. Shape 代表繪圖層中的對象,例如,快取圖案、手繪多邊形、OLE對象或圖片
ix. Range 代表某一個儲存格、某一行、某一列、某以選定地區、或者某以三維地區
x. Name 代表儲存格範圍的定義名,名稱可以是內建名稱(如Print_Area)或自訂名稱
xi. Chart 代表活頁簿中的圖表
xii. FileDialog 提供檔案對話方塊,其功能與Office應用程式中標準的‘開啟’和‘儲存’對話方塊類似
xiii. CommandBarPopup 代表命令欄上的一個快顯控制項
xiv. CommandBar 代表容器應用程式中的一個命令欄
c) VBA的屬性
屬性是對象的外部和內部特徵,包括大小、顏色、邊距、數量、或者某一方面的行為,如:是否可以啟用,是否可見,是否可以重新整理,通過修改對象的屬性值來改變對象的特徵。可以在彈出提示的時候按F2查看所有成員,右擊可以顯示隱式成員,也可以查看協助,搜尋 對象 對象成員 worksheets 對象成員
d) VBA的方法
VBA需要對象在錢,方法在後,例:worksheets.add----worksheets表示工作表對象,add是方法,表示建立,下面看下worksheets的方法列表
i. Add 建立工作表,圖表或宏表,建立的工作表將成為使用中工作表
ii. Copy 將工作表複製到活頁簿的另一個位置
iii. Delete 刪除對象
iv. FillAcrossSheets 將儲存格範圍複製到集合中所有其他工作表的同一個位置
v. Move 將工作表移到活頁簿的其他位置
vi. PrintOut 列印對象
vii. PrintPreview 按對象列印後的外觀效果,顯示對象的預覽
viii. Select 選擇對象
e) VBA的事件
時間是對象在某個狀態下觸發的動作,每個對象都會有諸多事件,不同時間有不同的觸發條件
i. 事件舉例
Private Sub workbook_open()
Sheets(1).Select
[a1] = "張帥鵬"
End Sub
當sheet1被開啟的時候,A1處被賦值上去字串
ii. 事件的分類及其用途
VBA有很多類事件,分類的表混由對象來決定
Application 應用程式事件
Workbook 活頁簿事件
Worksheet 工作表事件
Chart 圖表事件
UserForm 表單事件
Label 標籤事件(表單中的控制項)
Image 映像事件(ActiveX控制項)
f) VBA的運算子
i. 算數運算子
^ 求一個數位某次方,如A^2
* 乘法運算
/ 除法運算
\ 對兩個數作觸發並返回一個整數
Mod 求兩數的餘數
+ 加法運算
- 減法運算
& 字元串連
ii. 比較子
< 小於
<= 小於或等於
> 大於
>= 大於或等於
= 等於
<> 不等於
Like和is 比較字串的運算
iii. 邏輯運算子
And 用來對象兩個運算式進行邏輯串連
Eqv 用來對兩個運算式進行邏輯等價運算
Imp 用來對兩個運算式進行邏輯蘊含運算
Not 用來對錶達式進行邏輯否定運算
Or 用來對兩個運算式進行邏輯分析取運算
Xor 用來對兩個運算式進行邏輯互斥或運算
iv. 注釋
在一行代碼結束或在某一行上 ' 單引號後則為注釋
g) 簡單的字元處理函數
i. Option Compare[Binary|Text|Database]
不加後面參數表示預設的比較方式。作用在模組層級別的預設比較方法
Bianary 不區分大小寫文本排序層級
Option Compare Binary
Sub 字元比較()
MsgBox "a" > "A" '結果為true
End Sub
Text 區分大小寫
Option Compare Text
Sub 字元比較()
MsgBox "a" > "A" '結果為false
End Sub
ii. StrComp(string1,string2,[compare]) 字元相似比較
如果string1小於string2返回 -1
大於 返回 1
等於 返回 0
String1或string2為null 返回 null
iii. Strconv(string,conversion,LCID)字串類型轉換
Conversion第二個參數表示轉換類型,根據不同參數可以轉換9種類型的文本
vbUpperCase(常數) 1(值) 將字串中字轉換成大寫
vbLowerCase 2 將字串中字轉換成小寫
vbProperCase 3 將字串中每個字的開頭字母轉成大寫
vbWide 4* 將字串單位元組字元轉成成雙位元組字元
vbNarro 8* 將字串中雙位元組字元轉成單位元組字元
vbKatakanna 16** 將字串中平假名字元轉成片假名字元
vbHiraganra 32** 將字串中片假名字元轉成平假名字元
vbUnicode 64 將字串轉成Unicode
vbFromUnicode ## 將字串由Unicode轉成系統的預設碼頁
代碼:
Sub strconv運算()
MsgBox strconv("Enlish", vbUpperCase) & Chr(10) &strconv("Enlish", vbLowerCase) & Chr(10) &strconv("English", vbProperCase) & Chr(10) &strconv("English", vbWide)
End Sub
iv. Format(expression[,format[,firsdayofweek[,firstweekioyear]]]):格式化字元
代碼:
Sub 日期()
MsgBox Format(Date, "yyyy年m月") &Chr(10) & Format(Date, "AAA") & Chr(10) & Format(Now,"h") & "點鐘", 64, "現在是"
End Sub
v. LCase(String)/UCase(string)
轉成大寫和小寫函數,返回結果
vi. String(number,character)/Space(number)
得到重複字元的字串
String(5,"*") 返回***** Space(5) 返回5個空格
vii. Lset/Rset
在以字串變數中將以字串往靠左對齊,或是將以使用者定義型別變數複製到另一使用者自訂類型變數,通俗點講就是將字串二按字串一的進行取捨。如果字串二長度小於字串以則以空格填充,否則從左邊開始街區字串一的長度
悲劇:剛明白是什麼意思,原來是按照第一個字串的長度對下面字串取捨,長度不夠就用空格填充
代碼:Sub Lset用法()
Dim str1
str1 = "廣州11111111111111"
LSet str1 = "廣州本田"
MsgBox "[" & str1 & "]"
str1 = "製造廠"
LSet str1 = "廣州本田製造廠"
MsgBox str1
End Sub
viii. Instr([start,]string1,string2[,compare])返回字串出現位置
第三個參數指定的是否區分大小寫,
vbUseCompareOption -1 使用Option Compare 語句設定執行一個比較
vbBinaryCompare 0 執行一個二進位的比較(不區分大小寫)
vbTextCompare 1 執行一個按照原文的比較(區分大小寫)
例如:InStr(4,"我是大好人","好",1) 返回座標
ix. Left/Mid/Right:從左,中,右取捨
Left(String,length) 返回包含字串中左邊算起指定數量的字元
Mid(String,start[,length]) 返回包含字串從中間起指定數量的字元
Right(string,length) 返回包含字串從右邊算起指定數量的字元
x. LTrim(String)/RTrim(string)/Trim(String)去除空格
返回其參數字串的副本,沒有前置空白(LTrim) 尾隨空白(RTrim) 或前置和尾隨空白(Trim)
xi. Like字串相似性比較
Result=string like pattern
如果string與pattern匹配為true,否則result為false 如果有一個為null,則也為null
Pattern裡可以使用萬用字元
? 任何單一字元
* 0個或多個字元
# 任何一個數字(0-9)
[charlist] charlist中的任何單一字元
[!charlist] 不再charlist中的任何單一字元
簡單的驗證案例實現:
插入使用者表單,加入一個文字框然後雙擊進入,註冊它的change事件
Private Sub TextBox1_change()
If Len(TextBox1.Text) >0 Then
IfRight(TextBox1.Text, 1) Like "[a-z]" Then Exit Sub Else Me.TextBox1 =Left(TextBox1.Text, Len(TextBox1.Text) - 1)
End If
End Sub
完成效果。隨便錄入字元,可以發現除小寫字母外任何字元都無法錄入,包括數字、標點、漢字。