dポイントプレゼントキャンペーン実施中!

エクセルでOLEObjectを削除するコードを、
ブレークポイントを設置して実行すると、
デバッグモードでやると「中断モードでは入力できません」となります。
(エクセル2007です)

例えば、

Sub オブジェクト削除()
ActiveSheet.OLEObjects.Delete
Selection.Value = "a"
End Sub

で、「Selection.Value = "a"」の部分にブレークポイントを設置して、
F8で一行ずつ実行していこうとすると画像のようになります。

なぜなのでしょうか?

今サンプルで提示したコードは短いのでいいのですが
実際のコードはもっと長いので、
ステップインでコードの動きを見ていきたいのですが
ActiveSheet.OLEObjects.Delete
の部分で、エラーになってしまいます。

その際、「継続」と「終了」のどちらを選んでもOLEObjectsは削除されます。

「終了」の場合はその次のコードの、
Selection.Value = "a"
は実行されません。

ブレークポイントを設置せず、F5で一気に実行する場合はエラーになりません。

コードの中に、
ActiveSheet.OLEObjects.Delete
があってもステップインで実行しても中断させない方法を教えてください。

「ステップインで実行しても中断させない方法」の質問画像

A 回答 (2件)

OLEObject というのは、Excel外のオブジェクトで、Excelと関係が結ばれているのを、切るのですから、その切れる過程をみることはできません。



あくまでも、これは実務上のことですが、実際に、私もマクロ作成中に、そういうことに出会います。

役に立たない知識かもしれませんが、私の不確かな記憶ですが、OLEObjectの削除の場合、一瞬、マクロの実行が途切れて、その時にオブジェクトが削除されるはずです。だから、その削除前で止めるのは可能でも、事後で止めるというのは、マクロとして成り立たないことになる、というような解釈をしていました。

私は、そういう時、コードの進展をみるために、その部分に以下のようなダミーを置いて、実行後の様子をみます。

例:
Sub オブジェクト削除()
MsgBox "ActiveSheet.OLEObjects.Delete"
Stop 'ブレークポイントの代わり(恒久的)
End Sub

なお、Excelでは、Select したものを、橋渡しして処理する時に、Selection は使われますが、Rangeオブジェクトなど、明示的に使うことが多いので、Excel VBAでは、特殊な裏ワザ的なコードにしか使われません。逆に言うと、Excelでは、"Select" するということは、シートオブジェクト以外では、あまり使いません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2012/10/22 21:06

Selection.Value のSelectionを直前で削除してるから、何もSelectされてない?



Selectionは「代名詞」なので、意図してるオブジェクトをきちんと書いてみるとどうなりますか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2012/10/22 21:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!