ステップインで実行しても中断させない方法を教えてください

このQ&Aのポイント
  • エクセルでOLEObjectを削除するコードを実行する際に、デバッグモードで実行すると中断モードになります。この問題を回避する方法について教えてください。
  • 実際のコードは長く、ステップインでコードの動きを見たいのですが、OLEObjects.Deleteの部分でエラーが発生してしまいます。エラーを回避してステップインで実行する方法を教えてください。
  • デバッグモードでOLEObjectを削除するコードを実行する際に、ステップインで実行すると中断モードになってしまいます。この問題を解決する方法について教えてください。
回答を見る
  • ベストアンサー

ステップインで実行しても中断させない方法を教えてく

エクセルで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 があってもステップインで実行しても中断させない方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

OLEObject というのは、Excel外のオブジェクトで、Excelと関係が結ばれているのを、切るのですから、その切れる過程をみることはできません。 あくまでも、これは実務上のことですが、実際に、私もマクロ作成中に、そういうことに出会います。 役に立たない知識かもしれませんが、私の不確かな記憶ですが、OLEObjectの削除の場合、一瞬、マクロの実行が途切れて、その時にオブジェクトが削除されるはずです。だから、その削除前で止めるのは可能でも、事後で止めるというのは、マクロとして成り立たないことになる、というような解釈をしていました。 私は、そういう時、コードの進展をみるために、その部分に以下のようなダミーを置いて、実行後の様子をみます。 例: Sub オブジェクト削除() MsgBox "ActiveSheet.OLEObjects.Delete" Stop 'ブレークポイントの代わり(恒久的) End Sub なお、Excelでは、Select したものを、橋渡しして処理する時に、Selection は使われますが、Rangeオブジェクトなど、明示的に使うことが多いので、Excel VBAでは、特殊な裏ワザ的なコードにしか使われません。逆に言うと、Excelでは、"Select" するということは、シートオブジェクト以外では、あまり使いません。

YLZGTQQOER
質問者

お礼

ありがとうございます。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Selection.Value のSelectionを直前で削除してるから、何もSelectされてない? Selectionは「代名詞」なので、意図してるオブジェクトをきちんと書いてみるとどうなりますか?

YLZGTQQOER
質問者

お礼

ありがとうございます。

関連するQ&A

  • OLEObjects ステップイン 削除できない

    シート上のOLEObjectsを削除するべく、 ActiveSheet.OLEObjects.Delete と言うコードをステップインで実行しようとすると、 「中断モードでは入力できません」 となりますが、OLEObjectsは削除されます。 結局は削除されるからいいのですが、 ステップインで実行していきたい時は、どうすればいいのでしょうか? そもそもなぜデバッグモードで、OLEObjectsの削除ができないのでしょうか? エクセル側に何か不都合があるのですか?

  • F8のステップインで実行するとエラーになるマクロ(オブジェクトの挿入)

    こんばんは。 また質問させてください。 エクセル2003です。 Sub 挿入_ラベル() ActiveSheet.OLEObjects.Add(ClassType:="Forms.Label.1").Select End Sub このコードをF8のステップインをしながら実行すると 「中断モードでは入力できません。」となります。 普通にF5の実行なら問題なくできます。 なぜF8だとエラーになるのでしょうか? オブジェクト関係だからですか?

  • Excel VBA ステップインが途中で通常実行になってしまう

    VBEでF8キーを一回ずつ押して一行ずつステップインでコードを実行していくと、 Workbooks.openの行を実行した途端、 それ以下のすべての行が通常実行されてしまいます。 すべての行をステップインで実行するにはどうすればよいのでしょうか。 例)Workbooks.Openの行でF8を一回押すと、すべて通常実行されてしまう。   (2行目以下も一行ずつ動作を確認したい) ---- Sub test() Workbooks.Open ("C:\test.xls") Range("A1").Value = 1 Range("A2").Value = 2 Range("A3").Value = 3 End Sub ---- よろしくお願いいたします。

  • vbsでデバッグしながらコードを実行するには?

    vbaならブレークポイントを設置したり F8でステップインしながらコードを実行できますが vbsでそういうことはできないのでしょうか? 一度vbaでデバッグしながら実行してOKなら vbsファイルに張り付ける方法しかないですか?

  • デバッグできるツールやソフト

    vbsでプログラムを作ってるのですが ステップインできたり ブレークポイント設置して実行したり 中断してイミディエイトウィンドで値を確認できるツールやソフトウェアはありますか? 現在はメモ帳で作っています。

  • 必ず同じ場所でコードが中断 vba

    ブレークポイントやstopなどは設置してないのに、 必ず同じ場所でコードが中断されます。 エラーになるわけではなくて、 ブレークポイントやstopを設置してるのと同じ状況です。 エクセルVBAのファイルですが、 元々は アクセスVBAからエクセルVBAを起動しています。 なぜブレークポイントやstopがないのにいつも同じ場所で止まるのでしょうか? 止まる場所のコードは単純なifステートメントで If 単価 > 0 Then のようなコードです。

  • エクセルVBEにおける中断モードとその後の処理

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 VBEから下記のコードを使ってBook1に 日曜から土曜までの曜日入力をオートフィル を使って自動入力ができるようにしたいと思っています。 Sub 曜日入力() Range("A1") = "日" Range("B1") = "月" Range("A1:B1").Select Selection.AutoFill Destinaition:=Range("A1:G1") End Sub ところが最初 Selection.AutoFill Destinaition:=Range("A1:G1") のところを Selection.AutoFill Destinaition:=Range("A1:G7") 入力したため、エラーが返され実行されませんでした。 そのため再度VBEに戻って Selection.AutoFill Destinaition:=Range("A1:G1") と入力し、エクセルBookにもどってマクロを実行させようとすると 「中断モードでコードを実行することができません」 とまたまたエラーが返されてしまいました。 そこで質問が2つです。 1.そもそもこの中断モードってなんでしょうか? 2.このあとどうしたらエラーを出さずにマクロを 実行させることができるでしょうか? ご存知の方、ご教示願います。

  • 実行中のマクロを中断したい

    過日、「マクロの中断」について質問し適切な回答をいただき無事解決したものです。 ところが、初心者の悲しさ、少し変わると全く応用がききません。 Range("A1:B10")を読み上げている途中で中断したいのです。前回ご教示いただいたところにより 「DoEvents」や「Me.Repaint」「Sleep」などをあちこち挿入してみましたがうまくいきません。理屈、理論を理解できていないので仕方ないのでしょうがよろしかったら又ご指導のほどお願いします。Excel2003です。 Dim c As Range Dim CancelFlg As Integer Private Sub CommandButton1_Click() Range("A1:B10").Select CancelFlg = 0 For Each c In Selection   ’ DoEvents Application.Speech.Speak c.Value  ’ DoEvents If CancelFlg = 1 Then Exit For  ’ DoEvents Next c Range("A1").Select End Sub Private Sub CommandButton2_Click() CancelFlg = 1 End Sub 前回のご教示いただいたもの Private Sub CommandButton1_Click() Dim i As Integer CancelFlg = 0 For i = 1 To 100 DoEvents ActiveCell.Value = 1 ActiveCell.Offset(1, 0).Activate Application.Wait (Now + TimeValue("0:0:01")) If CancelFlg = 1 Then Exit For Next i End Sub Private Sub CommandButton2_Click() CancelFlg = 1 End Sub

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのにMacro1の方が実行しません。お教え願えませんでしょうか。 (尚、図形を枠線上にコピペしています。) Sub Macro1()実行しません。 Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 10 To 103 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste End Select Next Next End Sub Sub Macro2()実行します。 ActiveSheet.Shapes.Range(Array("四角形1")).Select Selection.Copy Range("J11:K11").Select ActiveSheet.Paste End Sub

  • VisualStudio2003でDLLのデバックをブレークポイントやステップインで行う方法を具体的に教えて下さい。

    VisualStudio2003でDLLのデバックをブレークポイントやステップインで行う方法を具体的に教えて下さい。DLLのプロジェクトは、もうひとつのexeファイルと合わさって、1つのソリューションを構成しています。現状では、デバックを実行しようとすると、”デバック情報がありません”というダイアログボックスが開き、ブレークポイントの丸の上には、?が表示されます。

専門家に質問してみよう