• ベストアンサー

エクセル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

  • VBAエクセルのフォームについて

    お世話になっております。 VBAエクセルのフォームについて教えていただきたいのです。 VBAで入力のフォームを作ったのですが(TEXT BOXが4つ、コマンドボタン1つ、コマンドボタンを押したときに登録される用にしたい) 各シートの集計にしたい為、各シート(31のシートがあります)に入力フォームがあります、その各シートでの入力結果を1つのシートに 集計したいのですが、どの様なコードにしたらようか判りません。 素人のためお手数ですが、なるべく判りやすくお願いします。 よろしくお願いします。

  • エクセルVBAのボタン操作について

    sheet1にコマンドボタン(CommandButton1)を貼り付けて sheet2にもコマンドボタン(CommandButton1)を貼り付けています。 sheet1のコマンドボタンを押すとVBAで処理をして sheet2を表示後 自動的にsheet2のコマンドボタンにかかれたVBAの処理をしたいのですがうまくいきません。 教えてください。 環境windows2000 office 2000 sheet1のボタンの最後 Sheets("2").Select ActiveSheet.Shapes("CommandButton1").Select でうまくいきません。

  • excel2000のVBAについて

    excel2000でコマンドボタン(command1)をclickすると VBAの command1_click関数の処理をするという マクロをVBAで作成したいのですが、 (1)excelシート上にコマンドボタンの作成方法 を教えてください

  • エクセルvba初心者です・・・

    エクセルvba初心者です・・・ シート1にあるひとつのセルをコマンドボタンを押した時にそのセル内の文字列をシート2にかいていくようなプログラムをつくりたいです。 例えば シート1のセルに文字入力→”田中”→登録ボタンおす→シート2のセルA1にはいる シート1のセルに文字入力→”竹山”→登録ボタンおす→シート2のセルA2にはいる                  ・                  ・                  ・ というようになるコードわかる方いたら教えてください。おねがいします。

  • EXCEL VBAから、VBのフォームを開くためには?

    EXCEL VBAからVBへプログラムを移そうと努力しています。 そこで、エクセルのシートのコマンドボタンを押すと、 VBで作成したフォームが開き、そこからEXCELの処理を させたいと考えています。 VBからエクセルの処理は Excel.Application のあたりをつかうことでなんとかなりそうなんですが その逆がわからず行き詰まっています。 EXCELは2000 VBは6.0 です ご存じの方、よろしくお願いします。

  • エクセル VBA 

    エクセル VBA  Sheet上にコマンドボタンをクリックさせたら 電卓表示させるにはどのように記述をしたら良いですか? (1)勿論、VBAで電卓作成したいのですが…何か良いサイトはありますか?それか  作り方を教えて欲しいです。 (2)ツール⇒すべてのプログラム⇒アクセサリ⇒電卓  で表示できますよね!それをコマンドボタンクリックで  表示させるには、どのように記述したら良いですか?   すいません教えてください!

  • Excel(VBA)について教えてください。

    VBAの初心者です。 宜しくお願いします ワークシートに貼り付けたトグルボタンを入力が出来ない状態にしたいのですが、よくわかりません。どなたか教えていただけないでしょうか? 私が理解している範囲は次の通りです。 1)LockedプロパティーをTrueにする。 2)コントロールの書式設定でロックする 3)ワークシートの保護をかける。 これで、トグルボタンの編集はロックできますが、入力自体がロック出来ません。 宜しくお願いいたします。

  • エクセルのVBAで、開いているブックのシート数を知りたいのですが。

    エクセル97で入力したシートをVBAプログラムで最後のシートの後ろにコピーするようにしています。何枚になるかはデータ量によりシート数が違ってきます。 処理が終了した後、コピーしたシートが何枚有るのかをVBAで把握する方法なり、コマンドなりを知りたいのですが。 ご存じの方教えて下さい。

  • エクセル VBA

    エクセル VBA コマンドボタン(印刷)をクリックするとSHeet1・SHeet2が 2つ印刷出来るような設定にしたいです。 普通は、SHeet1をコピーして Sheet2の画面を開いてコピーという手順を ボタン押すと、SHeet1・SHeet2が印刷されるようにしたいのですが・・・・ ちなみに印刷設定は出来ています。 このような ことはマクロで出来るのでしょうか? 記述を教えて下さい!

  • エクセルVBA コントロールの制御

    エクセルのシート上にコマンドボタンを貼り付けています。このシートを縦横にスクロール移動してもコマンドボタンは常に同じ位置(たとえば画面中央)に在るようにプロパティかVBAで制御できないでしょうか。 エクセルは2003Pro、WindowsはXpProです。

専門家に質問してみよう