2016-06-24 13 views
0

Dennisさんと同じエラーが発生しましたhereしかし、彼が提供した答えは単純にいくつかのモジュールを削除したり、しかし、私は1つのモジュールしか持っていません。私はまったく新しいワークブックを作成し、それを新鮮なスタートのためにコピーすることを試みましたが、それも何もしませんでした。 マクロを記録した後に実行すると、「アプリケーション定義またはオブジェクト定義」エラーが発生します。数式は、マクロの外部で完全に正常に動作しますが、マクロの一部として必要になります。ここで構文エラー(記録時)とオブジェクト定義エラー(実行時)のために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

ランダムな推測ですが、「アクティブセル」は使用しません。 – findwindow

+0

私は式を挿入するために他に何を使うべきか分かりません。私はいつもそれを記録しており、常にそれを使用しています。 – Excellerator

+0

記録しないでください。または、録音を編集する〜_ ^「アクティブセル」の代わりに、「ブック」を実行します。ワークシート。レンジ。編集:オブジェクト定義エラーはオブジェクトが不良であることを意味します。この場合、オブジェクトは '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],"""")))))" 

)があってはならない...RC[-8]),IF...

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],"""")))))" 

する必要があります!

削除すると、マクロは必ず実行されます。それでも
:私は

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

に数式を変更

=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),""))))) 

を示唆して、 "偽" 記録の一部について

):Excelはにあなたの式を "翻訳" した場合R1C1、および文字列が複数の行に切断されると、時々部分が欠落します。その場合(数式が複数の行に分かれている場合は)、セルを選択して直接ウィンドウ(?ActiveCell.FormulaR1C1)で実行し、R1C1の式を取得します。しかし、すべてをダブルアップすることを忘れないでください"

+0

厄介な小さな ')' ...ありがとうダーク! – Excellerator

+0

あなたは歓迎です:) –

関連する問題