尝试运行适用于表的宏时出现1004错误

时间:2017-01-03 15:58:22

标签: excel vba excel-vba

我有一张现有的桌子。我想在它旁边添加一个新列,并在其中添加一个公式,以便公式添加一个新列并填充所有值。

这是一个两页的工作表。 Table1位于我们正在使用的表之外的另一页上,但具有从中抽取的主数据。

我录制了一个我用来制作它的公式的宏,但是当我尝试运行它时,我得到了

  

运行时错误'1004':应用程序定义的错误或对象定义的错误。

我正在使用的代码如下:

Range("B2").Select
ActiveCell.FormulaR1C1 = "=IF(INDEX(Table1,MATCH([@Listing],Table1[Property],0)," & _
    "MATCH(""Status"",Table1[#Headers],0))=""for sale"",""seller""," & _
    "IF(INDEX(Table1,MATCH([@Listing],Table1[Property],0)," & _ 
    "MATCH(""Status"",Table1[#Headers],0))=""for lease"",""landlord""," & _
    "IF(INDEX(Table1,MATCH([@Listing],Table1[Property],0)," & _
    "MATCH(""Status"",Table1[#Headers],0))=""for sale or lease"",""seller / landlord""" & _
    "X(Table1,MATCH([@Listing],Table1[Property],0)," & _
    "MATCH(""Base Rent/Mo"",Table1[#Headers],0))>0,""landlord"",""seller""))))"
Range("B1").Select

到目前为止我检查过的事情:

  • 所有名称都匹配(即Table1是有效名称,所有标题都已正确命名)
  • 如果我只是输入并点击'enter'
  • ,该公式就像我想要的那样
  • 我在这里寻找类似的问题,最相似的似乎是数据透视表的一些问题,但解决方案似乎不适用于我的问题

(我之所以使用VBA,是因为这是多步骤过程的一部分,我正在尝试自动化,以便从大量数据集中运行复杂报表变得更加简单。)< / p>

编辑:我尝试了其他修补程序:

  • 将主数据表移动到与我的“目标”表相同的工作表,看看如果两者位于同一工作表上,它是否可行。不行。

2 个答案:

答案 0 :(得分:1)

如果您需要在"MATCH(""Status"",中的引号内使用引号,我认为您尝试输出Match("Status",请尝试使用"MATCH("&Chr(34)&Status&Chr(34)

Chr(34)输出"符号。否则它将返回MATCH(Status(不带引号)

答案 1 :(得分:0)

有两个不同的问题。

首先,我正在录制宏,显然,Excel不会正确记录超过一定长度的公式。此限制大于407(我自动捕获的最长公式),但短于467个字符。讨论了类似的问题on this Mr. Excel post。这也是为什么&#34; INDEX&#34;正如BruceWayne指出的那样,他失踪了。

此外,有必要从.FormulaR1C1切换到.Formula以使其正常工作,正如R3uK所建议的那样。

最终代码最终如下:

Range("B2").Select
ActiveCell.Formula = _
        "=IF(INDEX(Table1,MATCH($A2,Table1[Property],0),MATCH(""Status"",Table1[#Headers],0))=""for sale"",""seller"",IF(INDEX(Table1,MATCH($A2,Table1[Property],0),MATCH(""Status"",Table1[#Headers],0))=""for lease"",""landlord"",IF(INDEX(Table1,MATCH($A2,Table1[Property],0),MATCH(""Status"",Table1[#Headers],0))=""for sale or lease"",""seller / landlord"",IF(INDEX(Table1,MATCH($A2,Table1[Property],0),MATCH(""Base Rent/Mo"",Table1[#Headers],0))>0,""landlord"",""seller""))))"
Range("B3").Select