Complie错误 – 否则没有如果VBA

我是vba的新手,请原谅我的无知。 我创build了一个将通过下拉列表运行的macros,并在下拉列表中input每个名称,并且它可以工作:

Sub PrintAll() Dim Cell As Range Dim Rng As Range Dim Wks As Worksheet Set Wks = Worksheets("PRINT PAGE") Set Rng = ThisWorkbook.Names("Brokers").RefersToRange For Each Cell In Rng If Cell <> "" Then Wks.Range("$B$5").Value = Cell.Text Wks.PrintOut End If Next Cell End Sub 

但是,工作簿有多个工作表可供读取,因此我需要vba从多个范围读取,所以我试了这个

 Sub PrintAll() Dim Cell As Range Dim Cell2 As Range Dim Rng As Range Dim Wks As Worksheet Set Wks = Worksheets("PRINT PAGE") If "$A$5" = "Company1" Then Rng = ThisWorkbook.Names("1Brokers").RefersToRange ElseIf "$A$5" = "Company2" Then Rng = ThisWorkbook.Names("2Brokers").RefersToRange Else: Set Rng = ThisWorkbook.Names("3Brokers").RefersToRange End If For Each Cell In Rng If Cell <> "" Then Wks.Range("$B$5").Value = Cell.Text Wks.PrintOut End If Next Cell End Sub 

问题是我一直在If语句上得到“编译错误Else without If”。 我是如何设置If语句或者如何在代码中使用它的吗?

这个块为我编译。 请testing它。 if在那之后我总是开始设置。

 Sub PrintAll() Dim Cell As Range Dim Cell2 As Range Dim Rng As Range Dim Wks As Worksheet 'Set Wks = Worksheets("PRINT PAGE") If "$A$5" = "Company1" Then Rng = ThisWorkbook.Names("1Brokers").RefersToRange ElseIf "$A$5" = "Company2" Then Rng = ThisWorkbook.Names("2Brokers").RefersToRange Else Set Rng = ThisWorkbook.Names("3Brokers").RefersToRange End If For Each Cell In Rng If Cell <> "" Then Wks.Range("$B$5").Value = Cell.Text Wks.PrintOut End If Next Cell End Sub 

使用

 If Range("$A$5").Value = "Company1".. 

同样的“$ 5 $”。

“$ A $ 5”只是一个string,你正在比较一个string和一个string。 你想要的是一个范围对象

编辑

关于你得到的错误,你必须使用Then

语法是(Hiten004发布让我意识到它)

 If <Cond> Then ElseIF <Cond> Then End If 

而不是:

 If "$A$5" = "Company1" Then Rng = ThisWorkbook.Names("1Brokers").RefersToRange 

使用:

 If "$A$5" = "Company1" Then Set Rng = ThisWorkbook.Names("1Brokers").RefersToRange 

您的代码中可能存在其他问题。