一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VBA中的If…Then語句

 wangyong670 2024-11-10

你在你的VBA過程里面通過使用專門的控制結(jié)構(gòu)里的條件表達式來做決定。條件表達式是使用關(guān)系運算符(見表5-1),邏輯運算符(見表5-2)或者兩者結(jié)合的表達式。當(dāng)VB在你程序里遇到條件表達式時,它將評估該表達式是對還是錯。

VBA

關(guān)系運算符

表5-1 VBA中的關(guān)系運算符

邏輯運算符

表5-2 VBA中的邏輯運算符

If…Then語句

在VBA過程里面作決定的最簡單的方法就是使用If…Then語句。假使你想要基于某個條件選擇一個行動,那么你可以使用下述結(jié)構(gòu):

If 條件Then 語句
例如,要刪除工作表里面的空行,首先得確認(rèn)當(dāng)前單元格為空白的,如果測試的結(jié)果為真則繼續(xù)刪除包含本單元格在內(nèi)的整行:

If ActiveCell = "" Then Selection.EntireRow.Delete

如果當(dāng)前單元格不是空白的,VB將忽略關(guān)鍵字Then后面的語句。
如果條件為真,你有時候可能想要執(zhí)行好幾個操作,雖然你可以在同一行加上其它的語句,通過冒號分隔它們,但是如果你使用多行If…Then語句,你的代碼將更清晰,如下:


If 條件Then
    語句1
    語句2
    語句N
End If


例如,當(dāng)當(dāng)前單元格的數(shù)值大于50時執(zhí)行一些操作,你可以編寫如下指令:

If ActiveCell.Value >50 Then
    MsgBox "The exact value is " & ActiveCell.Value
    Debug.Print ActiveCell.Adress & ": " & ActiveCell.Value
End If

在上面的例子中,如果當(dāng)前單元格數(shù)值小于等于50的話,那么在關(guān)鍵字Then和EndIf之間的語句就不會執(zhí)行。注意,If…Then語句必須以關(guān)鍵字End  If結(jié)束。VB如何作決定呢?它評估在關(guān)鍵字If和Then中間找到的條件。我們來評估一下下面的條件:

ActiveCell.Value >50

1.  在一個空白工作表上選擇任意一個單元格并輸入50


2.  切換到VB編輯器窗口


3.  激活立即窗口


4.  輸入下述語句,并且按下回車鍵

? ActiveCell.Value >50

回車后,VB寫下測試結(jié)果——false。當(dāng)測試結(jié)果為假時,VB將不會讀代碼中關(guān)鍵字Then之后的語句,它將直接跳過去讀下行代碼,但是,如果沒有其它的代碼行時,程序就將結(jié)束。


5.  現(xiàn)在,將運算符改為小于等于號,并且讓VB評估下述條件:

? ActiveCell.Value <= 50

這次測試返回真(true),并且VB跳到關(guān)鍵字Then后面的語句上。


6.  關(guān)閉立即窗口。


既然你已經(jīng)知道了VB如何評估條件的,我們就來在VBA過程里試試If…Then語句吧。


1.  打開一個新工作簿并保存為Chap05.xls

2.  切換到VB編輯器窗口,并且將VBA工程重命名為Decisions

3.  插入一新模塊并重命名為IfThen

4.  在IfThen模塊里,輸入下述過程:

Sub SimpleIfThen()
    Dim weeks As String
    weeks = InputBox("How many weeks are in a year:", "Quiz")
    If weeks<>52 Then MsgBox "Try Again"
End Sub
過程SimpleIfThen將用戶的答案儲存于一個名為weeks的變量上,然后,該變量的值將會和數(shù)值52進行比較。如果比較的結(jié)果為真(也就是說,變量weeks的值不等于52),VB就會顯示信息“TryAgain”


5.  運行過程SimpleIfThen并且輸入一個除52之外的數(shù)字


6.  重新運行過程SimpleIfThen并輸入數(shù)字52。當(dāng)你輸入正確的周數(shù),VB將不會做任何事情,程序就直接結(jié)束了。當(dāng)用戶猜對時,最好也顯示一信息。


7.  在關(guān)鍵字End Sub前的另外一行輸入下述指令:

If weeks = 52 Then MsgBox "Congratulations!"

