long函数拆分为多行以组合VBA宏不起作用

时间:2017-11-10 11:51:31

标签: excel vba excel-vba

我在excel上有一个函数,它搜索工作簿的所有选项卡以获取特定值,并在另一个工作簿上返回日期。现在我试图将该功能与我开发的VBA宏结合起来。因为我正在使用的功能是搜索许多选项卡,所以我不得不将其分解为多行。

解释一下这个函数,我正在使用if检查是否使用iserror()和vlookup()通过工作簿的选项卡查找电子邮件。如果它发现它返回一个日期。如果没有,则运行另一个,如果具有与第一个相同的特征。如果它在第二个选项卡中找到电子邮件,则写入日期,如果没有,则运行另一个,直到搜索完所有选项卡

从搜索中我发现我必须使用“_”才能使命令在下面一行继续,并且“_”不能在字符串中。

我开发了3种不同的代码。

第一次尝试

> ActiveCell.FormulaR1C1 = _
>         "=IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week1 [EmailAddress],1,FALSE))),""6/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week2 [EmailAddress],1,FALSE))),""13/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week3 [EmailAddress],1,FALSE))),""20/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week4  [EmailAddress],1,FALSE))),""27/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week5 [EmailAddress],1,FALSE))),""4/12/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week6 [EmailAddress],1,FALSE))),""11/12/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week7 [EmailAddress],1,FALSE))),""18/12/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week8  [EmailAddress],1,FALSE))),""25/12/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9[EmailAddress],1,FALSE))),""1/1/2018"" ," & _
> "IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9[EmailAddress],1,FALSE))),""1/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week10[EmailAddress],1,FALSE))),""8/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week11 [EmailAddress],1,FALSE))),""15/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week12 [EmailAddress],1,FALSE))),""22/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week13 [EmailAddress],1,FALSE))),""29/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week14 [EmailAddress],1,FALSE))),""5/2/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week15 [EmailAddress],1,FALSE))),""12/2/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week16 [EmailAddress],1,FALSE))),""19/2/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week17 [EmailAddress],1,FALSE))),""26/2/2018"" ," & _
> "IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week18[EmailAddress],1,FALSE))),""5/3/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week19 [EmailAddress],1,FALSE))),""12/3/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week20 [EmailAddress],1,FALSE))),""19/3/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week21 [EmailAddress],1,FALSE))),""26/3/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week22 [EmailAddress],1,FALSE))),""2/4/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week23 [EmailAddress],1,FALSE))),""9/4/2018""  ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week24 [EmailAddress],1,FALSE))),""16/4/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week025 [EmailAddress],1,FALSE))),""23/4/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week26 [EmailAddress],1,FALSE))),""30/4/2018"", ""Something is Wrong""))))))))))))))))))))))))))"

运行时出现运行时错误1004

第二次尝试

ActiveCell.FormulaR1C1 = _
        "=IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week1 [Email Address],1,FALSE))),""6/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week2 [Email Address],1,FALSE))),""13/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week3 [Email Address],1,FALSE))),""20/11/2017"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week4  [Email Address],1,FALSE))),""27/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week5 [Email Address],1,FALSE))),""4/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week6 [Email Address],1,FALSE))),""11/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week7 [Email Address],1,FALSE))),""18/12/2017"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week8  [Email Address],1,FALSE))),""25/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9 [Email Address],1,FALSE))),""1/1/2018"" , & _
        IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9 [Email Address],1,FALSE))),""1/1/2018"",  IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week10[Email Address],1,FALSE))),""8/1/2018""  , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week11[Email Address],1,FALSE))),""15/1/2018""  ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week12 [Email Address],1,FALSE))),""22/1/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week13[Email Address],1,FALSE))),""29/1/2018"",  IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week14[Email Address],1,FALSE))),""5/2/2018"",  IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week15[Email Address],1,FALSE))),""12/2/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week16[Email Address],1,FALSE))),""19/2/2018""  ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week17 [Email Address],1,FALSE))),""26/2/2018"" , & _
        IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week18[Email Address],1,FALSE))),""5/3/2018"",  IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week19[Email Address],1,FALSE))),""12/3/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week20[Email Address],1,FALSE))),""19/3/2018""  ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week21 [Email Address],1,FALSE))),""26/3/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week22[Email Address],1,FALSE))),""2/4/2018"",  IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week23[Email Address],1,FALSE))),""9/4/2018""  , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week24[Email Address],1,FALSE))),""16/4/2018""  ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week025[Email Address],1,FALSE))),""23/4/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week26[Email Address],1,FALSE))),""30/4/2018"", ""Something is Wrong"")))))))))))))))))))))))))))"

