我正在尝试对封闭的工作簿命名区域进行条件计数“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
这样它就会返回你的范围。我已经测试过了。
干杯。