Vba IsNA无法识别已关闭工作簿引用中的N/A

Vba IsNA无法识别已关闭工作簿引用中的N/A,vba,excel,Vba,Excel,我试图测试关闭的外部工作簿中的单元格是否为N/a。在下面的代码中,被引用工作簿中的单元格G5肯定为N/a,但当使用下面的IsNA函数引用它时,返回Good to go!当它打算归还干草时!在消息框中 Sub TestTest() 'Declaring variables [BD] Dim sFilePath As String Dim sFileName As String Dim sSourceSheet As String Dim sSourceCe

我试图测试关闭的外部工作簿中的单元格是否为N/a。在下面的代码中,被引用工作簿中的单元格G5肯定为N/a,但当使用下面的IsNA函数引用它时,返回Good to go!当它打算归还干草时!在消息框中

Sub TestTest()

    'Declaring variables [BD]
    Dim sFilePath As String
    Dim sFileName As String
    Dim sSourceSheet As String
    Dim sSourceCell As String

    sFileName = "0306-0312 Margin Master.xlsx"
    sFilePath = "\\store\GroupDrives\Pricing\_Deli_\Deli Fresh Shift\Margin Master\"
    sSourceSheet = "Bakery"
    sSourceCell = "G5"

    If Application.WorksheetFunction.IsNA("'" & sFilePath & "[" & sFileName & "]" & sSourceSheet & "'!" & _
    Range("A1").Range(sSourceCell).Address(, , xlR1C1)) Then
        MsgBox "Hay!"
    Else
        MsgBox "Good to go!"
    End If

End Sub

另一种方法是使用规则公式进行评估,即

Sub TestTest()

'Declaring variables [BD]
Dim sFilePath As String, sFileName As String, sSourceSheet As String, sSourceCell As String

sFileName = "0306-0312 Margin Master.xlsx"
sFilePath = "\\store\GroupDrives\Pricing\_Deli_\Deli Fresh Shift\Margin Master\"
sSourceSheet = "Bakery"
sSourceCell = "R5C7"

If Application.WorksheetFunction.IsError(Evaluate("=('" & sFilePath & "[" & sFileName & "]" & sSourceSheet & "'!" & sSourceCell & ")")) Then
    MsgBox "Hay!"
Else
    MsgBox "Good to go!"
End If

End Sub
如果单元格确实是N/A错误,那么它应该适用于您。如果只是一个N/a的字符串,您可以调整If语句来检查并计算单元格值

注意:我认为单元格引用需要是R1C1样式

尝试使用ExecuteExcel4Macro:


注意:RangeA1.RangeSourceCell.Address,xlR1C1可能缩写为RangeSourceCell.Address,xlR1C1,如果您只是使用单元格引用(如G5)作为sSourceCell的值。

如果sSourceCell是G5,为什么要使用R1C1样式?尝试只使用…地址,并将sSourceCell更改为$G$5。它仍然不能正常工作吗?嗨,BruceWayne,谢谢你的评论。我完全按照你所说的做了,现在仍然很好!你用的是PC还是Mac?文件路径是否正确给出?但是,不适用作为文本值是一个非常糟糕的主意。。不,单独使用的范围并不明确,尤其是在打开和关闭工作簿以及.select和.Activates的代码中。始终使用显式工作表对象限定范围调用。请稍候。。Application.WorksheetFunction.IsError与IsError相同吗?谢谢你的回答,布鲁斯。你测试过这个吗?它正在返回干草!在这里没有为我设置N/A的单元格上。@user4333011您没有接受吗-@用户4333011不要担心想象中的互联网点,我已经足够了;-。。。。你可以随时查看我的项目,并在GitHub上给它一颗星=你在GitHub项目上得到了第365颗星,Matt-再次感谢!太好了,哟!很好,很有效。我将对它进行一点评估。我以前使用的函数是ExecuteExcel4Macro,但我大部分时间都不熟悉它,但是哇,你搞定了。非常感谢。什么是ExecuteExcel4Macro?那是内置的吗?我得研究一下。。。不管怎样,pfft,这太容易了。你需要通过一些评估使它复杂化;我仍然不清楚RangeA1.RangeG5的用途,为什么不能是RangeG5,空的可选参数要求跳过并使用命名参数。反正是向上投票。@Mat'smugg我怀疑RangeA1.RangeG5是不必要的-它当然不应该出现在这样一个简单的场景中-但可能有一个命名范围的情况下,它可能是必要的,例如,需要RangeA1.RangemyRangeName-而且代码似乎源于试图覆盖所有可能发生的情况的代码。@Mat'sMug-如果myRangeName设置为Sheet1!A4,然后RangeA1.RangemyRangeName.Address给出$A$4,而选中单元格C4的ActiveCell.RangemyRangeName.Address给出$C$7。但是RangemyRangeName.Address给了$A$4,所以这仍然不能解释为什么需要它。我所说的需要,并不是指在目前的情况下需要(在这个问题上不需要),只是在我还没有想到的任何深奥的情况下需要。
Sub TestTest()

    'Declaring variables [BD]
    Dim sFilePath As String
    Dim sFileName As String
    Dim sSourceSheet As String
    Dim sSourceCell As String
    dim externalValue As Variant

    sFileName = "0306-0312 Margin Master.xlsx"
    sFilePath = "\\store\GroupDrives\Pricing\_Deli_\Deli Fresh Shift\Margin Master\"
    sSourceSheet = "Bakery"
    sSourceCell = "G5"

    externalValue = ExecuteExcel4Macro("'" & sFilePath & "[" & sFileName & "]" & sSourceSheet & "'!" & _
        Range("A1").Range(sSourceCell).Address(, , xlR1C1)) 
    If Application.IsNa(externalValue) Then
        MsgBox "Hay!"
    ElseIf IsError(externalValue) Then
        MsgBox "May not work"
    Else
        MsgBox "Good to go! (value is '" & externalValue & "')"
    End If

End Sub