8.  再次運行過程SimpleIfThen并輸入52。當(dāng)你輸入了正確的答案,VB不會執(zhí)行語句MsgBox“Try Again.”。如果提供的條件測試結(jié)果為假時,過程的執(zhí)行結(jié)果就是忽略關(guān)鍵字Then右邊的語句?;叵胍幌拢琕BA過程可以調(diào)用另外一個過程,我們來看看它是否可以調(diào)用本身。


技巧:If…Then語句的兩種格式


If…Then語句有兩種格式——單行和多行。這種短格式適合于可以寫在一行里的語句,例如:

If secretCode <> 01W01 Then MsgBox “Access denied”

或者:

If secretCode = 01W01 Then alpha=True : beta = False
這里的secreCode,alpha和beta是變量名稱。在第一個例子里,如果變量secretCode的值不等于01W01,那么VB顯示信息“Accessdenied”。在第二個例子里,當(dāng)變量secretCode值等于01W01時,VB就將變量alpha設(shè)置為真,變量beta為假。注意,執(zhí)行的第二條語句用冒號與第一條語句分隔開來。


如果當(dāng)條件為真需要執(zhí)行很多語句或?qū)⒁獔?zhí)行的語句及其長時,多行的If…Then語句會更清楚,如下例所示:

If ActiveSheet.Name = "Sheet1" Then
ActiveSheet.Move after:=Sheets _
(Worksheets.Count)
End If

在這個例子中,VB將會檢查當(dāng)前工作表的名稱。如果它是“Sheet1”,條件ActiveSheet .Name =“Sheet1”將為真,并且VB將繼續(xù)執(zhí)行關(guān)鍵字Then后面的代碼行。結(jié)果,當(dāng)前工作表將會被移動到工作簿的最后。

9.  按下面方法修改過程SimpleIfThen里的第一個If語句:

If weeks <> 52 Then MsgBox "Try Again" : SimpleIfThen

我們在原來的過程SimpleIfThen后面加上一個冒號和SimpleIfThen過程名稱。如果用戶輸入了不正確的答案,他將看到一信息,并且他一旦點擊確定按鈕后,他將獲得另外一次機會來提供正確的答案——輸入框?qū)⒃俅纬霈F(xiàn)。用戶將能夠不斷地猜測答案,事實上,他不能適當(dāng)?shù)赝瞥鲈撨^程,直到他提供了正確的答案。如果他點擊了取消按鈕,他將不得不去處理不友好的錯誤信息“類型不匹配”。


在上章里,你看到了如何使用On Error GoTo標(biāo)志語句來繞過錯誤,現(xiàn)在,你可以這樣來修改你的過程SimpleIfThen:

Sub SimpleIfThen()
    Dim weeks As String
    On Error GoTo VeryEnd
    weeks = InputBox("How many weeks are in a year:", "Quiz")
    If weeks<>52 Then MsgBox "Try Again": SimpleIfThen
    If weeks=52 Then MsgBox "Congratulations!"
    VeryEnd:
End Sub
10. 運行幾遍過程SimpleIfThen,提供一些不正確的答案。你在程序里面加的錯誤捕捉指令使得用戶可以推出猜測,而不必面對這可惡的錯誤信息。

基于多于一個條件的決定

在上面段落里的過程SimpleIfThen里,If…Then語句僅評估一個條件,然而,這個語句可以使用一個以上的條件。你必須使用邏輯運算符AND和OR(參見本章前面的表5-2)來明確If…Then語句里的多個條件。這里是使用AND運算符的語法:


If 條件1 AND 條件2 Then 語句


在上面的語法例,條件1和條件2都必須為真,VB才會執(zhí)行關(guān)鍵字Then右邊的語句。例如:

If sales = 10000 AND salary <45000 Then SlsCom = Sales * 0.07

在這個例子中,條件1 sales=10000,條件2 salary<45000。當(dāng)AND使用在該條件表達式中時,兩個條件都必須為真,VB才會計算銷售傭金(SlsCom)。如果兩個條件中只要有一個為假,或者都為假,VB將會忽略Then后面的語句。如果符合其中一個條件就足夠好時,你就應(yīng)該使用運算符OR。這里是語法:

If 條件1 OR 條件2 Then 語句


