0

我是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 语句中不断收到“编译错误 Else without If”。我如何设置 If 语句或如何在代码中使用它有什么问题吗?

4

3 回答 3

2

这个块为我编译。请测试一下。我一直都是在后面开始设置thenif

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
于 2013-10-04T16:16:57.127 回答
1

利用

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

“$A$5”也是如此。

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

编辑

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

语法是(Hiten004 帖子让我意识到)

If <Cond> Then
ElseIF <Cond> Then
End If
于 2013-10-04T16:14:38.160 回答
0

而不是:

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

利用:

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

您的代码中可能还有其他问题。

于 2013-10-04T16:13:49.510 回答