运行时错误';1004';将公式应用于VBA中的Range.FormulaR1C1时
我试图使用下面的代码将一个大的嵌套公式应用到一个范围。基本上,如果活动行的A单元格中的值存在于另一工作簿的A列中,并且活动行的E列中的单元格不是空的,我希望活动单元格显示这些单元格,以便在单独的工作簿中显示等效单元格的值 这需要应用于多个工作表,因此我使用变量运行时错误';1004';将公式应用于VBA中的Range.FormulaR1C1时,vba,excel,Vba,Excel,我试图使用下面的代码将一个大的嵌套公式应用到一个范围。基本上,如果活动行的A单元格中的值存在于另一工作簿的A列中,并且活动行的E列中的单元格不是空的,我希望活动单元格显示这些单元格,以便在单独的工作簿中显示等效单元格的值 这需要应用于多个工作表,因此我使用变量lrow(它是工作簿1中活动工作表最后一行的int)和tlrow(它是等于工作簿2中活动工作表最后一行的int)。当我遍历子变量时,这些变量都返回我期望它们返回的数字 同样,这是for循环的内部,因此我也使用工作表(I).Name其中I是一
lrow
(它是工作簿1中活动工作表最后一行的int
)和tlrow
(它是等于工作簿2中活动工作表最后一行的int
)。当我遍历子变量时,这些变量都返回我期望它们返回的数字
同样,这是for循环的内部,因此我也使用工作表(I).Name
其中I
是一个int
当我运行代码时,我会得到运行时错误“'1004':应用程序定义的错误或对象定义的错误”
我想这是个语法问题
代码:
Range("B15:B" & lrow).FormulaR1C1 = _
"=IF(OR(RC1="""",RC5=""""),"""",IF(ISERROR(VLOOKUP(RC1,'[temp.xlsx]" & _
Worksheets(i).Name & _
"'!A15:D" & tlrow & ",3,FALSE)),""0"",VLOOKUP(RC1,'[temp.xlsx]" & _
Worksheets(i).Name & "'!A15:D" & tlrow & ",3,FALSE))))"
尝试使用以下方法:
Range("B15:B" & lrow).FormulaR1C1 = _
"=IF(OR(RC1="""",RC5=""""),"""",IF(ISERROR(VLOOKUP(RC1," & _
Worksheets(i).Range("A1:D" & lrow).Address(ReferenceStyle:=xlR1C1, External:=True) & _
",3,FALSE)),""0"",VLOOKUP(RC1," & _
Worksheets(i)..Range("A1:D" & tlrow).Address(ReferenceStyle:=xlR1C1, External:=True) & _
",3,FALSE)))"
您正在运行哪个版本的Excel?在最近的版本中,您可以使用此公式中的Iferror函数来真正减小大小 应该是这样的:
Range("B15:B" & lrow).FormulaR1C1 = _
"=IF(OR(RC1="""",RC5=""""),"""",IFERROR(VLOOKUP(RC1," & " & Worksheets(i).Range("A1:D" & _
tlrow).Address(ReferenceStyle:=xlR1C1, External:=True) & ",3,0),""0"")"
谢谢你的帮助。我可以通过在一个范围变量中定义我的vlookup范围,然后在L42的方程中输入变量名来代替
worksheets(i).Range("A1:D" & lrow)
真的很欣赏这些反应!再次感谢。您所给的线路是否产生了错误?您是否尝试过先使用一个简单的公式(例如
“=2+2”
,然后构建它?我认为在构建公式时,您有点混淆了R1C1
和A1
符号。如果您使用R1C1
符号,整个公式应该是一致的。感谢您的响应。此代码没有引发错误,但实际情况是应用了vlookup范围到活动工作表的“A1:D”&T行,而不是应用到工作簿“temp.xlsx”中的等效范围。您知道我将如何解决此问题吗?谢谢!@Inderbitzen Ah我假设您正确引用了正在处理的工作表,在本例中为工作表(I)
。您在发布的答案中所做的是正确的。很好地整理了答案。