運算符OR更靈活一些,只要任何一個條件為真時,VB就會執(zhí)行關(guān)鍵字Then后面的語句。我們來看看這個例子:

If dept = "S" OR dept = "M" Then bonus = 500
在上面的例子里,如果有個條件為真,VB就將給變量bonus賦值500。如果兩個條件都為假,那么VB就會忽略該行剩余的代碼。


現(xiàn)在我們來看個完整的例子。假設(shè)如果你采購50套產(chǎn)品的話,就可以獲得10%的折扣,單價為$7.00。過程IfThenAnd示范運算符AND的使用。


1.  Decisions (Chap05.xls)工程的IfThen模塊里輸入下述過程:

Sub IfThenAnd()
    Dim price As Single
    Dim units As Integer
    Dim rebate As Single
    Const strmsg1 = "To get a rebate you must buy an additional "
    Const strmsg2 = "Price must equal $7.00"
    units = Range("B1").Value
    price = Range("B2").Value
    If price = 7 AND units >= 50 Then
        rebate = (price * units) * 0.1
        Range("A4").Value = "The rebate is: $" & rebate
    End If
    If price = 7 AND units < 50 Then
        Range("A4").Value = strmsg1 & 50 - units & " unit(s)."
    End If
    If price <> 7 AND units >= 50 Then
        Range("A4").Value = strmsg2
    End If
    If price <> 7 AND units < 50 Then
        Range("A4").Value = "You didn't meet the criteria."
    End If
End Sub
上面的過程IfThenAnd使用了四個If…Then語句來評估兩個變量price和units的內(nèi)容。在If…Then關(guān)鍵字之間的運算符AND使得測試多于一個的條件成為可能。使用了AND運算符時,所有條件都必須為真,VB才會去執(zhí)行關(guān)鍵字Then和End之間的語句。因為過程的運行依賴于工作表單元格里輸入的數(shù)據(jù),所以從Excel窗口來運行它比較方便。

2.  切換到Excel應(yīng)用窗口,并且選擇“工具”-“宏”-“運行宏”

3.  在宏對話框里,選擇IfThenAnd并點擊“選項”按鈕

4.  給你的宏設(shè)置快捷鍵:Ctrl+Shift+I,并且退出宏對話框

5.  在工作表里輸入以下數(shù)據(jù):

數(shù)據(jù)

6.  按下Ctrl+Shift+I運行過程IfThenAnd

7.  改變單元格B1和B2的值,以便你每次運行該過程時,不同的If…Then語句為真

技巧:指令塊和縮進
要使If程序塊更容易閱讀和理解,可以使用縮進。對比下面的代碼書寫:
If condition Then
action1
End If
If condition Then
   action
End If

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    91久久精品中文内射| 国产精品不卡一区二区三区四区| 久热99中文字幕视频在线 | 国内精品伊人久久久av高清| 欧美午夜伦理在线观看| 狠狠做深爱婷婷久久综合| 国产av乱了乱了一区二区三区| 亚洲一区二区三在线播放| 日韩一区二区三区四区乱码视频| 午夜激情视频一区二区| 中文人妻精品一区二区三区四区| 日韩精品一级一区二区| 高清一区二区三区不卡免费| 亚洲日本久久国产精品久久| 绝望的校花花间淫事2| 欧美日韩国产一级91| 国产大屁股喷水在线观看视频| 国产极品粉嫩尤物一区二区| 亚洲欧美日本国产有色| 国产欧美日产中文一区| 国产精品免费视频视频| 国产中文字幕一二三区| 国产盗摄精品一区二区视频| 亚洲av一区二区三区精品| 亚洲国产中文字幕在线观看| 伊人天堂午夜精品草草网| 欧美精品久久一二三区| 亚洲a码一区二区三区| 国产欧美日韩精品一区二区| 国内精品美女福利av在线| 国产精品偷拍一区二区| 五月天婷亚洲天婷综合网| 国产伦精品一区二区三区高清版| 91精品国产综合久久福利| 国产精品99一区二区三区| 成人精品网一区二区三区| 午夜成年人黄片免费观看| 五月激情婷婷丁香六月网| 美女被草的视频在线观看| 有坂深雪中文字幕亚洲中文| 国产日韩精品激情在线观看|