Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行时错误';1004';将公式应用于VBA中的Range.FormulaR1C1时_Vba_Excel - Fatal编程技术网

运行时错误';1004';将公式应用于VBA中的Range.FormulaR1C1时

运行时错误';1004';将公式应用于VBA中的Range.FormulaR1C1时,vba,excel,Vba,Excel,我试图使用下面的代码将一个大的嵌套公式应用到一个范围。基本上,如果活动行的A单元格中的值存在于另一工作簿的A列中,并且活动行的E列中的单元格不是空的,我希望活动单元格显示这些单元格,以便在单独的工作簿中显示等效单元格的值 这需要应用于多个工作表,因此我使用变量lrow(它是工作簿1中活动工作表最后一行的int)和tlrow(它是等于工作簿2中活动工作表最后一行的int)。当我遍历子变量时,这些变量都返回我期望它们返回的数字 同样,这是for循环的内部,因此我也使用工作表(I).Name其中I是一

我试图使用下面的代码将一个大的嵌套公式应用到一个范围。基本上,如果活动行的A单元格中的值存在于另一工作簿的A列中,并且活动行的E列中的单元格不是空的,我希望活动单元格显示这些单元格,以便在单独的工作簿中显示等效单元格的值

这需要应用于多个工作表,因此我使用变量
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)
。您在发布的答案中所做的是正确的。很好地整理了答案。