当HLOOKUP引用另一个工作簿时,VBA FormulaR1C1会添加括号

时间:2015-09-30 19:59:48

标签: excel-vba vba excel

我使用以下代码查找变量工作簿并检索该数据。它将公式输入到单元格范围内,从另一个工作簿中获取数据。我的问题是,如果我在公式中使用R1C1样式来指示我要搜索的其他工作簿中的范围,VBA输入公式就好像它是A1样式。然后公式将不会返回正确的信息。

但是如果我将这部分代码留在A1风格中,当VBA进入单元格并且公式失败时,VBA会在范围中添加括号。

以下是代码行:

Range("R8:R" & FinalRow).FormulaR1C1 = "=IFERROR(HLOOKUP(IF(RIGHT(RC[-13],2)=""B4"",INDEX('[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]" & myUA _
                & "'!D:E,MATCH(RC4,'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]" & myUA & "'!E:E,0),1)," _
                & "INDEX(INDIRECT(""'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]""&RC5&""'!D:E"",TRUE)," _
                & "MATCH(RC4,INDIRECT(""'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]""&RC5&""'!E:E"",TRUE),0),1))" _
                & ",'[" & MyNM & " " & MyCC & " " & MyUnit & " EVMS.xlsm]SOP'!R1C3:R4C41,4,FALSE),""NP"")"

结果如下:

  

= IFERROR(HLOOKUP(IF(右(E13,2)=" B4",INDEX(' [5P1B 4520 5015 EVMS.xlsm] UA1B'!D:(E) ,MATCH($ D13,' [5P1B 4520 5015   EVMS.xlsm] UA1B'!E:(E),0),1),INDEX(间接("' [5P1B 4520 5015]   EVMS.xlsm]"& $ E13&"'!D:E",TRUE),MATCH($ D13,INDIRECT("' [5P1B 4520] 5015   EVMS.xlsm]"& $ E13&"'!E:E",TRUE),0),1)),' [5P1B 4520 5015   EVMS.xlsm] SOP' $ C $ 1:!$ AO 4,4 $,FALSE)," NP&#34)

1 个答案:

答案 0 :(得分:0)

我看到你在这个公式中使用了间接,这只有在引用的工作簿打开时才有效。如果它是开放的,那么你可以使你的整个公式间接,并摆脱所有麻烦的方式。您可以通过在公式中引用Address(Row() - x,Column() - y)来执行此操作,使它们像R1C1样式公式一样工作,并且它们根据自己的位置引用不同的行/列,即使公式是每个细胞都相同。以这种方式工作的简单公式的一个例子是:
= INDIRECT(“'[My Workbook.xlsx] Sheet1'!”& ADDRESS(ROW() - 3,COLUMN() - 1))

我相信这会做你需要的:

class Recipe < ActiveRecord::Base
  has_many(:ingredients)
  has_many(:instructions)
  has_many(:images)
  belongs_to(:category)
end