簡體   English   中英

Excel VBA IF ElseIf

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM