VBA中的多个IF ELSE

时间:2017-09-07 14:21:16

标签: excel vba excel-vba

我尝试构建遍历一系列If语句的代码,以评估电子表格本身中4个下拉列表的内容。

但是,当我使用下面的代码时,我得到一个错误说

  

没有End IF的阻止IF

尽管尝试了许多替代方案,但似乎无法摆脱。

在这里为代码长度道歉,但感觉有必要说明我想要完成的事情!

Sub GOClick()
Worksheets("Dashboard").Select
If Worksheets("Dashboard").Range("B3") = "National Gallery" And 
Worksheets("Dashboard").Range("B4") = "Unframed" And 
Worksheets("Dashboard").Range("B7") = "Product Costings" And 
Worksheets("Dashboard").Range("B5") = "N/A" And 
Worksheets("Dashboard").Range("B6") = "N/A" Then
Worksheets("(7b)").Activate
Range("A8:F23").Copy
Worksheets("Dashboard").Activate
Range("D11").PasteSpecial xlPasteAll


Else:
If Worksheets("Dashboard").Range("B3") = "N/A" And 
Worksheets("Dashboard").Range("B4") = "N/A" And 
Worksheets("Dashboard").Range("B7") = "Product Costings" And 
Worksheets("Dashboard").Range("B5") = "N/A" And 
Worksheets("Dashboard").Range("B6") = "Inkjet" Then
Worksheets("(1)").Activate
Range("A5:G69").Copy
Worksheets("Dashboard").Activate
Range("D11").PasteSpecial xlPasteAll


Else:
If Worksheets("Dashboard").Range("B3") = "N/A" And 
Worksheets("Dashboard").Range("B4") = "N/A" And 
Worksheets("Dashboard").Range("B7") = "Product Costings" And 
Worksheets("Dashboard").Range("B5") = "N/A" And 
Worksheets("Dashboard").Range("B6") = "Xerox" Then
Worksheets("(1)").Activate
Range("A5:I101").Copy
Worksheets("Dashboard").Activate
Range("D11").PasteSpecial xlPasteAll

Else:
If Worksheets("Dashboard").Range("B3") = "Wholesale" And 
Worksheets("Dashboard").Range("B4") = "Ready to Hang" And 
Worksheets("Dashboard").Range("B7") = "Product Costings" And 
Worksheets("Dashboard").Range("B5") = "N/A" And 
Worksheets("Dashboard").Range("B6") = "N/A" Then
Worksheets("(3a)").Activate
Range("A5:S105").Copy
Worksheets("Dashboard").Activate
Range("D11").PasteSpecial xlPasteAll
Else: MsgBox ("No Data")
End If

End Sub

2 个答案:

答案 0 :(得分:3)

这是更正后的代码,删除了所有丑陋无用的Activate,并进行了适当的缩进。我还添加了一个With子句,使其更快更短。<​​/ p>

Sub GOClick()
With Worksheets("Dashboard")
    If .Range("B3") = "National Gallery" And _
                .Range("B4") = "Unframed" And _
                .Range("B7") = "Product Costings" And _
                .Range("B5") = "N/A" And _
                .Range("B6") = "N/A" Then
        Worksheets("(7b)").Range("A8:F23").Copy
        .Range("D11").PasteSpecial xlPasteAll

    ElseIf .Range("B3") = "N/A" And _
                .Range("B4") = "N/A" And _
                .Range("B7") = "Product Costings" And _
                .Range("B5") = "N/A" And _
                .Range("B6") = "Inkjet" Then
        Worksheets("(1)").Range("A5:G69").Copy
        .Range("D11").PasteSpecial xlPasteAll      

    ElseIf .Range("B3") = "N/A" And _
                .Range("B4") = "N/A" And _
                .Range("B7") = "Product Costings" And _
                .Range("B5") = "N/A" And _
                .Range("B6") = "Xerox" Then
        Worksheets("(1)").Range("A5:I101").Copy
        .Range("D11").PasteSpecial xlPasteAll

    ElseIf .Range("B3") = "Wholesale" And _
                .Range("B4") = "Ready to Hang" And _
                .Range("B7") = "Product Costings" And _
                .Range("B5") = "N/A" And _
                .Range("B6") = "N/A" Then
        Worksheets("(3a)").Range("A5:S105").Copy
        .Range("D11").PasteSpecial xlPasteAll
    Else
        MsgBox ("No Data")
    End If
End With

End Sub

答案 1 :(得分:-1)

End if添加到您的代码中:

......
Range("D11").PasteSpecial xlPasteAll
Else: MsgBox ("No Data")
End If
End if
End Sub