[英]Excel VBA IF ElseIf
我繼續得到'不匹配的類型錯誤',或者其他一些瑣事錯誤,比如'no block if'。 然而,當我修復一個,另一個彈出備份。 不確定此代碼中的問題所在。 它非常直接,獲取單元格值,然后根據值進行分類。
Private Sub CommandButton2_Click()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Completed Questionnaire")
Set sh2 = ActiveWorkbook.Sheets("Classifier")
If sh1.Range("C10") = "Yes" Or sh1.Range("C11") = "Yes" Then
If sh1.Range("C19:C20") = "Yes" Or sh1.Range("C17") = "Yes" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS1"
sh2.Protect Password:="xxx"
End If
ElseIf sh1.Range("C10") = "Yes" Or sh1.Range("C11") = "Yes" And _
sh1.Range("C14") = "Yes" Or _
sh1.Range("C15") = "Yes" Or _
sh1.Range("C16") = "Yes" Or _
sh1.Range("C18") = "Yes" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS2"
sh2.Protect Password:="xxx"
ElseIf sh1.Range("C12") = "Yes" And sh1.Range("C21") = "Yes" Then
If sh1.Range("C10:C11") = "No" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS3"
sh2.Protect Password:="xxx"
End If
ElseIf sh1.Range("C13") = "Vendor Only" And sh1.Range("C10:C11") = "Yes"
Then _
If ("C14") = "Yes" Or _
sh1.Range("C15") = "Yes" Or _
sh1.Range("C16") = "Yes" Or _
sh1.Range("C17") = "Yes" Or _
sh1.Range("C18") = "Yes" Or _
sh1.Range("C19") = "Yes" Or _
sh1.Range("C20") = "Yes" Then _
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Payment Process"
sh2.Protect Password:="xxx"
End If
ElseIf sh1.Range("C10:C21") = "No" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Non-Payment"
sh2.Protect Password:="xxx"
Else: sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Needs Review"
sh2.Protect Password:="xxx"
End If
Sheets("Classifier").Select
End Sub
嘗試這個:
Private Sub CommandButton2_Click()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Completed Questionnaire")
Set sh2 = ActiveWorkbook.Sheets("Classifier")
If sh1.Range("C10") = "Yes" Or sh1.Range("C11") = "Yes" Then
If sh1.Range("C19:C20") = "Yes" Or sh1.Range("C17") = "Yes" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS1"
sh2.Protect Password:="xxx"
End If
ElseIf sh1.Range("C10") = "Yes" Or sh1.Range("C11") = "Yes" And _
sh1.Range("C14") = "Yes" Or _
sh1.Range("C15") = "Yes" Or _
sh1.Range("C16") = "Yes" Or _
sh1.Range("C18") = "Yes" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS2"
sh2.Protect Password:="xxx"
ElseIf sh1.Range("C12") = "Yes" And sh1.Range("C21") = "Yes" Then
If sh1.Range("C10:C11") = "No" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS3"
sh2.Protect Password:="xxx"
End If
ElseIf sh1.Range("C13") = "Vendor Only" And sh1.Range("C10:C11") = "Yes" Then
If ("C14") = "Yes" Or _
sh1.Range("C15") = "Yes" Or _
sh1.Range("C16") = "Yes" Or _
sh1.Range("C17") = "Yes" Or _
sh1.Range("C18") = "Yes" Or _
sh1.Range("C19") = "Yes" Or _
sh1.Range("C20") = "Yes" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Payment Process"
sh2.Protect Password:="xxx"
End If
ElseIf sh1.Range("C10:C21") = "No" Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Non-Payment"
sh2.Protect Password:="xxx"
Else
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Needs Review"
sh2.Protect Password:="xxx"
End If
Sheets("Classifier").Select
End Sub
我修復了一些錯誤的換行符和混合_
。 請注意,有更好的方法來執行各種Or
語句。 但首先,所有這些細胞都可以Yes
,或者一次只有一個,因為你想要解除保護和保護嗎?
編輯:我想我使用COUNTIF()
清理了一點。 看看這是否有效:
Private Sub CommandButton2_Click()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Completed Questionnaire")
Set sh2 = ActiveWorkbook.Sheets("Classifier")
If WorksheetFunction.CountIf(sh1.Range("C10:C11", "C14"), "Yes") > 0 Then
If WorksheetFunction.CountIf(sh1.Range("C19:C20", "C17"), "Yes") > 0 Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS1"
sh2.Protect Password:="xxx"
End If
ElseIf WorksheetFunction.CountIf(sh1.Range("C10:C11"), "Yes") > 0 And _
WorksheetFunction.CountIf(sh1.Range("C14:C16", "C18"), "Yes") > 0 Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS2"
sh2.Protect Password:="xxx"
ElseIf WorksheetFunction.CountIf(sh1.Range("C12, C21"), "Yes") > 0 Then
If WorksheetFunction.CountIf(sh1.Range("C10:C11"), "No") > 0 Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "PS3"
sh2.Protect Password:="xxx"
End If
ElseIf sh1.Range("C13") = "Vendor Only" And WorksheetFunction.CountIf(sh1.Range("C10:C11"), "Yes") > 0 Then
If WorksheetFunction.CountIf(sh1.Range("C14:C20"), "Yes") > 0 Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Payment Process"
sh2.Protect Password:="xxx"
End If
ElseIf WorksheetFunction.CountIf(sh1.Range("C10:C21"), "No") > 0 Then
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Non-Payment"
sh2.Protect Password:="xxx"
Else
sh2.Unprotect Password:="xxx"
sh2.Range("D4") = "Needs Review"
sh2.Protect Password:="xxx"
End If
Sheets("Classifier").Select
End Sub
將多個單元格值與其他值進行比較失敗,例如:
sh1.Range("C19:C20") = "Yes"
你想在這做什么? 測試C19和C20都=“是”?
然后(上帝禁止我寫我要編寫的代碼)使用2個比較:
sh1.Range("C19") = "Yes" AND sh1.Range("C20") = "Yes"
第4個主IF塊中存在語法錯誤:
ElseIf sh1.Range("C13") = "Vendor Only" And sh1.Range("C10:C11") = "Yes" Then _
應該:
ElseIf sh1.Range("C13") = "Vendor Only" And sh1.Range("C10:C11") = "Yes" Then
要應用我們上面學到的東西,它應該是:
ElseIf sh1.Range("C13") = "Vendor Only" And sh1.Range("C19") = "Yes" AND sh1.Range("C20") = "Yes" Then
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.