VBA実行時、まれに「実行時エラー -2147417848(80010108) オートメーションエラーです。起動されたオブジェクトはクライアントから切断されました。」が発生し、動作がフリーズしてしまう。(コピー(カット) & ペーストを大量に実施しているから?)

Anonymous
2013-03-12T05:20:09+00:00

Excel2007のVBAを含んだファイルを開いた時、稀に表題のエラーが発生します。

発生頻度は、毎日十数回程度のアクセスで週に一度程度です。

おおよそ60~80回に一度のペースですが、発生した時の状況に共通性は見いだせません。

ただし、後に示します「行のコピー&ペーストと削除」の構文を除外するとエラーは発生しなくなりますので、そこが原因であると考えています。

このエラーが発生するとExcelがフリーズするため、タスクマネージャによる強制終了が必要です。

大変煩わしいので、回避策等ありましたらご教示いただきたく、よろしくお願いいたします。

動作は、ファイルを開いた時にWorkbook_Open()において、特定の文字列が含まれる行をアクティブシートに貼付け、元のシートにあるデーターは消去します。

(つまり、シート間のデーター移動を行っています)

移動量は、最大で250行×20列程度です。

フィルターその他でも似たような結果は得られるのですが、このケースではどうしても選択的なデーター移動が必要なので、このような形になってしまいました。

結果として、このファイル(ブック)の異なるシートに同じデーターが重複して存在しなければ良いので、下に示す手順・コードにこだわってはいません。他にアイデアが浮かばなかったのでこのような記述になっています。

プログラムの手順は、

・変数TNameへ移動対象となる文字列を代入する。(実際には特定のセルから値を取得)

・シート【ORG】のデーターをスキャン。

・2列目の値にTNameが含まれていたらその行をコピー。

・アクティブシートの「EndRow」で示される行(実際には先頭セルを指定)へペースト。

・コピー元の行を削除。

※カット&ペーストの方が簡単なのですが、実際に動作させるとカットされない(!)ので上記の手順を踏んでいます。

実際のコードは以下の様になります。(抜粋)

TName = "xxxx"                                      'シートの2行目に記入されている文字(の一部)が代入されます。

With Worksheets("ORG")

     EndRow = 1

  RRow = 1

     While .Cells(RRow, 1) <> ""           'シート【ORG】の1列目データーが空白になるまでスキャン。

          If InStr(TName, .Cells(RRow, 2)) Then   '2列目の値にTNameの文字列が含まれているか。

               .Rows(RRow).Copy _                         '行をコピーし、アクティブシートへペースト。

               Destination:=Cells(EndRow, 1) 

                                   ' ↑ (ペースト先をRowsで指定するとエラーとなるので、先頭セルを指定)

               .Rows(RRow).Delete Shift:=xlUp         '対象行を削除。

               RRow = RRow - 1             '行を削除したのでスキャン対象行を一つ上に戻す。

               EndRow = EndRow + 1

         End If

         RRow = RRow + 1

    Wend

End With

原因をご存知の方、また回避策をご存知の方がいらっしゃいましたら、是非ご教示ください。

よろしくお願いいたします。

なお、Webにて調べましたところExcel2000においてはコピー(カット)&ペーストを多量に行うと発生しやすいとの情報がありました。

