2013-10-04 30 views
0

我是vba的新手,所以请原谅我的无知。我创建了一个将通过一个下拉列表中运行,并打印在下拉列表中每个名字的宏 - 和它的作品:Complie错误 - 否则没有如果VBA

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语句的。我是如何设置If语句或者如何在代码中使用它的?

回答

2

该块为我编译。请测试它。我始终在then之后开始设置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 
+0

+ 1为了赶上'如果然后'我正在忙着解释别的东西(这也是很重要的) –

+1

将'Set'关键字添加到所有'Rng'赋值语句中:) –

+0

谢谢你 - 我在然后添加开始集。 – user2162384

0

不是:

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

使用:

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

有可能是在你的代码的其他问题。

+0

我在添加了Set之后然后才准备好了 - 也许我已经开始了解这一切。感谢您的答复。 – user2162384

1

使用

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

同样为 “$ A $ 5”。

“$ A $ 5”只是一个字符串,您将字符串与字符串进行比较。你想要的是一个范围对象

编辑

关于你得到,你必须使用Then

的语法(Hiten004后让我意识到这一点)

If <Cond> Then 
ElseIF <Cond> Then 
End If 
错误
+0

这里也很有帮助。它现在完美。谢谢。 – user2162384