2016-06-24 63 views
0

我得到的錯誤與Dennis做的here相同,但他提供的答案只是說刪除某些模塊或重命名它們。但是,我只有一個模塊,重命名它對我沒有任何幫助。我甚至嘗試製作一個全新的工作簿,並將宏複製到新的開始,但它也沒有做任何事情。 當我在錄製它後運行宏時,它也給我一個「應用程序定義的或對象定義的」錯誤。這個公式本身完全可以在宏的外面工作,但我確實需要它作爲宏的一部分。由於語法錯誤(記錄時)和對象定義的錯誤(運行時),無法運行VBA

這裏是記錄出類拔萃,這是在我的宏是給我的錯誤行:

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之前。此外,如果您查看它與原始公式記錄的內容,可以看到它離開了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,並且有一個可以儘快UTILITES附加,這從來沒有造成我以前的問題,如果這有所幫助。

+0

隨機猜測,但不要使用'activecell'。 – findwindow

+0

我不知道該使用什麼來插入公式。我總是記錄它,它總是使用它。 – Excellerator

+0

不要錄製。或者編輯記錄〜_ ^而不是'activecell',做'工作簿。worksheet.range'。編輯:對象定義的錯誤意味着對象不好。在這種情況下,對象是'activecell',所以你想指定它。 – findwindow

回答

1

公式本身含有錯誤:

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...不應該有一個)

如果刪除它,宏運行沒有失敗。
不過:我建議改變你的公式

=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,並且該字符串被切成多行,然後有時零件丟失。對於這種情況(如果您注意到公式被切割成多行),只需選擇該單元並立即運行即可:?ActiveCell.FormulaR1C1以獲得R1C1中的公式。但不要忘記把所有的"翻倍。

+0

佩斯基小'''...謝謝德克! – Excellerator

+0

歡迎您:) –