VBA - 如何引用已关闭的工作簿命名范围

VBA - 如何引用已关闭的工作簿命名范围

我正在尝试对封闭的工作簿命名区域进行条件计数“COUNTIF”。如下例所示,如果“fruit_names”为“apples”,则计算“fruit_count”的数量:

=SUMIF('C:\folder\test.xlsm'!fruit_names;"apples";'C:\folder\test.xlsm'!fruit_count)

我找到了 getvalue() 公式,但它看起来对命名范围不起作用:

Private Function GetValue(path, file, sheet, ref)
'   Retrieves a value from a closed workbook
    Dim arg As String
'   Make sure the file exists
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File Not Found"
        Exit Function
    End If
'   Create the argument
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
      Range(ref).Range("A1").Address(, , xlR1C1)
'   Execute an XLM macro
    GetValue = ExecuteExcel4Macro(arg)
End Function  

完美的方法是创建一个允许在 Excel 功能区公式栏上执行的函数,但“ExecuteExcel4Macro”不允许这样做,或者将 getvalue 函数与命名范围结合起来的方法......

我看到了很多关于这个主题的问题和疑问,但没有很多带有命名范围的答案。

提前致谢,av9

答案1

这是因为您在引用命名范围时没有引用工作表,范围的名称应该足够了。要做到这一点,您的arg变量应该看起来像'C:\folder\thisworkbook.xlsx'!this_range'C:\folder\[Someotherfile.xlsx]'!that_range命名范围才能起作用。

现在您输入了ExecuteExcel4Macro()错误的字符串,这就是该功能中断的原因。

GetValue(path, file, sheet, ref)

应该是这个

GetValue(path, file, named_range)

和这个

arg = "'" & path & "[" & file & "]" & sheet & "'!" & Range(ref).Range("A1").Address(, , xlR1C1)

对此

arg = "'" & path & "[" & file & "]" & "'!" & named_range
'or
arg = "'" & path & "\" & file & "'!" & named_range

这样它就会返回你的范围。我已经测试过了。

干杯。

相关内容