VBA中的The If…Then…Else語句

2020-12-07 09:57 更新

現(xiàn)在,你知道當一個或多個條件為真或為假時如何顯示信息或采取行動。然而,如果你的程序需要在條件為真時采取某個行動,而條件為假時采取另外一個行動,應該怎么辦呢?你可以通過添加一個Else子句就可以根據(jù)測試的結(jié)果將你的過程引導到一個合適的語句。If…Then…Else 語句有兩種格式——單行和多行。單行的格式為:


If 條件 Then 語句 1 Else 語句 2


當條件為真時,執(zhí)行關鍵字 Then 后面的語句,當條件為假時,則執(zhí)行 Else 后面的語句。例如:


If Sales>5000 Then Bonus = Sales * 0.05 Else MsgBox “No Bonus”

如果儲存在變量 Sales 的值大于 5000 的話,那么 VB 將使用下述公式:Sales * 0.05 來計算股紅(bonus)。然而,如果變量 Sales 不大于 5000 的話,VB 就會顯示信息“NoBonus”。If…Then…Else 語句應該用于決定執(zhí)行兩個操作中的哪一個。當你要執(zhí)行多個語句時,你最好使用多行格式的 If…Then…Else 語句:



If 條件 Then

如果條件為真時要執(zhí)行的語句

Else

如果條件為假時要執(zhí)行的語句


End If


注意,多行的 If…Then…Else 語句以關鍵字 EndIf 結(jié)束。使用上面顯示的縮進使得程序結(jié)構(gòu)易于閱讀。在下面的例子中,如果條件 ActiveSheet.Name = “Sheet1”為真,VB 就執(zhí)行 Then 和 Else 之間的語句,并且忽略 Else 和 EndIf 之間的語句。當條件為假時,VB 就忽略 Then 和 Else 之間的語句,并且執(zhí)行 Else 和 End If 之間的代碼。

If ActiveSheet.Name = "Sheet1" Then
   ActiveSheet.Name = "My Sheet" MsgBox "This sheet has been renamed."
Else
   MsgBox "This sheet name is not default."
End If

讓我們來看看程序示例:



1.  在工程 Decisions(Chap05.xls) 里插入一個新模塊


2.  重命名該模塊為 IfThenElse


3.  輸入下列過程 WhatTypeOfDay:


Sub WhatTypeOfDay()
     Dim response As String
     Dim question As String
     Dim strmsg1 As String, strmsg2 As String
     Dim myDate As Date
     question = "Enter any date in the format mm/dd/yyyy:" _
          & Chr(13)& " (e.g., 11/22/1999)"
     strmsg1 = "weekday"
     strmsg2 = "weekend"
     response = InputBox(question)
     myDate = Weekday(CDate(response))

     If myDate >= 2 AND myDate <= 6 Then

          MsgBox strmsg1

     Else

          MsgBox strmsg2

     End If

End Sub

上面的過程要求用戶輸入任意一個日期。用戶提供的字符串通過一個內(nèi)置函數(shù) CDate 轉(zhuǎn)變?yōu)?Date 數(shù)據(jù)類型,最好,函數(shù) Weekday 將日期轉(zhuǎn)變?yōu)橐粋€指明該日期在一周里的天數(shù)(參見表 5-3)。該整數(shù)儲存于變量 myDate 里。條件測試用以檢查變量 myDate 是否大于等于 2 以及小于等于 6。如果測試結(jié)果為真,那么用戶就被告知,該提供的數(shù)據(jù)是個工作日;否則,程序宣布這是個周末。


內(nèi)置函數(shù)Weekday返回的值

表 5-3 內(nèi)置函數(shù) Weekday 返回的值


4.  從 VB 窗口運行該程序。運行幾次,每次提供不同的日期。對照你的桌面或日歷檢查 VB 的答案是否正確。

技巧:什么是結(jié)構(gòu)化程序?
結(jié)構(gòu)化編程要求所有的程序具有模塊化的設計,并使用三種邏輯結(jié)構(gòu):順序,決定和循環(huán)。順序結(jié)構(gòu)為一條接一條地執(zhí)行語句;決定結(jié)構(gòu)則是讓你基于一些條件的測試來執(zhí)行一些特定的語句;而只要某特定的條件為真,循環(huán)結(jié)構(gòu)就重復地執(zhí)行某條或某些語句。循環(huán)是下章的主題。在結(jié)構(gòu)化編程里,其它一些邏輯語句,例如 GoTo,是不允許的。結(jié)構(gòu)化程序的代碼容易跟蹤——它從上到下平穩(wěn)地走下來,沒有任何跳躍到特定標志去的語句。下面就是一個結(jié)構(gòu)化程序和非結(jié)構(gòu)化程序的例子:

非結(jié)構(gòu)化程序:
Sub GoToDemo()
Dim num, mystr
   num = 1
If num = 1 Then
   GoTo line1
Else
   GoTo Line2
Line1:
   mystr = “Number equals 1”
   GoTo LastLine
Line2:
   mystr = “Number equals 2”
LastLine:
   Debug.Print mystr
End sub

結(jié)構(gòu)化程序:
Sub Structure()
    Dim num, mystr
    num = 1
    If num = 1 Then
       mystr = “Number equals 1”
       Debug.Print mystr
    Else
       mystr = “Number equals 2”
    End if
End Sub
上面的字程序 EnterData 提示用戶選擇任意單元格,然后單元格地址賦值于對象變量 cell。If…Then…Else 結(jié)構(gòu)檢查被選擇的單元格是否為空。IsEmpty 是個內(nèi)置函數(shù),用來決定某個變量是否已經(jīng)被初始化了。如果該變量沒有被初始化,那么 IsEmpty 函數(shù)返回 ture(真),否則返回 false(假)?;叵胛覀冋f過,當變量被賦予第一個值時,它就被初始化了。在本過程中,如果當前單元格為空時,VB 將它當作一個零長度的字符串(””)。除了:
If IsEmpty(ActiveCell) Then
你還可以使用下述指令:
If ActiveCell.Value = "" Then
如果當前單元格為空,Then 后面的語句就會被執(zhí)行。該語句提示用戶輸入一個文本或數(shù)字,并且一旦數(shù)據(jù)被提供,該數(shù)據(jù)就會輸入給當前單元格。如果當前單元格不為空,VB 將跳到子句 Else 后面的指令。該指令將讓 VB 選擇同列里的下一個單元格。當你運行該過程,信息框提示你選擇一個單元格,在工作表上,點擊任何單元格。被選擇的單元格地址就會出現(xiàn)在信息框的編輯框里面。點擊確定退出信息框。VB 檢查被選擇單元格的內(nèi)容并且跳到你過程里的 true 或 false 指令塊(true 指令塊在 Then 后面,而 false 指令塊在 Else 后面)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號