VBA/Excel/Access/Word/Language Basics/IF
Версия от 16:33, 26 мая 2010; (обсуждение)
Содержание
- 1 An If... Then... ElseIf Statement without an Else Clause
- 2 A simple decision-making structure in a subroutine
- 3 Block If Statements
- 4 Combine several If structures using ElseIf.
- 5 Decisions Based on More Than One Condition: Using the If..Then...AND Conditional Statement
- 6 If statement ladder
- 7 If/Then/Else: guess a number
- 8 If... Then... ElseIf... Else Statements
- 9 If...Then...ElseIf Statement
- 10 Nest an if statement with Do While
- 11 Nest if statement in a Do Loop
- 12 One-Line If Statements
- 13 Use and in if statement
- 14 Using If...Then...Else Conditional Statement
- 15 Using the If...Then Statement
- 16 Using the Multi-Line If...Then Statement
- 17 Within an If structure, you can have an alternative path by using an Else statement.
- 18 Write If Then statement in one line
An If... Then... ElseIf Statement without an Else Clause
Sub Check_Password()
Dim strPassword As String
BadPassword:
strPassword = "Password"
If Len(strPassword) = 0 Then
End
ElseIf Len(strPassword) < 6 Then
Debug.Print "too short."
GoTo BadPassword
ElseIf Len(strPassword) > 15 Then
Debug.Print "too long."
GoTo BadPassword
End If
End Sub
A simple decision-making structure in a subroutine
= Is equal to
<> Is not equal to
> Is greater than
< Is less than
>= Is greater than or equal to
<= Is less than or equal to
Sub ifTest()
Dim intNum As Integer
Dim strMessage As String
intNum = 12
If intNum > 10 Then
strMessage = "The number is " & intNum
End If
Debug.Print strMessage
End Sub
Block If Statements
Sub blockIf()
Dim bytAge As Byte
If bytAge < 21 Then
MsgBox "You may not purchase alcohol.", , "Underage"
End
End If
End Sub
Combine several If structures using ElseIf.
Sub ifTest4()
Dim intNum As Integer
intNum = 12
If intNum = 1 Then
Debug.Print "This is the lowest number"
ElseIf intNum = 15 Then
Debug.Print "This is the highest number"
Else
Debug.Print "The number is between 1 and 15"
End If
End Sub
Decisions Based on More Than One Condition: Using the If..Then...AND Conditional Statement
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 = 234
price = 7
If price = 7 And units >= 50 Then
rebate = (price * units) * 0.1
MsgBox "The rebate is: $" & rebate
End If
If price = 7 And units < 50 Then
MsgBox strMsg1 & "50 - units."
End If
If price <> 7 And units >= 50 Then
MsgBox strMsg2
End If
If price <> 7 And units < 50 Then
MsgBox "You didn"t meet the criteria."
End If
End Sub
If statement ladder
Function Price(Product As String) As Variant
If Product = "Apples" Then
Price = 12.5
ElseIf Product = "Oranges" Then
Price = 15
ElseIf Product = "Pears" Then
Price = 18
ElseIf Product = "Mangoes" Then
Price = 25
Else
Price = CVErr(xlErrNA)
End If
End Function
Sub test()
MsgBox CStr(Price("Oranges"))
End Sub
If/Then/Else: guess a number
Sub NumberGuess()
Dim ranNumber As Integer
Dim userGuess As Integer
Randomize
ranNumber = Int(Rnd * 10) + 1
userGuess = InputBox("Guess a number between 1 and 10", "Number Guess")
If ranNumber = userGuess Then
Debug.Print ("You got it!")
Else
Debug.Print ("No, the correct answers was " & ranNumber)
End If
End Sub
Sub NumberGuess1()
Dim ranNumber As Integer
Dim userGuess As Integer
Randomize
ranNumber = Int(Rnd * 10) + 1
userGuess = InputBox("Guess a number between 1 and 10", "Number Guess")
If ranNumber = userGuess Then
Debug.Print ("You got it!")
Else
If ranNumber < userGuess Then
userGuess = InputBox("Too high, guess again ", "Number Guess")
If ranNumber = userGuess Then
Debug.Print ("You got it!")
Else
Debug.Print ("No, the correct answer was " & ranNumber)
End If
Else
userGuess = InputBox("Too low, guess again ", "Number Guess")
If ranNumber = userGuess Then
Debug.Print ("You got it!")
Else
Debug.Print ("No, the correct answer was " & ranNumber)
End If
End If
End If
End Sub
If... Then... ElseIf... Else Statements
Sub Creating_a_Document()
Dim lngButton As Long
Dim strMessage As String
strMessage = "Question."
lngButton = MsgBox(strMessage, vbYesNoCancel + vbQuestion, "Create New Document")
If lngButton = vbYes Then
Documents.Add Template:="C:\t.dot"
ElseIf lngButton = vbNo Then
Documents.Add
Else "lngButton is vbCancel
End
End If
End Sub
If...Then...ElseIf Statement
Sub elseIfDemo()
Dim myNumber As Integer
myNumber = 5
If myNumber = 0 Then
MsgBox "You entered zero."
ElseIf myNumber > 0 Then
MsgBox "You entered a positive number."
ElseIf myNumber < 0 Then
MsgBox "You entered a negative number."
End If
End Sub
Nest an if statement with Do While
Sub doTest()
Dim intCounter As Integer
Dim intTest As Integer
intTest = 1
intCounter = 1
Do While intTest = 1
Debug.Print "This is loop number " & intCounter
If intCounter >= 5 Then
intTest = 0
End If
intCounter = intCounter + 1
Loop
End Sub
Nest if statement in a Do Loop
Sub ShadeEverySecondRow()
i = 0
Do
i = i + 2
If IsEmpty(Cells(i, 1)) Then Exit Do
Rows(i).Interior.ColorIndex = 15
Loop
End Sub
One-Line If Statements
Sub ifDemo()
Dim bytAge As Byte
bytAge = InputBox("Enter your age.", "Age")
If bytAge < 21 Then MsgBox "You may not purchase alcohol.", , "Underage"
End Sub
Use and in if statement
Sub ifTest3()
Dim intNum As Integer
Dim strMessage As String
intNum = 4
If intNum >= 1 And intNum <= 15 Then
msgBox "the number is between 1 and 15"
Else
msgBox "Sorry, the number must be between 1 and 15"
End If
End Sub
Using If...Then...Else Conditional Statement
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
Using the If...Then Statement
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
Using the Multi-Line If...Then Statement
Sub SimpleIfThen3()
Dim weeks As String
Dim response As String
weeks = InputBox("How many weeks are in a year?", "Quiz")
If weeks <> 52 Then
MsgBox "The correct answer is 52.", response = MsgBox("Would you like to try again?", _
vbYesNo + vbInformation + vbDefaultButton1, "Continue Quiz?")
If response = vbYes Then
Call SimpleIfThen3
End If
End If
End Sub
Within an If structure, you can have an alternative path by using an Else statement.
Sub ifTest2()
Dim intNum As Integer
Dim strMessage As String
intNum = 9
If intNum > 10 Then
strMessage = "The number is greater than 10"
Else
strMessage = "The number is less than 10"
End If
Debug.Print strMessage
End Sub
Write If Then statement in one line
Sub SimpleIfThen2()
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": SimpleIfThen2
If weeks = 52 Then MsgBox "Congratulations!"
VeryEnd:
End Sub