可以通過在屬性窗口設(shè)置名稱來給對象重新命名,名字可以由字母、漢字(2字符)甫恩、數(shù)字以及下劃線組成,但必須以字母或漢字開頭酌予。名字的長度<=255個字符
●日期型數(shù)據(jù)Date(缺省值為#1899/12/31#)'注:日期型數(shù)據(jù)的值用兩個“#”括起來。
●布爾型數(shù)據(jù)Boolean【默認值為False=0】布爾型數(shù)據(jù)是一個邏輯值奖慌,用于邏輯判斷抛虫,只有兩個值True和False。
當(dāng)布爾型轉(zhuǎn)換為其他數(shù)據(jù)類型時:
True->-1
False->0
當(dāng)其他數(shù)據(jù)類型轉(zhuǎn)換為布爾類型時:
非0值-> True
0 -> False
●對象型數(shù)據(jù)Object
可用來表示應(yīng)用程序中或某些其他應(yīng)用程序中的對象简僧。Object變量存儲為4字節(jié)(32位)的地址形式
●變體型數(shù)據(jù)Variant
變體型數(shù)據(jù)是一種可變的數(shù)據(jù)類型建椰,可以存放任何類型的數(shù)據(jù)。在程序中不特別說明時岛马,VBA會自動將變量默認為Variant型變量棉姐。
●Dim StrName2 As String * 5
聲明了一個變量StrName2,其為一個定長字符串類型啦逆,長度為5伞矩。
變量是內(nèi)存中用于存儲值的臨時存儲空間。
存儲在變量中的數(shù)據(jù)可以更換夏志,因此變量通常用來存儲在程序運行過程中需要臨時保存的數(shù)據(jù)或?qū)ο蟆?/p>
● Const 常量名 [As 數(shù)據(jù)類型]= 數(shù)值
例如:ConstPI As Single = 3.1415926
Const V As Integer= 100
注:常量必須在聲明時初始化
●日期型數(shù)據(jù)的算術(shù)運算
1.兩個日期型數(shù)據(jù)可以相減: DateB-DateA
結(jié)果是一個數(shù)值型整數(shù)(兩個日期相差的天數(shù))乃坤。
例:#2015/05/08# - #2015/05/01# 其結(jié)果為數(shù)值:7
2.一個日期型數(shù)據(jù)(DateA)與一數(shù)值數(shù)據(jù)(N)可作加法運算:DateA+N,其結(jié)果仍是一個日期型數(shù)據(jù)。
3.一個日期型數(shù)據(jù)(DateA)與一數(shù)值數(shù)據(jù)(N)可作減法運算:DateA-N,其結(jié)果仍是一個日期型數(shù)據(jù)沟蔑。
例:#2015/05/08# -7 其結(jié)果為日期:#2015/05/01#
●Abs() 絕對值
Rnd() 產(chǎn)生從0到1的隨機數(shù)
Sqr() 平方根
Int(n) 取小于或等于n的最大整數(shù)
Round(n,m) 四舍五入
●Weekdayname(7)
輸出結(jié)果:星期六
又如:weekdayname(7,True)
輸出結(jié)果:周六
●Workday(Start_date,days,[holidays])
作用:返回在某日期(起始日期)之前或之后湿诊、與該日期相隔指定工作日的某一日期的日期值。工作日不包括周末和專門指定的假日瘦材。
參數(shù): Start_date 必需厅须。一個代表開始日期的日期∈匙兀 days 必需朗和。Start_date 之前或之后不含周末及節(jié)假日的天數(shù)错沽。days為正值將生成未來日期;為負值生成過去日期例隆∩啵 Holidays可選。一個可選列表镀层,其中包含需要從工作日歷中排除的一個或多個日期镰禾,例如各種省\市\(zhòng)自治區(qū)和國家\地區(qū)的法定假日及非法定假日。該列表可以是包含日期的單元格區(qū)域唱逢,也可以是由代表日期的序列號所構(gòu)成的數(shù)組常量吴侦。
●Dateserial(y,m,d) 返回一個日期形式
DateAdd(interval, number, date)返回包含已為其添加指定時間間隔的日期
DateDiff((interval,date1, date2[, firstdayofweek[, firstweekofyear]])返回一個指定兩個特定日期之間的時間段數(shù)目。
DatePart(interval,date [,firstdayofweek[, firstweekofyear]])返回包含給定日期的指定部分坞古。
DatePart("yyyy",#2015-12-20#)
DateDiff("yyyy",#2000-12-20#,#2015-1-1#)
DateAdd("m",2,#2015-12-20#)
●Asc() 將字符轉(zhuǎn)換成ASCII
Chr() ASCII轉(zhuǎn)換成字符
CDate() 文本型轉(zhuǎn)為日期型
Str() 數(shù)值轉(zhuǎn)換為字符串
Val() 數(shù)字字符串轉(zhuǎn)換為數(shù)值
●例如: instr(2,“ssschina”,“sch”,1)
結(jié)果:3
第三章 VBA順序結(jié)構(gòu)
一.程序語句:是執(zhí)行具體操作的指令(VBA關(guān)鍵字备韧、屬性、函數(shù)痪枫、運算符以及VBE可識別的指令符號的任意組合)
●一條語句也可分若干行書寫织堂,但在要續(xù)行的行尾加入續(xù)行符(空格和下劃線,即 _)
●VBA允許使用復(fù)合語句奶陈,即把幾個語句放在一行中易阳,各語句間用冒號“:”分隔
二.賦值語句
變量名 = <表達式> 對象.屬性= <表達式>
●賦值語句兼有計算與賦值的雙重功能
●右邊表達式類型與左邊變量類型不同時“向左轉(zhuǎn)換”
●賦值號左邊只能是變量(或?qū)傩裕荒苁浅A炕虮磉_式吃粒。
●不能在一條賦值語句中潦俺,同時給多個變量賦值。
●可使用With語句為一個對象的多個屬性賦值
三.編寫事件的步驟
1.聲明(變量徐勃、常量事示、數(shù)組)
●Dim 變量名 [As 類型]
●Const 常量名 [As 類型] = 表達式
●Dim 數(shù)組名(下標1[,下標2…]) [As 數(shù)據(jù)類型]
2.初始化變量 a=0 a=1
3.輸 入
●文本框 X=Val(t1.Value)
●單元格 X=range.value
●輸入對話框 X=Val(InputBox(“請輸入”))
4.數(shù)據(jù)處理
語句 賦值 選擇 循環(huán)(確定次數(shù)用FOR,明確條件用DO LOOP ) 自定義函數(shù)
5.輸 出
●標簽 T1.Caption=Str(x)
●文本框 t1.value=Str(x)
●單元格 range.value= x
●對話框 MsgBoxStr(x)
三.編程思路
1.分析題目,根據(jù)題意列出方程
2.設(shè)計界面,確定界面上的控件有哪些
3.選擇觸發(fā)事件僻肖、確定輸入輸出肖爵。
4.編寫事件過程
●聲明變量 ●確定輸入方式 ●進行計算●把變量帶入方程 ●確定輸出方式
第四章 VBA選擇結(jié)構(gòu)
(分支結(jié)構(gòu):分支結(jié)構(gòu)事實上是一種選擇,在不同的條件下選擇執(zhí)行不同的程序段臀脏。)
一. If 語句
●If …Then(單分支)
●If …Then …Else(雙分支)
●If …Then …Elseif(多分支)
●嵌套If
二. Select case 語句
Select Case <變量或表達式> 1遏匆、數(shù)字;表達式
Case <條件1> 2谁榜、一組用逗號分隔的枚舉值
<語句塊1> 3幅聘、表達式1 to 表達式2
Case <條件2> 4、Is 關(guān)系表達式
<語句塊2>
End Select
第五章 VBA循環(huán)結(jié)構(gòu)
一.For循環(huán)語句(先檢查“循環(huán)變量”的值是否超過“終值”)
For 循環(huán)變量(數(shù)值變量) = 初值 To 終值 [Step 步長](將初值賦給循環(huán)變量)
[語句塊]
[Exit For](只能跳出一重循環(huán))
[語句快]
Next [循環(huán)變量]
【循環(huán)終止的條件是循環(huán)變量賦值超過終值窃植,而不是等于終值 】
【循環(huán)次數(shù)的計算:次數(shù)= int((終值一初值)/步長)+1】
【當(dāng)步長=0時,永不終止】
二.循環(huán)嵌套【外層循環(huán)完全“包含”內(nèi)層循環(huán)帝蒿,不能發(fā)生交叉】
● for i = x to y
for j = x1 to y1
for k = x2 to y2
……
next k
next j
next i
【使用外層循環(huán)來控制輸出多少行,內(nèi)層循環(huán)來控制每行巷怜「鸪】
●Do…Loop循環(huán)語句 【當(dāng)不清楚循環(huán)次數(shù)但清楚循環(huán)的執(zhí)行條件或退出條件時】
語法形式1: 語法形式2:
Do [While|Until <條件> Do
[語句塊] [語句塊]
[Exit Do] [Exit Do]
[語句塊] [語句塊]
Loop Loop [While|Until<條件>]
●For Each語句【需要遍歷數(shù)組或集合的每個元素時】
For Each 元素變量In數(shù)組或集合
循環(huán)體
[Exit For]
循環(huán)體
Next[元素變量]
第六章 數(shù)組【處理同一類型的成批的數(shù)據(jù)暴氏,由一定數(shù)目的同類元素按照一定順序排列而成的結(jié)構(gòu)類型數(shù)據(jù)】【連續(xù)區(qū)域】(下標……)
a(1 to 10 ) '只是十個空格
●倒序輸出【兩兩對應(yīng)】
Dim a(1 To 10) As Integer, t AsInteger
For i= 1 To 10 / 2
t= a(i)
a(i) = a(10 - i+ 1)
a(10 - i+ 1) = t
Next i
For i= 1 To 10
Me.Text3.Value = Me.Text3.Value & a(i)& Space(1)
Next i
●數(shù)組排序問題
◆選擇排序方法【選擇小的排在前面】
排序過程:
(1)首先通過n-1次比較,從n個數(shù)中找出最小的绣张,將它與【第一個數(shù)】交換——第一趟選擇排序答渔,結(jié)果最小的數(shù)被安置在第一個元素位置上
(2)再通過n-2次比較,從剩余的n-1個數(shù)中找出次小的數(shù)侥涵,將它與第二個數(shù)交換——第二趟選擇排序
(3)重復(fù)上述過程沼撕,共經(jīng)過n-1趟排序后,排序結(jié)束
for i = 1 to n-1 '總共比較n-1次
for j = i+1 to n '從i+1個元素開始比較到第n個元素
if a(i)>a(j) then
t = a(i)
a(i)=a(j) '【數(shù)芜飘!】把較小的a(j)給a(i) '【位置】a(i)仍是前一位
a(j)=t
next j
next i
◆冒泡法
排序過程:
(1)有n個數(shù)(存放在數(shù)組a(n)中)务豺,第一趟將每相鄰兩個數(shù)比較,小的調(diào)到前頭嗦明,經(jīng)n-1次兩兩相鄰比較后笼沥,最大的數(shù)已“沉底”,放在最后一個位置娶牌,小數(shù)上升“浮起”奔浅;
(2)第二趟對余下的n-1個數(shù)【最大的數(shù)已“沉底”】按上法比較,經(jīng)n-2次兩兩相鄰比較后得次大的數(shù)诗良;
(3)依次類推乘凸,n個數(shù)共進行n-1趟比較,其中累榜,在第j趟中要進行n-j次兩兩比較。
For i= 1to n-1 ‘i為比較趟數(shù)灵嫌,一共進行n-1趟比較【仍為n-1趟】
For j= 1 to n-i (往后比較) ‘j為每趟中各次參與前后元素兩兩比較的數(shù)組元素的下標
‘當(dāng)i=1時(第一趟)壹罚,該趟共比較n-1次
‘當(dāng)i=2時(第二趟),該趟共比較n-2次(因為最大的元素已經(jīng)沉底了呀)
‘當(dāng)i=n-1時(第n-1趟)寿羞,該趟該趟共比較1次
if A(j)>A(j+1) Then ‘如果前面的數(shù)組元素比后面的大猖凛,則相
‘鄰下標進行交換
t=A(j)
A(j)=A(j+1)
A(j+1)=t
End If
Next j
Next i
第七章 VBA過程與函數(shù)
【VBA中的每一個程序都包含過程,VBA的主體結(jié)構(gòu)就是過程
例如:錄制宏是一個過程绪穆,一個自定義函數(shù)也是一個過程辨泳。】
●子過程(Sub過程) Private|Public Sub 子過程()
Exit Sub
End Sub
●函數(shù)過程(Function過程) Function 函數(shù)過程(rng As Range )
Exit Function
End Function
●屬性過程 Property Get 屬性過程() As Variant
End Property
一.子過程
【過程名可以和本過程的私有變量同名玖院,但卻不能和公有變量同名菠红。】
例如:
Sub 身份證() Dim身份證 As String (公有變量)
Dim 身份證 As String Sub 身份證()
身份證=me.text.value 身份證=me.text.value (錯D丫)
End Sub End Sub
●模塊級過程
是指只能在【當(dāng)前模塊】調(diào)用的過程试溯,它的特征有三個:
(1)聲明Sub過程前使用【Private】
(2)只有當(dāng)前模塊可以調(diào)用
(3)不出現(xiàn)在“宏”對話框中
●工程級過程
是指在當(dāng)前工程中任何地方都可以隨意調(diào)用的過程。它的特征有三個:
(1)聲明Sub過程時沒有使用“Public”和“Private”郊酒,則默認為公有過程
(2)非當(dāng)前過程遇绞,而是任何模塊或者窗體中都可以調(diào)用键袱。
(3)可以出現(xiàn)在“宏”對話框中。
●Sub過程的嵌套調(diào)用方式【所有過程都是可以遞歸的摹闽,即可以調(diào)用自己來完成任務(wù)蹄咖。】
語法:【call 】過程名(參數(shù))付鹿,或者使用Application對象的Run方法
示例:Sub 過程一
Msgbox “你好澜汤!”
End Sub
Private Sub 過程二()
[Call] 過程一 / Applicatioin.Run 過程一
End Sub
二.function【用于返回一個值或者數(shù)組】(相比而言,Sub過程既可以返回值又可以對引用的對象進行修改倘屹。)(Function的參數(shù)絕不能與Function過程名一致)
(如果自定義的Function名稱與VBA內(nèi)部名稱一致银亲,仍然可以正常執(zhí)行,只是在代碼中調(diào)用Excel內(nèi)部函數(shù)時必須聲明其對象庫纽匙。如:自定義函數(shù)sqr务蝠,當(dāng)要區(qū)分調(diào)用的函數(shù)是VBA內(nèi)部函數(shù)sqr時,需要使用如下形式:VBA.sqr烛缔。如果直接使用sqr則調(diào)用的是自定義函數(shù)sqr)【faction:直接寫函數(shù)名稱】
過程的參數(shù):按值傳遞參數(shù)與按址傳遞參數(shù)
●采用Byval聲明參數(shù)——按值傳遞參數(shù)馏段。這種情況下過程訪問的是變量的副本,過程不會改變變量本身的值践瓷。
例如:所有工作表事件和工作簿事件的參數(shù)都是按值傳遞的院喜。
●采用ByRef【默認】聲明參數(shù)——按址傳遞參數(shù)。這種情況下過程訪問的是變量本身晕翠,過程可以【改變】變量的真正的值叹阔。
Function函數(shù)的功能是:【用于返回一個值或者數(shù)組◎悄罚】
在Function過程結(jié)束前蝇完,【必須將計算結(jié)果賦給:Function函數(shù)名稱】
例如:Public Function Fun()
Fun= Int(Rnd()*10)+1
End Function
●創(chuàng)建圖表 shape!
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim shp As Shape
'工作表中插入圖表
Set ws = Worksheets("data")
Set shp = ws.Shapes.AddChart
With shp '設(shè)置圖表的位置
.Left = ws.Range("F8").Left
.Top = ws.Range("F8").Top
With .Chart 'with 里的with……
.SetSourceData ws.Range("A1:E6") '設(shè)置圖表的數(shù)據(jù)源
.ChartType = xlColumnClustered'設(shè)置圖表的類型樊卓,簇狀柱形圖
End With
End With
End Sub
●With語句
With Object
[Statements]
End With
其中拿愧, Object:代表一個對象,且必須是對象碌尔。
With Worksheets.Add
.Name = "課程表"
.Move after:=Worksheets(Worksheets.Count)
End With