使用Range函数时,VBA对象需要出错

时间:2016-09-28 18:33:30

标签: excel vba debugging

我有一段VBA代码,它从另一个excel中查找值以创建一个True / False标志,并根据该标志,我设置了两个不同的char值。我得到了对象要求'以下代码中的错误。有人可以解释一下原因吗?

Sub test()

  Dim part1 As String
  Dim part2 As String
  Dim a As Range

  part1 = "=ifna(INDEX('DRG and Zip Summaries'!$A$10:$A$58,MATCH('DRG Summary Target'!F2 ""x_x_x"""
  part2 = ",'DRG and Zip Summaries'!$C$10:$C$58,0)),'FALSE')"

With Range("A2:A183").FormulaArray = part1
                                  .Replace """x_x_x""", part2
End With

For Each a In Range("A2:A183")
 If a.Value = "FALSE" Then
        Range("B" & a.rownum) = Chr(168)
 Else:  Range("B" & a.rownum) = Chr(254)
 End If
Next

 End Sub

1 个答案:

答案 0 :(得分:1)

不要将公式放在WITH声明中。 WITH声明只是用于标识要使用的对象,而不是进行任何更改,例如在其中放置值。使用:

With Range("A2:A183")
    .FormulaArray = part1
...

我不确定你为什么要使用" part1"和"第2部分"结构要么。如果只是因为公式太长,你可以使用下划线字符来断行,因此:

formula=""=ifna(INDEX('DRG and Zip Summaries'!$A$10:$A$58," & _
    "MATCH('DRG Summary Target'!F2",'DRG and Zip Summaries'!" & _
    "$C$10:$C$58,0)),'FALSE')"

下划线将确保这三条线都作为一条线处理。