程式設計 Visual Basic簡介 週次:2 建國技術學院 資管系 饒瑞佶 2003年9月17日
立即運算視窗 左上角寫著"Immediate"的視窗便是它 如何呼叫它?在下拉式功能表中的 View 選項中的 Immediate Window便是它 Private Sub Command1_Click() Debug.Print 1670 End Sub 目的是在編寫VB程式碼階段時,能夠在執行中記錄下程式的流程或訊息 使用程式碼 Debug.Print 變數 的方式來顯示 直接在上面撰寫運算式
Print 指令 列印字串 Print “Hello” 列印運算式 Print 5*3 列印變數 X=5 Print x VB中可以用?號來代表Print
什麼是變數? 我們在VB裡用程式碼做資料運算時,因為CPU沒有記憶的功能,因此剛做完處理的資料馬上便消失,為了能取出剛才的運算結果,所以電腦語言會有變數與常數這兩種東西 在VB裡,為了方便及其它的原因,我們把資料存到記憶體裡並不是用位址來指定存在記憶體裡,它是用文字來代表一個記憶體位址,這就是變數 這個記憶體的位址是由電腦自己指定,也就是說我們不能指定資料要放在記憶體的某某位址上,程式每次使用文字內所對應的記憶體位址不一定相同
如何使用變數儲存資料至記憶體? 使用方式:變數 = 資料 X=X+1 在這裡的〝=〞並不是指〝等於〞 這裡的〝=〞是說〝指定複製給〞的意思
VB變數命名 變數的命名是有一定的規則 每一個變數第一個字一定要以英文字母命名(<=255字元) 每一個變數從第二個字開始可以都以英文字母命名 每一個變數從第二個字母開始可以用數字來命名 每一個變數不可用空白來命名,但可以用底線命名 每一個變數均不可以中文字、全型字命名(VB中文版可以使用中文字來做為變數的命名) 命名時,字母大小寫皆可 變數名稱不可使用VB的保留字 變數的命名最好具有意義,以提高可讀性且易記 若變數未設定初值時,數值變數預設值為0,字串變數預設值為空字串
VB基本資料型態 變數 位元組變數 整數變數 長整數變數 單精確度變數 數值變數 倍精確度變數 貨幣變數 固定長度字串變數 字串變數 變動長度字串變數 字串變數 布林變數 日期變數 物件變數 自由型態變數
數值變數 位元組:能儲存8組以0、1表示數值的變數,也就是用了1Byte的記憶體空間,值的範圍為0 ~ 255。 布林數(Boolean)、位元組(Byte)、整數(Integer)、長整數(Long)、 單精度浮點數(Single)及雙精度浮點數(Double) 布林數:能儲存0(False)及-1(True)兩種整數的變數,也就是一個bit大小的記憶體空間所能表示的資料(但事實上它還是佔用1Byte的記憶體空間)。 位元組:能儲存8組以0、1表示數值的變數,也就是用了1Byte的記憶體空間,值的範圍為0 ~ 255。 整數%:能存16組以0、1表示數值的變數,用了記憶體2Byte的大小,值的範圍為-32768 ~ 32767。
數值變數 長整數&:能存32以0、1表示數值的組變數,佔記憶體4Byte的空間,值的範圍為-2,147,483,648 ~ 2,147,483,647。 單精度浮點數!:使用32位元(4Byte=32bit)來表示可包含小數數值的變數,值的範圍為,負數-3.402823E38 ~ -1.401298E-45,正數1.401298E-45 ~ 3.402823E38。 雙精度浮點數#:使用64位元(8Byte)來表示可包含小數數值的變數,值的範圍為,負數-1.79769313486231E308 ~ -4.94065645841247E-324,正數4.94065645841247E-324 ~ 1.79769313486231E308。 Currency@:使用64位元來表示可包含小數數值的變數,15位數整及4位小數,值的範圍為-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807。
數值變數 變數種類 佔用記憶體大小 數值範圍 Boolean 1Byte 0 ~ -1的整數 Byte 0 ~ 255的整數 Integer -32768 ~ 32767的整數 Long 4Byte -2147483648 ~ 2147483647的整數 Single 負數-3.402823E38 ~ -1.401298E-45,正數1.401298E-45 ~ 3.402823E38 Double 8Byte 負數-1.79769313486232E308 ~ -4.94065645841247E-324,正數4.94065645841247E-324 ~ 1.79769313486232E308 Currency -922337203685477.5808 ~ 922337203685477.5807(15位數整及4位小數)
字串變數 $ 固定長度:限定字串長度的字串變數,無論文字資料的長短,儲存的資料長度不變。 不固定長度與固定長度兩種 不固定長度:沒有限定字串長度的字串變數,一般宣告就是沒有限定長度。 固定長度:限定字串長度的字串變數,無論文字資料的長短,儲存的資料長度不變。 變數種類 佔用記憶體大小 字數範圍 不固定長度 22 + 字數 * 2Bytes 0 ~ 用完所有實體及虛擬記憶體 固定長度 10 + 字數 * 2Bytes 使用者設定為固定大小
變數宣告 VB允許不宣告變數就可以使用,較彈性但是不嚴謹 宣告法:於程式裡使用Dim敘述宣告 Dim A As Integer Private Sub Form_Load() Dim A As Integer Dim B As Date Dim C As Single Dim D As Object End Sub 動態宣告:動態宣告變數也就是執行該程式時,電腦會隨機分配記憶體位置給變數存放資料,而當程式執行結束而程式碼被移出記憶體時,變數也隨之移出記憶體 VB允許不宣告變數就可以使用,較彈性但是不嚴謹
變數宣告 靜態宣告:靜態宣告變數也就是執行該程式時,電腦會分配固定記憶體位置給變數存放資料,當程式執行結束而程式碼被移出記憶體時,該記憶體位置保留,再執行該程式時,電腦又分配相同記憶體位置給變數存放資料,使用相同名稱來當變數而每次執行所分配到的記憶體位置相同,因此該程式可以享有相同的資訊。 宣告法,於程式裡使用Static敘述宣告: Private Sub .... Static A As Integer Static B As Date Static C As Single End Sub
變數宣告 全域宣告:全域宣告變數也就是執行不同的副程式使用相同名稱的變數時,電腦會分配固定記憶體位置給變數存放資料,當各副程式執行結束而程式碼被移出記憶體時,該記憶體位置保留,再執行任一個副程式時,電腦又分配相同記憶體位置給變數存放資料,使用相同名稱來當變數而每次執行所分配到的記憶體位置相同,因此各副程式可以享有相同的資訊。 宣告法:於Form的(一般區域)宣告,所謂的一般區域位於表單裡所有的Sub ... End Sub及Function ... End Function的最頂端區域,如下圖所示
變數宣告 宣告變數直接給值的功能要等到VB.Net版本起才開始支援! VB6不支援宣告變數型態就直接設定資料 Private Sub Command1_Click() Dim MyVal As Long = 123 End Sub Dim MyVal As Long MyVal = 123 宣告變數直接給值的功能要等到VB.Net版本起才開始支援!
變數的生命週期 在一個Sub或Function裡所宣告的變數,它所佔用的記憶體的時間是較短暫的,在這些副程式裡所使用的變數會使到到副程式執行完畢後就會把記憶體空間再釋放了,下一次在執行這一個副程式時,雖然變數名稱一樣,但它已經是另一個新開啟的變數,所以結果為空白或0 解決法,把他設為全域的變數
表單全域的變數 End Sub Dim A As Long Private Sub Command1_Click() A = 1234567 MsgBox A
表單全域的變數 結果? Private Sub Command1_Click() A = 1234567 End Sub Dim A As Long Private Sub Command1_Click() A = 1234567 End Sub Private Sub Command2_Click() MsgBox A 結果?
常數 文數字常數 符號常數 由一連串字元組合而成, 前後需使用雙引號。 如:“Trust me “ “ 3 + 5 = ? “ “ 3-6-1999 “ 文數字常數 程式設計時,常數或文字需要重覆出現,應用之。 如:Const Pi=3.14159 Print Pi r=10 Print Pi*Pi*r 優點: 增加程式可讀性 修改容易 常數 符號常數
常數就是固定的資料,我們使用Const來宣告 Const PI = 3.1415926535 Const HlfD = "圓的面積等於半徑的平方乘上園周率" Private Sub Command1_Click() Print HlfD; 10 ^ 2 * PI '這個程式碼會在表單上印出半徑為10的圓面積 End Sub
練習一 Private Sub Command1_Click() NFather = “孫中山” Text1.Text = Nfather 由ToolBox拖曳TextBox(文字方塊)及Command(命令按鈕)至表單 設定Command1的Caption屬性為“中華民國國父” 滑鼠游標移到Command1上雙擊兩下加入以下程式碼 Private Sub Command1_Click() NFather = “孫中山” Text1.Text = Nfather End Sub 執行程式
VB數值運算 運算子 做運算:VB做運算時格式為〝變數 = 運算式〞 + 加法運算 1 + 1 2 + 5 - 減法運算 100 - 99 - 25 - 6 * 乘法運算 -9 * -3 457 * 98 / 除法運算 12 / 3 4 / 0.25 ^ 次方運算 6的平方 6 ^ 2 10的立方 10 ^ 3 4.5的根號4 4.5 ^ 0.25 Mod 餘數運算 12 Mod 3 17 Mod 3 Sin 三角函數,以弳做運算單位 Sin (30) Sin (45 * 0.01745) Cos 三角函數,以弳做運算單位 Cos(30) Cos(45 * 0.01745) Tan 三角函數,以弳做運算單位 Tan(30) Tan(45 * 0.01745) Atn 反三角函數,以弳做運算單位 Atn(0.1456) Atn(0.4513) / 0.01745 Abs 計算絕對值 Abs(-1004) Abs(156) Exp 求得e值 e→EXP(1) e5→EXP(5) Log 以e數為底所求得的反函數 Log(Exp(5)) 以某數為底:Logn(x) = Log(x) / Log(n) Log(1000) / Log(10) Sqr 求得某數的平方根 Sqr(2) Sqr(255) \ 求得某數的商,不帶餘數 6 \ 4 (答案為1) 做運算:VB做運算時格式為〝變數 = 運算式〞
VB數值運算-攝氏溫度與華氏溫度變換 由ToolBox拖曳2個命令按鈕(Command)物件及2個文字方塊(TextBox)物件。 至屬性對話框修改屬性: Command1.Caption = "轉華氏" Command2.Caption = "轉設氏" Text1.Text = 0 Text2.Text = 0 在Command1及Command2上雙擊,加入程式碼: Private Sub Command1_Click() Text2.Text = Val(Text1.Text) * 9 / 5 + 32 End Sub Private Sub Command2_Click() Text1.Text = (Val(Text2.Text) - 32) / 9 * 5 執行程式
物件事件 Change Change最常見於TextBox或RichTextBox等文字方塊,當文字內容被修改(Text屬性改變)時,VB變會執行Change事件內的副程式。 Click Click最常見於各可視物件裡,當物件被滑鼠點一下時,VB變會執行Click事件內的副程式。 DBClick DBClick最常見於各可視物件裡,當物件被滑鼠雙擊時,VB變會執行DBClick事件內的副程式。 DragDrop DragDrop最常見於各可視物件裡,當另一物件被拖曳至物件裡並放開滑鼠按鍵時,VB變會執行DragDrop事件內的副程式。此事件會傳回數值Source、X及Y,Source是指那個物件被拖曳,X是滑鼠在物件放開時的X座標,Y是滑鼠在物件放開時的Y座標
物件事件 DragOver DragOver最常見於各可視物件裡,當另一物件被拖曳至物件裡時,VB變會執行DragOver事件內的副程式。此事件會傳回數值Source、X、Y及State,Source是指那個物件被拖曳,X是滑鼠在物件放開時的X座標,Y是滑鼠在物件放開時的Y座標,State是指被拖曳物件的移動狀態,當State=0示移入,當State=1示移出,當State=2示移動中 GotFocus GotFocus幾乎是各物件都有,當物件得到Focus(焦點、焦點)的一瞬間之前,VB變會執行GotFocus事件內的副程式。 KeyDown KeyDown最常見於各可視物件裡,當得到焦點的物件正按下鍵盤按鈕時,VB變會執行KeyDown事件內的副程式。此事件會傳回數值KeyAsciit,KeyAscii會傳輸入文字的AscII碼的代號
物件事件 KeyPress KeyPress最常見於各可視物件裡,當得到焦點的物件正按了鍵盤按鈕時,VB變會執行KeyPress事件內的副程式。此事件會傳回數值KeyCode、Shift,KeyCode會傳回VbKey值,表示正按下那一按鍵 KeyUp KeyUp最常見於各可視物件裡,當得到焦點的物件正方開鍵盤按鈕時,VB變會執行KeyUp事件內的副程式。此事件會傳回數值KeyCode、Shift,KeyCode會傳回VbKey值,表示正按下那一按鍵,Shift傳回值表示是否按下Alt、Ctrl及Shift等鍵 LostFocus LostFocus幾乎是各物件都有,LostFocus與GotFocus相反,當物件轉移Focus(焦點、焦點)給其它物件的一瞬間之前,VB變會執行LostFocus事件內的副程式。
物件事件 MouseDown MouseDown最常見於各可視物件裡,當滑鼠在物件上按下任一按鍵時,VB變會執行MouseDown事件內的副程式。此事件會傳回數值Button、Shift、X及Y值,Button會傳回被按下的滑鼠按鍵代碼,Shift傳回值表示是否按下鍵盤的Alt、Ctrl及Shift等鍵,X是滑鼠在物件按下時的X座標,Y是滑鼠在物件按下時的Y座標 MouseMove MouseMove最常見於各可視物件裡,當滑鼠在物件上移動時,VB變會執行MouseMove事件內的副程式。此事件會傳回數值Button、Shift、X及Y值,Button會傳回被按下的滑鼠按鍵代碼,Shift傳回值表示是否按下鍵盤的Alt、Ctrl及Shift等鍵,X是滑鼠在物件的X座標,Y是滑鼠在物件的Y座標
物件事件 MouseUp MouseUp最常見於各可視物件裡,當滑鼠在物件上放開任一按鍵時,VB變會執行MouseUp事件內的副程式。此事件會傳回數值Button、Shift、X及Y值,Button會傳回被放開的滑鼠按鍵代碼,Shift傳回值表示是否按下鍵盤的Alt、Ctrl及Shift等鍵,X是滑鼠在物件放開時的X座標,Y是滑鼠在物件放開時的Y座標
關係運算子 運算子 說明 數學符號 > 大於 >= 大於等於 ≧ < 小於 <= 小於等於 ≦ = 等於 <> 不等於 ≠
邏輯運算子 AND:且 OR:或 NOT:否
基本語法 IF IF敘述讓你能夠做邏輯的判別。 IF判別的兩種邏輯,True為真,其數值不為零;False為錯、失效,其數值為零。 If NOT True 為 False(NOT把True變成False, 把False變成True) 我們在日常生活裡,若要表示 X > -4 且 X < 12 時,會把他寫成 -4 < X < 12 ,然而這種邏輯式在VB裡是錯誤的因此我們要把他改寫成 -4 < X AND X < 12 才正確。
IF的用法(1)當邏輯運算為真,執行Then後的敘述 Ex: Private Sub Command1_Click() A = 10 B = 5 IF A > B Then Me.Caption = "A > B" End Sub Tmp = "小瓜瓜" TmB = "小呆呆" IF Tmp = TmB Then Me.Caption = "兩字串相等"
基本語法 IF End Sub IF的用法(2)當邏輯運算為真,執行Then後的敘述,若邏輯運算為錯,執行Else後的敘述 Ex: Private Sub Command1_Click() A = 10 B = 5 IF A > B Then Me.Caption = "A > B" Else Me.Caption = "A <= B" End Sub Tmp = "小瓜瓜" TmB = "小呆呆" IF Tmp = TmB Then Me.Caption = "兩字串相等" Else Me.Caption = "兩字串不相同"
基本語法 IF IF的用法(3)與(2)相同功能 IF 邏輯運算式 Then 你的演算法1 你的演算法2 {為真時的程式碼區域} ........... 你的演算法N Else 你的演算法2 {為錯時的程式碼區域} End IF
基本語法 Select Select與IF兩個雖然都是提供你條件選擇的功用但兩者仍然不一樣 IF提供的是邏輯上的運算選擇,而Select提供的則是條件邏輯上的選擇。 Select的用法: Select Case 變數名稱 Case 條件1 你的演算法1 Case 條件2, 條件3 你的演算法2 Case 條件4 To 條件5 你的演算法3 ...... Case Else 你的演算法N End Select
基本語法 Select 結果?? Private Sub Command1_Click() A = 10 Select Case A Me.Caption = "A 小於 5" Case 5 Me.Caption = "A 等於 5" Case 6 Me.Caption = "A 等於 6" Case Else Me.Caption = "A 大於 6" End Select End Sub 結果??
基本語法 For 大量的有規則性的資料要做處理時,我們要把程式碼逐一的打出十分的不符合經濟效益,因此程式語言中會有重覆式的架構敘述來讓使用者簡化程式設計 For ... Next 便是VB重覆式架構中的敘述之一,用法是: For 變數 = 起始值 To 最終值 Step 間隔值 你的程式碼 Next [變數] Next [變數]這一行〝[變數]〞表示變數可以寫出或省略
基本語法 For 若想要計算1+2+3,使用For Next該怎麼寫? Private Sub Command1_Click() For N = 1 To 3 MyVal = MyVal + N Next MsgBox MyVal End Sub Private Sub Command1_Click() MyVal = MyVal + 1 MyVal = MyVal + 2 MyVal = MyVal + 3 MsgBox MyVal End Sub
蜂巢式迴圈 Private Sub Command1_Click() For N = 1 To 2 ‘第一層 MyVal = MyVal + N For M = 1 To 3 ‘第二層 MyVal = MyVal + M Next '第二層 Next '第一層 MsgBox MyVal End Sub Exit For敘述,在For ... Next迴圈裡加入Exit For敘述便會跳出一層For ... Next迴圈
Do … Loop Do ... Loop是個無限迴圈的敘述,因此會不斷的重覆執行,所以我們要加入判斷敘述以終止這個無窮無盡的迴圈。 用法是: Do (開啟位置) 你的程式碼 Loop (結束位置,再跳回到Do) 若想要計算1+2+3,使用Do ... Loop該怎麼寫? Do N = N +1 T = T + N If N = 3 Then Exit Do Loop Print T
Do … Loop 有可能不執行程式碼 至少執行一次程式碼 上面的範例是以If且配合Exit Do的方式來結束Do ... Loop的執行,跳出Do ... Loop迴圈,但Do ... Loop本身也有判斷敘述,也就是Until或While,分成〝前測試〞與〝後測試〞兩種。Until是指符合條件時則離開Do ... Loop,While是指不符合條件時則離開Do ... Loop 前測試: Do Until 判斷式 . Loop Do While 判斷式 . 後測試: Do Loop Until 判斷式 Loop While 判斷式 有可能不執行程式碼 至少執行一次程式碼
Do … Loop 前測試是在執行一次迴圈敘述前先判斷是否符合條件,若符合條件時則離開Do ... Loop迴圈 前測試: Do Until N = 5(或Do While N <5) Debug.Print N N = N + 1 Loop 結果?? 後測試: Do Loop Until N = 5(或Loop While N <5)