【问题标题】:After writing MACRO code - The formula give compile time syntax error. Without Macro works fine编写宏代码后 - 公式给出编译时语法错误。没有宏工作正常
【发布时间】:2019-10-08 06:35:32
【问题描述】:

我有一个公式

- 
=IF(K2="Missed KPI",IF(J2<>"null","Entry done after approx. "&ROUNDDOWN(NETWORKDAYS(F2,J2)-1-MOD(F2,1)+MOD(J2,1),0)&" work days"),IF(K2="Milestone Pending-Missed",IF(F2<>"null","Entry
-after"&ROUNDDOWN(NETWORKDAYS(F2,NOW())-1-MOD(F2,1)+MOD(NOW(),1),0)&" work days ago"," "),IF(K2="NA","Entry yet to be done-Order Not Raised- "&H2," ")))

这里: K2 , J2, F2, H2 是单元格名称

当我使用这个公式而不编写宏时,它可以正常工作。我有许多其他类似的公式都可以在没有 MACRO 的情况下正常工作。 当我记录一个宏(不是在 VBA 中编码)时,当我尝试运行宏时,它会给我一个编译时间 - 语法错误。

下一行是 VBA 代码(在录制 MACRO 期间创建),用于上述公式。

Selection.FormulaR1C1 = _
    "=IF(RC[-2]=""Missed KPI"",IF(RC[-3]<>""null"",""Entry done after approx. ""&ROUNDDOWN(NETWORKDAYS(RC[-7],RC[-3])-1-MOD(RC[-7],1)+MOD(RC[-3],1),0)&"" work days""),IF(RC[-2]=""Milestone Pending-KPI Missed"",IF(RC[-7]<>""null"",""Entry - after ""&ROUNDDOWN(NETWORKDAYS(RC[-7],NOW())-1-MOD(RC[-7],1)+MOD(NOW(),1),0)&"" work days ago"","" ""),IF("& _
    ""NA"",""CCD yet to be done-Order Not Raised- ""&RC[-5],"" "")))

"

正如您所见,VBA 添加了一些额外的双引号,并且在录制 MACRO 后,代码中的一些文本也丢失了。

请帮助我解决问题,因为我被困在这里并且不知道为什么我的公式不起作用。

对于一个小的单行公式,它工作正常,但是一旦公式移动到 VBA 中的另一行(在录制 MACRO 之后)就会出现问题。

对于这个公式 -

=IF(K2="Approaching Deadline",(24-(NETWORKDAYS(F2,NOW())-1-MOD(F2,1)+MOD(NOW(),1))*24)/24," ")

录制的VBA版本(VBA代码单行)

Selection.FormulaR1C1 = _
         "=IF(RC[-1]=""Approaching Deadline"",(24-(NETWORKDAYS(RC[-6],NOW())-1-MOD(RC[-6],1)+MOD(NOW(),1))*24)/24,"" "")"

一切正常。

我尝试使用引号和多行换行符。还是不行。

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    由于某种原因,记录的代码缺少单元格引用。还缺少一些引号和空格(例如,&amp; 运算符需要在其前后都有一个空格才能工作)。试试这个更正的代码:

    Selection.FormulaR1C1 = _
    "=IF(RC[-2]=""Missed KPI"",IF(RC[-3]<>""null"",""Entry done after approx. ""&ROUNDDOWN(NETWORKDAYS(RC[-7],RC[-3])-1-MOD(RC[-7],1)+MOD(RC[-3],1),0)&"" work days""),IF(RC[-2]=""Milestone Pending-KPI Missed"",IF(RC[-7]<>""null"",""Entry - after ""&ROUNDDOWN(NETWORKDAYS(RC[-7],NOW())-1-MOD(RC[-7],1)+MOD(NOW(),1),0)&"" work days ago"","" ""),IF(" & _
    "RC[-2]=""NA"",""CCD yet to be done-Order Not Raised- ""&RC[-5],"" "")))"
    

    请注意,如果您的 Selection 介于列 AG 之间,此公式将导致不需要的结果。它只能从H 列开始正确使用。

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 2011-08-21
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      相关资源
      最近更新 更多