它与上面的代码类似,但在每行的结尾和开头没有括号,结果是意外的结束语。

第三次尝试

ActiveCell.FormulaR1C1 = _
    "=IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week1[Email Address],1,FALSE))),""06/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week2[Email Address],1,FALSE))),""13/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week3[Email Address],1,FALSE))),""20/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week4[Email Address],1,FALSE)))," & _
    """27/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week5[Email Address],1,FALSE))),""04/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week6[Email Address],1,FALSE))),""11/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week7[Email Address],1,FALSE))),""18/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week8[Email Address],1,FALSE)))," & _
    """25/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9[Email Address],1,FALSE))),""01/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9[Email Address],1,FALSE))),""08/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week10[Email Address],1,FALSE))),""15/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week11[Email Address],1,FALSE)))," & _
    """22/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week12[Email Address],1,FALSE))),""29/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week13[Email Address],1,FALSE))),""05/02/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week14[Email Address],1,FALSE))),""12/02/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week15[Email Address],1,FALSE)))," & _
    """19/02/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week16[Email Address],1,FALSE))),""16/02/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week17[Email Address],1,FALSE))),""05/03/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week18[Email Address],1,FALSE))),""12/03/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week19[Email Address],1,FALSE)))," & _
    """19/03/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week20[Email Address],1,FALSE))),""26/03/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week21[Email Address],1,FALSE))),""02/04/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week22[Email Address],1,FALSE))),""09/04/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week23[Email Address],1,FALSE))), & _
    """16/04/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week24[Email Address],1,FALSE))),""23/04/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week025[Email Address],1,FALSE))),""30/04/2018"","" ""))))))))))))))))))))))))))"

此代码似乎是三者中最好的,但错误消息是“编译器错误:语法错误”

我知道功能正常,因为我在单个单元格上尝试过。在第三次尝试时,我试图将其自动记录为宏。

我错过了什么或做错了什么?

1 个答案:

答案 0 :(得分:0)

我建议为了使公式更简单,您可以设置一个名为“INDEX”的单独工作表,该工作表使用此公式=IFERROR(INDIRECT("Week" & COLUMN()&"!B"&ROW()),"")引用所有不同周的电子邮件地址列(其中B列)包含电子邮件地址)。因此,第1周的所有电子邮件地址都在第1列,第2列中的第2周,等等。将此区域设为命名范围,例如EmailsTable。使用此UDF:

    Public Function WeekNumber(sEmail As String) As Variant
    '// Finds the column number (i.e. week number) of the first
    '// occurrence of the given email address in the EmailsTable
    '// If not found returns zero
        Dim oFound As Range


        Set oFound = [EmailsTable].Find(sEmail, , xlValues, xlWhole, xlByColumns, xlNext)

        If oFound Is Nothing Then
            WeekNumber = 0

        Else

            WeekNumber = oFound.Column

        End If

    End Function

此UDF将返回第一次出现给定电子邮件的周数。在INDEX表的单独部分中,设置与每个表相对应的26个日期的列表,并将该名称命名为“DateList”。然后你可以使用这样的公式在DateList中找到日期,例如对于单元格B24中的电子邮件地址:

=IFERROR(INDEX(DateList,WeekNumber(B24)), "Not found")

或者您可以使用VLOOKUP而不是INDEX并包含第0周的条目。