由于语法错误(logging时)和对象定义的错误(运行时),无法运行VBA

我得到了和丹尼斯一样的错误,但是他提供的答案只是说删除一些模块或者重命名它们。 但是,我只有一个模块,重命名它对我没有任何帮助。 我甚至试图制作一个全新的工作手册,并将其复制到一个新的开始,但它也没有做任何事情。 当我在录制macros之后运行macros时,它也给我一个“应用程序定义的或对象定义的”错误。 这个公式本身在macros之外是完全正确的,但是我确实需要它作为macros的一部分。

这里是Excellogging的,这是我的macros给我的错误:

ActiveCell.FormulaR1C1 = _ "=IF(COUNTA(RC[-15]:RC[-2])=2,RC[-14],IF(COUNTA(RC[-15]:RC[-2])=4,CONCATENATE(RC[-14],"":"",RC[-12]),IF(COUNTA(RC[-15]:RC[-2])=6,CONCATENATE(RC[-14],"":"",RC[-12],"" - "",RC[-10]),IF(COUNTA(RC[-15]:RC[-2])=8,CONCATENATE(RC[-14],"":"",RC[-12],"":"",RC[-10],"" - "",RC[-8]),IF(COUNTA(RC[-15]:RC[-2])=10,CONCATENATE(RC[-14],"":"",RC[-12],"":"",RC[-10],"":"",RC[-8],"" - """ & _ ","""")))))" 

它有一个Range("Q3").Select之前,激活该单元格。 而且,如果你看看它logging的是什么,而不是原来的公式,你可以看到它离开了K3)或者RC[-6]), 。 我试图添加它,但它并没有帮助。

原始配方:

 =IF(COUNTA(B3:O3)=2,C3,IF(COUNTA(B3:O3)=4,CONCATENATE(C3,":",E3),IF(COUNTA(B3:O3)=6,CONCATENATE(C3,":",E3," - ",G3),IF(COUNTA(B3:O3)=8,CONCATENATE(C3,":",E3,":",G3," - ",I3),IF(COUNTA(B3:O3)=10,CONCATENATE(C3,":",E3,":",G3,":",I3," - ",K3),""))))) 

我也尝试了没有concatenate的公式,但它也没有帮助。 如下:

 ActiveCell.FormulaR1C1 = _ "=IF(COUNTA(RC[-15]:RC[-2])=2,RC[-14],IF(COUNTA(RC[-15]:RC[-2])=4,RC[-14]&"":""&RC[-12],IF(COUNTA(RC[-15]:RC[-2])=6,RC[-14]&"":""&RC[-12]&"" - ""&RC[-10],IF(COUNTA(RC[-15]:RC[-2])=8,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"" - ""&RC[-8]),IF(COUNTA(RC[-15]:RC[-2])=10,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"":""&RC[-8]&"" - ""&RC[-6],"""")))))" 

编辑:这里是直​​接在上面的代码,和P3公式工作正常:

  Range("P3").Select ActiveCell.FormulaR1C1 = _ "=INDEX(RC[-14]:RC[-1],1,IF(COUNT(RC[-14]:RC[-1])=1,COUNT(RC[-14]:RC[-1]),COUNT(RC[-14]:RC[-1])*2-1))" Range("P3").Select Range("P3").AutoFill Destination:=Range("P3:P" & LastRow) Range("Q3").Select ActiveCell.FormulaR1C1 = _ "=IF(COUNTA(RC[-15]:RC[-2])=2,RC[-14],IF(COUNTA(RC[-15]:RC[-2])=4,RC[-14]&"":""&RC[-12],IF(COUNTA(RC[-15]:RC[-2])=6,RC[-14]&"":""&RC[-12]&"" - ""&RC[-10],IF(COUNTA(RC[-15]:RC[-2])=8,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"" - ""&RC[-8]),IF(COUNTA(RC[-15]:RC[-2])=10,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"":""&RC[-8]&"" - ""&RC[-6],"""")))))" Range("Q3").Select Range("Q3").AutoFill Destination:=Range("Q3:Q" & LastRow) 

我使用的是Microsoft Office 2013,而且还有一个ASAP Utilites插件,如果有帮助的话,它以前从来没有给我造成任何问题。

该公式本身包含一个错误:

 ActiveCell.FormulaR1C1 = "=IF(COUNTA(RC[-15]:RC[-2])=2,RC[-14],IF(COUNTA(RC[-15]:RC[-2])=4,RC[-14]&"":""&RC[-12],IF(COUNTA(RC[-15]:RC[-2])=6,RC[-14]&"":""&RC[-12]&"" - ""&RC[-10],IF(COUNTA(RC[-15]:RC[-2])=8,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"" - ""&RC[-8]),IF(COUNTA(RC[-15]:RC[-2])=10,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"":""&RC[-8]&"" - ""&RC[-6],"""")))))" 

应该

 ActiveCell.FormulaR1C1 = "=IF(COUNTA(RC[-15]:RC[-2])=2,RC[-14],IF(COUNTA(RC[-15]:RC[-2])=4,RC[-14]&"":""&RC[-12],IF(COUNTA(RC[-15]:RC[-2])=6,RC[-14]&"":""&RC[-12]&"" - ""&RC[-10],IF(COUNTA(RC[-15]:RC[-2])=8,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"" - ""&RC[-8],IF(COUNTA(RC[-15]:RC[-2])=10,RC[-14]&"":""&RC[-12]&"":""&RC[-10]&"":""&RC[-8]&"" - ""&RC[-6],"""")))))" 

...RC[-8]),IF...不应该有)

如果删除它,macros运行没有失败。
仍然:我build议改变你的公式

 =IF(COUNTA(B3:O3)=2,C3,IF(COUNTA(B3:O3)=4,CONCATENATE(C3,":",E3),IF(COUNTA(B3:O3)=6,CONCATENATE(C3,":",E3," - ",G3),IF(COUNTA(B3:O3)=8,CONCATENATE(C3,":",E3,":",G3," - ",I3),IF(COUNTA(B3:O3)=10,CONCATENATE(C3,":",E3,":",G3,":",I3," - ",K3),""))))) 

 =IFERROR(CHOOSE(COUNTA(B3:O3)/2,C3,C3&":"&E3,C3&":"&E3&" - "&G3,C3&":"&E3&":"&G3&" - "&I3,C3&":"&E3&":"&G3&":"&I3&" - "&K3),"") 

这是较短的;)

对于“错误”录制的部分:如果excel将你的公式“翻译”到R1C1,并将该string切割成多行,则有时零件会丢失。 对于这种情况(如果您注意到公式被切割成多行),只需select该单元并立即在窗口中运行: ?ActiveCell.FormulaR1C1以获得R1C1中的公式。 但不要忘记把所有的东西都翻倍"