この人頭いいなと思ったエピソード

エクセルで、アクセスから外部データ取り込み処理を行なう動作を、
フォームで作成したボタンで行っています。
その動作の最中に、他のマクロを登録したフォームボタンを押すと、
最初に押したボタンの動作が中断され、最後に押した方のマクロが動作し、
その動作が完了してから、1個目のボタンの動作が途中から開始されるようなんです。

最初の動作で最新データに置き換える動作をして、次の動作でアウトプットするようにしているので、
途中で動作されると困ってしまうので、対処方法を教えて下さい。

譲り受けたファイルなので、理解不足のまま質問してすみません。

対応として、以下のような画面固定というマクロが入っていますが、
それでは有効ではないようです・・・。
Application.ScreenUpdating = False
Application.ScreenUpdating = True

A 回答 (2件)

こんにちは。



通常、ひとつのマクロが占有して作動中の間は、他のマクロは起動することがないはずです。おそらく、そのマクロ実行が完全に遂行されていないかもしれません。

もちろん、完了前には起動しないように、モジュールレベルのフラグを置いておく方法もあります。
Private ExFlg As Boolean
Sub Macro1
ExFlg = False
'実行
ExFlg =True
End Sub
Sub Macro2
If ExeFlg =False Then Exit Sub

End Sub

---------------------------
以下のように、Interactive プロパティを使ってみる方法もあります。ただ、そのマクロがある程度の信頼性がないといけませんから、その場合は、On Error Goto ErrorHandler で、Interactive プロパティをTrue に解除できるように、したら良いかと思います。

Application.Interactive = False
Application.DisplayAlerts = False



Application.DisplayAlerts = True
Application.Interactive = True
    • good
    • 0
この回答へのお礼

私の力量(理解)不足で、最初、
どう試しても変化なかったので迷っていましたが、
何とかやりくりして、Wendy02さんの方法で対処出来ました。
助かりました。どうもありがとうございます。

お礼日時:2008/06/02 12:11

簡単な方法としては、


処理Aスタート時に任意のセル(例A1)に1を設定する。
処理A終了時に、そのセルをブランクにする。
処理Bでは、A1がブランク以外だったら、処理をしない

というような処理を組み込めばいいのでは?
    • good
    • 0
この回答へのお礼

条件を加えるやり方ですね。
そういう方法は思いつきませんでした・・・。
早速、やってみて動作を確認します。
早い回答に感謝します。

お礼日時:2008/05/23 09:36

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