我对使用动态查找值感到陌生,我尝试按照如何使用VBA执行带有动态lookup_value的excel vlookup的建议?从另一个工作簿动态获取值。
以下代码会引发#Name?
错误。
请求您的帮助以解决错误。
代码摘录:
Dim ws As Worksheet
Dim dynamic_lookup_value As Range
Dim LocationRef As Range
Set ws = ActiveWorkbook.Worksheets("XYZ")
Set dynamic_lookup_value = ws.Cells(2, 1)
ActiveWorkbook.Names.Add Name:="dynamic_lookup_value", RefersTo:=Worksheets("XYZ").Cells(2, 1)
Set LocationRef = ws.Cells(2, ActiveColumn)
ActiveCell.FormulaR1C1 = _
"=IFERROR(VLOOKUP(" & dynamic_lookup_value.Address(0, 0) & ",'[ABC.xlsx]XYZ'!C1:C26,MATCH(""Location Description"",'[ABC.xlsx]XYZ'!R1C1:R1C26,0),)," & LocationRef.Address(0, 0) & ")"
执行后,公式显示为
=IFERROR(VLOOKUP('A2','[HC report.xlsx]HC Report'!$A:$Z,MATCH("Location Description",'[HC report.xlsx]HC Report'!$A$1:$Z$1,0),),'G2')
请注意查找值' A2'(单个代码)。试图使用以下代码声明dynamic_lookup_value
,但徒劳无功。
ActiveWorkbook.Names.Add Name:="dynamic_lookup_value", RefersTo:=Worksheets("XYZ").Cells(2, 1)
如果我在A2和G2之前和之后手动删除Singe代码,那么公式可以正常工作。
请专家建议解决此问题。
非常感谢, 帕布
答案 0 :(得分:0)
新答案:
能够复制您的错误,我想我有一个解决方案:将您的ActiveCell.FormulaR1C1
替换为ActiveCell.Formula
。这解决了我在问题的简单重新创建(使用立即窗口)
这样可行(根据Cell A1的地址设置对单元格A2中单元格A1的引用:
Cells(2,2).Formula = "="&Cells(1,1).Address(0,0)
虽然这不起作用(在单引号中提出与#A;'相同的问题):Cells(2,2).FormulaR1C1 = "="&Cells(1,1).Address(0,0)
答案 1 :(得分:0)
我认为VBA中的命名范围和范围变量之间可能存在一些混淆。但是,公式中的一个问题是应用程序或RC表示法不一致,因此您需要
ActiveCell.FormulaR1C1 = _
"=IFERROR(VLOOKUP(" & dynamic_lookup_value.Address(0, 0, xlR1C1) & ",XYZ!C1:C26,MATCH(""Location Description"",XYZ!R1C1:R1C26,0),)," & LocationRef.Address(0, 0, xlR1C1) & ")"