480 likes | 605 Views
變數與常數. 宣告變數. 變數與常數. Dim (Variable Name) as (Type) Private Sub CommandButton1_Click() Dim new_date As Date ' 宣告變數並指定型態 new_date = Range("B2").Value ' 指定變數的值 MsgBox new_date ' 顯示變數的內容 End Sub. 變數與常數. Private Sub CommandButton2_Click()
E N D
變數與常數 宣告變數
變數與常數 Dim (Variable Name) as (Type) Private Sub CommandButton1_Click() Dim new_date As Date ' 宣告變數並指定型態 new_date = Range("B2").Value ' 指定變數的值 MsgBox new_date ' 顯示變數的內容 End Sub
變數與常數 Private Sub CommandButton2_Click() Dim msg As String * 5 ’宣告字串及長度 msg = "Excel2003 VBA" MsgBox msg End Sub
變數與常數 變數的作用範圍只限於程序內 Private Sub CommandButton2_Click() Dim msg As String * 5 ’宣告字串及長度 msg = "Excel2003 VBA" MsgBox msg End Sub Private Sub CommandButton3_Click() Dim msg As String * 3 ’宣告字串及長度 msg = “VBA2003" MsgBox msg End Sub
變數與常數 要在不同程序內使用相同變數必須於工作表中宣告
變數與常數 Optional Explicit 程序內任何變數 必須於工作表中宣告
變數與常數 常數 Public | Private] Constconstname [Astype] =expression Private Sub CommandButton1_Click() Const str_1 = "Excel 2003 VBA" ’宣告常數 Const num_1 As Integer = 1234 ’宣告並指定型態 MsgBox str_1 & vbCr & num_1 End Sub Example: Check Example Lec6.2-Msgbox.Sheet1
變數與常數 物件變數 Private Sub CommandButton1_Click() Set cell_1 = Workbooks("ex314_2.xls").Sheets(3).Range("b2") cell_1.Value = "物件變數的用法" cell_1.ColumnWidth = 18 cell_1.Font.Bold = True End Sub
變數與常數 Private Sub CommandButton1_Click() Dim r1 As Range ’宣告物件變數 Set r1 = Workbooks("ex314_2.xls").Sheets(3).Range("b2:c5") With r1 .Color = RGB(255, 0, 0) .Bold = True End With End Sub
變數與常數 Private Sub CommandButton1_Click() Set new_book = Workbooks.Add ’建立新的 活頁簿並設定物件變數 With new_book .Title = "物件變數的應用" .SaveAs Filename:="test1.xls" End With End Sub
陣列 陣列的宣告方法 Dim [Array_name(#)] as Type Private Sub CommandButton1_Click() Dim num(3) As Integer num(0) = 10 num(1) = 20 num(2) = 30 num(3) = 40 total = num(0) + num(1) + num(2) + num(3) MsgBox "總合 = " & total End Sub Optional Base 0 is Default We can try another base say 1
陣列 Private Sub CommandButton1_Click() Dim num(3 To 5) As Integer ’ 設定索 引的範圍 num(3) = 100 num(4) = 200 num(5) = 300 MsgBox "第三個元素 = " & num(5) End Sub
陣列 Private Sub CommandButton1_Click() Dim msg(3) As String * 5 msg(1) = "Word2003" msg(2) = "Excel2003" msg(3) = "PowerPoint2003" MsgBox msg(1) & vbCr & msg(2) & vbCr & msg(3) End Sub
陣列 Private Sub CommandButton1_Click() Dim num(9, 9) As Integer For i = 1 To 9 For j = 1 To 9 num(i, j) = i * j Next Next MsgBox "8 * 7 = " & num(8, 7) End Sub Two dimensional Array
Private Sub CommandButton1_Click() Dim num(3) As Integer num(1) = 100 num(2) = 200 num(3) = 300 Dim num(4) As Integer num(4) = 400 MsgBox num(4) End Sub 陣列 不能重覆宣告Array
陣列 Private Sub CommandButton1_Click() Dim my_array() As Integer ' 動態的陣列 ReDim my_array(3) ' 指定維數 my_array(1) = 100 my_array(2) = 200 my_array(3) = 300 ReDim my_array(4) ' 重新調整長度 my_array(4) = 400 MsgBox my_array(4) End Sub 重覆宣告
算術運算 Private Sub CommandButton1_Click() Dim num(1 To 4) As Integer num(1) = 1234 num(2) = 5678 num(3) = num(1) + num(2) ' 變數與變數的運算 num(4) = num(3) * 3 ' 變數與常數的運算 MsgBox "計算結果 = " & num(4) End Sub
比較運算 Private Sub CommandButton1_Click() num = Range("b2").Value If num > 60 Then ’比較運算 MsgBox " 過 關 !!!" Else Msgbox “革命尚未成功” End If End Sub
邏輯運算 Private Sub CommandButton1_Click() num_1 = Range("b2").Value num_2 = Range("c2").Value If (num_1 > 60) And (num_2 > 60) Then ’ 邏輯運算 MsgBox " 兩 科 都 及 格" End If End Sub
連結運算 Private Sub CommandButton1_Click() str_1 = "Excel" str_2 = " 2003" Range("c3").Value = str_1 & str_2 End Sub
連結運算 Private Sub CommandButton1_Click() str_1 = "Excel 2003" str_2 = "VBA與進階應用" Range("b2").Value = str_1 + vbCrLf + str_2 End Sub
判斷式的設計方法 IF…Then ﹝語法﹞: If <條件式> Then 【程式一】 【程式二】 ﹝執行方法﹞: 如果<條件式>成立,就先執行【程式一】,再執行【程式二】。 如果<條件式>不成立,就忽略【程式一】,直接執行【程式二】。
判斷式的設計方法 Private Sub Worksheet_SelectionChange(ByVal Target As Range) msg = "及 格" num = Target.Value If num < 60 Then msg = "不及格" ’資料如果小於60,就改變字串 的內容 MsgBox msg End Sub
判斷式的設計方法 IF…Then…End If ﹝語法﹞: If <條件式> Then 【程式一】 End If 【程式二】 ﹝執行方法﹞: 程式的流程與上一節的指令相同,但是【程式一】代表一個區塊,可以輸入兩行以上的敘述。
判斷式的設計方法 Private Sub Worksheet_SelectionChange(ByVal Target As Range) msg = "及 格" num = Target.Value If num < 60 Then msg = "不及格" Target.Font.Color = RGB(255, 0, 0) Target.Interior.ColorIndex = 35 End If Range("b7").Value = msg End Sub
判斷式的設計方法 Private Sub Worksheet_SelectionChange(ByVal Target As Range) num = Target.Value msg = "及 格" If num < 60 Then’ 外層的判斷式 msg = "補 考" Target.Font.Color = RGB(255, 0, 0) Target.Interior.ColorIndex = 35 If num < 50 Then’ 內層的判斷式 msg = "死 當" End If End If Range("b7").Value = msg End Sub
判斷式的設計方法 IF…Then…Else…End If ﹝語法﹞: If <條件式> Then 【程式一】 Else 【程式二】 End If ﹝執行方法﹞: 先檢查<條件式>,如果成立就執行【程式一】,如果不成立就執行【程式二】。
判斷式的設計方法 Private Sub CommandButton1_Click() num = Range("b2").Value If num >= 30 Then num = 0 Else num = num + 1 End If Range("b2").Value = num End Sub
判斷式的設計方法 IF…Then…ElseIf…End If ﹝語法﹞: If <條件式1> Then 【程式一】 ElseIf <條件式2> Then 【程式二】 End If ﹝執行方法﹞: 先檢查<條件式1>,如果成立就執行【程式一】,然後跳到〝EndIf〞後面。如果<條件式1>不成立,就繼續檢查<條件式2>,再依據檢查的結果,來決定要不要執行【程式二】。
判斷式的設計方法 Private Sub Worksheet_SelectionChange(ByVal Target As Range) num = Target.Value If num >= 60 Then Target.Font.Color = RGB(0, 0, 255) ElseIf num < 50 Then Target.Font.Color = RGB(0, 255, 0) Else Target.Font.Color = RGB(255, 0, 0) End If End Sub
判斷式的設計方法 Select Case..End Select ﹝語法﹞: Select Case 變數名稱 Case 數值1 【程式一】 Case 數值2 【程式二】 . End Select ﹝執行方法﹞: 依據變數的值,來選擇要執行的程式。作用方法類似 If…ElseIf。
判斷式的設計方法 Private Sub Worksheet_SelectionChange(ByVal Target As Range) num = ActiveCell.Value Select Case num Case 1 msg = " ONE" Case 2 msg = " TWO" Case 3 msg = " THREE" Case 4 msg = " FOUR" End Select MsgBox msg End Sub
判斷式的設計方法 Private Sub Worksheet_SelectionChange(ByVal Target As Range) num = ActiveCell.Value Select Case num Case Is >= 60 msg = " 及 格" Case 50 To 59 msg = " 必需補考" Case Is < 50 msg = " 明年再見" End Select MsgBox msg End Sub
迴圈的控制方法 For…Next ﹝語法﹞: For 變數名稱 = 起始值 To 結束值 【程式區塊】 Next ﹝執行方法﹞: 先將變數設定成〝起始值〞,然後反覆地執行區塊中的指令,並依序將變數的值加1,直到變數的值大於〝結束值〞。
迴圈的控制方法 Private Sub CommandButton1_Click() total = 0 For k = 1 To 100 ’執行100次的迴圈 total = total + k Next MsgBox “1+2+3+…+100 =” & total End Sub
迴圈的控制方法 Private Sub CommandButton1_Click() Dim total As Integer For k = 1 To 100 Step 2 total = total + k Next MsgBox "奇數的總合 = " & total End Sub
迴圈的控制方法 Private Sub CommandButton1_Click() Dim total As Integer For k = 1 To 100000 total = total + k If total > 6000 Then ’總合如果大於6000 Exit For ’就結束迴圈的運作 End If Next MsgBox "次 數 = " & k & _ " 總 合 = " & total End Sub
迴圈的控制方法 巢狀的迴圈 For i = 1 To 12 ' 外層的迴圈 For j = 1 To 3 ' 內層的迴圈 . . Next Next
迴圈的控制方法 Private Sub CommandButton1_Click() Dim score(12, 3) As Integer ' 宣告陣列 For i = 1 To 12 ' 設定數值 For j = 1 To 3 score(i, j) = i * 100 + j * 10 Next Next MsgBox "score(5,3) = " & score(5, 3) '顯示一個元素 End Sub
迴圈的控制方法 Private Sub CommandButton1_Click() For i = 1 To 9 For j = 1 To 9 Cells(i, j).Value = i * j ’在儲存格裡面填入數字 Next Next End Sub
迴圈的控制方法 Private Sub CommandButton1_Click() For i = 1 To 9 If i Mod 2 = 1 Then ' 如果是奇數列 Rows(i).Interior.ColorIndex = 35 ' 就改變儲存格的顏色 End If Next End Sub
迴圈的控制方法 For Each…Next ﹝語法﹞: For Each 元素 In 群組的名稱 【程式區塊】 Next ﹝執行方法﹞: 先選取〝群組〞的第一個元素,再執行區塊中的程式,然後依序改成下一個元素,直到所有的元素都執行完畢。
迴圈的控制方法 Do While…Loop ﹝語法﹞: Do While <條件式> 【程式區塊】 Loop ﹝執行方法﹞: 如果<條件式>成立,就執行區塊內的程式,然後重新檢查<條件式>,直到<條件式>不成立為止。