アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAでコマンドボタンを押して、計算処理をさせているのですが、
計算処理中はシートへの入力等の操作をロックしたいのですが、
出来ますか?
計算処理が終わったら、元に戻したいと思っています。

A 回答 (4件)

こんにちは。



ユーザー操作による手作業での編集を無効にする

Application..Interactive = False
' ' 計算処理
Application..Interactive = True

一応、ヘルプの内容を確認しておいてください。
以下VBAヘルプより抜粋
====================================
Application.Interactive プロパティ
True の場合、Excel が対話モードになります。既定値は True です。このプロパティが False に設定されると、キーボードやマウスからの入力を受け付けなくなります。ただし、表示されたダイアログ ボックスへの入力は可能です。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
構文

式.Interactive

式 Application オブジェクトを表す変数。

備考


入力できない状態にしておくと、マクロで Excel のオブジェクトを移動したりアクティブにしているときに、ユーザーからの干渉を防ぐことができます。

DDE、または OLE オートメーションを使ってほかのアプリケーションと Excel とでデータをやり取りするときには、このプロパティに False を設定しておくと便利です。

ただし、このプロパティに False を設定したときは、マクロの終了前に必ず設定を True に戻してください。True に戻すのを忘れると、マクロが終了しても Excel に入力することができません。
    • good
    • 0

#1.cjです。

#1訂正と補足です。

Application.Interactive = False
' ' 計算処理
Application.Interactive = True

ドットがダブっていました。失礼。

それと、計算処理中のエラーには、しっかりトラップを掛けた方がいいです。
または、エラーダイアログからデバッグせずに終了すると、
(再起動するまで)シート上で編集が出来なくなる、
ということを強く意識しておいた方がいいです。

訂正、補足、以上です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
デバッグモードに入るのは自分だけなので、
Trueに戻すことを覚えておきます。

計算処理中のエラーには、しっかりトラップを掛けた方がいいです。
とはどういう意味でしょうか?
トラップが良く分かりません。

お礼日時:2013/11/12 19:29

#1、2、cjです。

#2お礼欄へのレスです。

計算処理そのものについて、実行時エラーが起こることはない、と、
断言できる内容なら、何も考えなくていいです。
今は何も問題なかったとしても、後々追加される記述の方で、
エラーの可能性を看過してしまったり、というのは、
よくあることなので、心掛け程度には理解しておいた方がいいです。

> デバッグモードに入るのは自分だけなので、
...
> 計算処理中のエラーには、しっかりトラップを掛けた方がいいです。
> とはどういう意味でしょうか?

エンドユーザーによる実行に際して、もし実行時エラーとなり、
実行時エラーを報せるダイアログが表示されてしまうと、
VBAを知らない大抵のユーザーは、[終了]を押してしまいますよね?
そうすると、
> > エラーダイアログからデバッグせずに終了すると、
> > (再起動するまで)シート上で編集が出来なくなる、
ということになり、そのユーザーは、
驚きと困惑で手が止まってしまうことでしょう。
ヘルプに書いてあるところの
> > ただし、このプロパティに False を設定したときは、マクロの終了前に必ず設定を True に戻してください。
を実践する為に、
エラーが起きた場合、どのように処理を抜ける(または復旧/継続する)か決めておいて、
必ず、
Application.Interactive = True
を実行するようにOn Error ステートメントでエラートラップを掛けておく等の対策が必要、
ということです。#んー、なんか説明下手ですみません。

例えば、エラーが出たら、処理は中途のまま、ただSubを抜けるのなら、こんな感じ。


Sub HogeHoge()

  Application.Interactive = False

  On Error GoTo ErrOut_
  ' ' (この行以降でエラーが起きれば即、ErrOut_行へジャンプ)

  ' ' 計算処理
  ' ' 計算処理
  ' ' 計算処理

ErrOut_:

  Application.Interactive = True

  If Err Then MsgBox "処理HogeHogeはエラーにより不正終了しました。" _
            & "表示中のダイアログのコピーを取った上で" _
            & "担当○○まで連絡してください。" _
            & vbLf & Err & vbLf & Err.Description

End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。
デバッグモードに入らないから、
Trueに戻らない危険が有るのですね。

お礼日時:2013/11/12 21:33

#1-3、cjです。

#3お礼欄へのレスです。

> デバッグモードに入らないから、
> Trueに戻らない危険が有るのですね。

はい、その通りです。
滅多に無い、ことかも知れませんが、反響は大きそうです。

もう少し扱い易い方法はないか?ということで思いつきましたが、
UserformをApplication.Windowの外、見えない場所に
.Show vbModal表示して、処理後にHide
なんて変化球も、アリかも知れませんね。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A