プロが教える店舗&オフィスのセキュリティ対策術

イベントプロシージャ『 Worksheet_Change 』の対象セルを『 コピー貼付 』の際
どんな方法で貼り付けてもマクロがフリーズすることがなくなる方法をご存知の方が
いらっしゃいましたら、是非その方法を教えて下さい。

『 Worksheet_Change 』対象セルの『 コピー貼付 』の際、ツールの『 編集 』から
『 貼り付け 』の手順で『 Worksheet_Change 』対象セル宛に情報を貼り付けてみた
場合は特に問題なく情報が貼り付いてくれます。

『 Ctrl+V 』で貼り付けた場合も問題なく情報が貼り付いてくれます。

しかし、コピー後に貼り付け先のセルを右クリックして『 形式を選択して貼り付け 』の手順での
貼り付けをしようとすると、必ず決まってマクロがフリーズしてしまいます。

そのため、その度にウィンドウ右上の閉じるボタン『 X 』をクリックして『 保存しますか? 』を
『 キャンセル 』してマクロのフリーズを解除している状況です。

コピー元のセルと貼り付け先のセルは共にセル結合されている状態ですが、この『 セル結合 』は
マクロのフリーズとは無関係のことと思われます。

何か良い解決策をご存知の方、どうか宜しくお願いします。

A 回答 (2件)

Worksheet_Changeのコードがないので、推測で回答いたします。



Worksheet_Changeイベントでセルに値を設定しているのではないでしょうか?
そのため、セルに値を入れた段階で、また「Worksheet_Changeイベント」が発生し
イベントの繰り返しになっていると思います。

Worksheet_Changeイベントの処理中はイベントを発生させないために、
「Application.EnableEvents」を使用すれば解決すると思われます。

具体的には以下の通りです。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
          :
 ' イベント処理   
          :
Application.EnableEvents = True
End Sub
    • good
    • 0
この回答へのお礼

この度は早々にご回答を頂き誠にありがとうございました。
確かにイベントの繰り返し状態であれば『 Application.EnableEvents = False 』で
解決するのですが、今回の件ではイベントの繰り返しが原因ではございませんでした。

ツールの『 編集 』から『 貼り付け 』の手順だと問題なく貼り付けられる状況なので・・・

ちなみに、ツールの『 編集 』から『 形式を選択して貼り付け 』の手順で貼り付けた場合も
問題なく情報が貼り付いてくれます。(マクロがフリーズ状態にはなりません)

何故、右クリックして貼り付けを試みた場合にだけマクロがフリーズするのかが分かりません。

最悪の場合は『 Worksheet_BeforeRightClick 』でコピーモードを解除してしまうことで
『 右クリックでの張り付け 』を強制的に回避しようと考えておりますが、できれば
『 右クリック 』で問題なく情報が貼り付いたようにユーザーに認識させたいのです。

何か良い解決策がございましたら改めて教えて下さい。この度は誠にありがとうございました。

お礼日時:2010/09/09 12:14

> ちなみに、ツールの『 編集 』から『 形式を選択して貼り付け 』の手順で貼り付けた場合も


> 問題なく情報が貼り付いてくれます。(マクロがフリーズ状態にはなりません)

> 何故、右クリックして貼り付けを試みた場合にだけマクロがフリーズするのかが分かりません。

単純にWorksheet_Changeの中にコードをシンプルで行ったら、何も問題はありませんでした。
やはりexcuse-meさんが作成したコードが影響あるのだと思います。
私も、EXCELでは色々わからない問題で苦労させられました。
でもどういう時に問題が起こるかは、調査した方が良いかと思います。

できれば今のコードで、問題が出そうな所(例えばセルにセットする等々)をコメントアウトしていき、障害に影響するコードを探してください。
それを知っていることも技術や知識?になると思います。

※役に立たず申し訳ありませんでした。
    • good
    • 0
この回答へのお礼

この度は親切にご回答を頂き誠にありがとうございました。
もう一度、マクロ構文を見直してみて障害を回避できる策を探してみます。

お礼日時:2010/09/09 16:51

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