[http://support.microsoft.com/default.aspx?scid=kb;ja;JP414107&wa=wsignin1.0]

しかし、2007では報告されていないようです。

現象は酷似していますが発生条件も大きく異なりますので、直接は該当しないと考えております。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

5 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2013-10-08T06:37:29+00:00

    HeakKnomb さん、こんにちは。

    マイクロソフト コミュニティに投稿していただき、ありがとうございます。

    実行時エラー '-2147417848 (80010108)' が特定の PC で発生しているということなのですね。

    解りやすく確認手順も書いていただき、ありがとうございます。

    発生するエラーメッセージについて私の方でも情報を探してみたところ、以下のような情報が見つかりました。 (もしかするとすでに確認済みかもしれません)

    ・ PRB: 実行時エラー '373' または '-2147417848(80010108)'

    ※ 機械翻訳になりますので、 必要に応じ対訳のページを確認してみてください

    ・ \[OFF2003\] \[INFO\] Visual Basic の事前バインディングを使用すると、Office オートメーションでエラーまたは予期しない現象が発生する

    ご利用の環境によって変わってくる部分だと思いますので、そのまま適用できる内容かどうかは解らなかったのですが、手がかりになる部分がないか、よろしければ確認してみてください。

    VBA の詳しい部分の内容となるので、追加で情報を集められたい場合は福嶋 が紹介している、専門の VBA フォーラムにも投稿してみるとよいと思います。

    もし投稿される場合は、お使いの Office のバージョンや OS のバージョンなども追加で書いてみることで回答も得られやすくなると思います。

    この回答は役に立ちましたか?

    20+ 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2013-03-13T00:05:59+00:00

    p814058 さん、こんにちは。

    マイクロソフト コミュニティをご利用いただきありがとうございます。

    VBA を含んだ Excel 2007 のファイルを開いた時、実行時エラー -2147417848(80010108) が発生することがあるのですね。

    毎回発生するエラーではないことや、コピー & ペーストに関する記述があると発生することから、この動作と関係があるとは思うのですが、Excel2007 での VBA の動作について、詳しい情報を見つけることはできませんでした。。。

    VBA については、開発者の方が多く利用されている、 MSDN のフォーラムにも投稿いただくとより情報が集まってくるかもしれません。よろしければ、ご利用になってみてはいかがでしょうか。

    MSDN フォーラム - Visual Basic for Application(VBA)

    この回答は役に立ちましたか?

    4 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  3. Anonymous
    2013-10-04T05:20:43+00:00

    自己レスです。試験してみました。

    Visual BASIC 6 で以下の ActiveX EXE プロジェクトを作成して、F5キーで実行します。

    Public Sub Die()

    End

    Stop

    End Sub

    2行目のEnd文で停止するようにF9キーを押しました。

    Excel VBAの標準モジュールで以下のマクロを作って実行しました。

    Sub test()

    Dim Obj as Object: Set Obj = CreateObject("Project1.Class1")

    Debug.Pring Err.Number

    Obj.die

    End Sub

    イミディエイトペインに0が表示され、DieのEnd文で停止しました。

    継続すると次のStop文は実行されず、Excelから以下のメッセージが2行表示されました。

    実行時エラー '440'

    Applicataion-defined or object-defined error

    デバッグ(D)ボタンをクリックしてからF5キーで継続すると以下のメッセージが表示されました。

    実行時エラー '-2147417848 (80010108)'

    オートメーション エラーです。

    起動されたオブジェクトはクライアントから切断されました。

    オブジェクトが死んだ時というより、死んだ後で使おうとした時に発生するようです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2013-10-04T03:09:29+00:00

    Excel VBA の以下の行で件の番号のエラーがお客様のパソコンでのみ発生します。開発環境でもランタイム試験環境でも発生しません。

    Me.Range(CellSignalNames).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

    Meはワークシートです。メッセージは少し違っていて、

    「実行時エラー'-2147417848(80010108)'

    'PaseteSpecial'メソッドは失敗しました: 'Range'オブジェクト」です。

    http://support.microsoft.com/kb/146864/ja でエラーコードを見ると、「メソッドは失敗しました」というエラーならば1004が返る筈ですが、これは起動されたオブジェクトから正常にエラーが返された場合であり、オブジェクトが何らかの理由で異常終了して切断された時にこの番号が出ると解釈して良いのでしょうか?

    この元記事もそうですが、Webで検索してもクリップボード絡みでしばしばこのエラーが発生するようですね。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Anonymous
    2013-03-21T03:10:55+00:00

    p814058 さん、こんにちは。

    同様のお悩みでこちらのスレッドを見られた方にも参考となるよう [回答としてマーク ] をさせていただきました。

    また何かありましたらマイクロソフト コミュニティのご利用をお待ちしています。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません