• ベストアンサー

エクセルVBAでロックをかけたい

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

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

#1-3、cjです。#3お礼欄へのレスです。 > デバッグモードに入らないから、 > Trueに戻らない危険が有るのですね。 はい、その通りです。 滅多に無い、ことかも知れませんが、反響は大きそうです。 もう少し扱い易い方法はないか?ということで思いつきましたが、 UserformをApplication.Windowの外、見えない場所に .Show vbModal表示して、処理後にHide なんて変化球も、アリかも知れませんね。

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

#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

miya2004
質問者

お礼

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

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

#1.cjです。#1訂正と補足です。 Application.Interactive = False ' ' 計算処理 Application.Interactive = True ドットがダブっていました。失礼。 それと、計算処理中のエラーには、しっかりトラップを掛けた方がいいです。 または、エラーダイアログからデバッグせずに終了すると、 (再起動するまで)シート上で編集が出来なくなる、 ということを強く意識しておいた方がいいです。 訂正、補足、以上です。

miya2004
質問者

お礼

ありがとうございます。 デバッグモードに入るのは自分だけなので、 Trueに戻すことを覚えておきます。 計算処理中のエラーには、しっかりトラップを掛けた方がいいです。 とはどういう意味でしょうか? トラップが良く分かりません。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 ユーザー操作による手作業での編集を無効にする 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 に入力することができません。

関連するQ&A

専門家に質問してみよう