VBAで読み取り専用時にマクロを無効にする方法

このQ&Aのポイント
  • VBAで読み取り専用時にマクロを無効にする方法を探しています。ネットワークで共有しているファイルが閉じられない問題があり、その解決策としてVBAを使用して自動的にファイルを閉じる方法を試しましたが、読み取り専用時でもマクロが実行されてしまいます。
  • VBAを使用してエクセルの入力操作がない場合に自動的にファイルを閉じる方法を試していますが、読み取り専用時でもマクロが実行される問題があります。
  • VBAを使ってエクセルの入力操作がない場合に自動的にファイルを閉じる方法を試していますが、読み取り専用時にマクロが実行されてしまいます。マクロを無効にするための構文を追加する方法を教えてください。
回答を見る
  • ベストアンサー

VBA 読み取り専用時はマクロを無効にする方法

ネットワークに保存したファイルを数人のメンバーで共有して使っています。 その際、誰かが開きっぱなし(閉じ忘れ)にしていて更新できないことがあり その解決策として下記の質問にたどり着きました。 VBA=一定時間エクセルの入力操作がない場合、自動的にそのブックを閉じたい http://okwave.jp/qa/q2911086.html 上記のリンクにあるVBAをコピペで使用してみたのですが、 読み取り専用で開いている際にも閉じてしまうため、 もうひと工夫出来ないものかと思い質問させていただきます。 このマクロを読み取り専用時は無効にすることは出来ますか? またその際、どんな構文を追加すればよいでしょうか? 当方、関数が少しわかる程度でVBAは全くの初心者です。 宜しくお願い致します。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

マクロでは, sub プロシジャ名()  から end sub   まで のヒトカタマリをプロシジャと言います。 【注意】 しばしば sub macro1()  : end sub sub macro2()  : end sub などのようにあったときに sub macro1() ←ここから end sub sub macro2() end sub ←ここまでですね♪ なんて具合にすっとぼけた勘違いをするヒトがいらっしゃるので,間違えないように気をつけてください。 それから。 追記する一行マクロを少し変更します。 sub macro1()  ↑macro1プロシジャの始まり  if thisworkbook.readonly then end    ↓macro1プロシジャはここまで end sub sub macro2()  ↑macro2プロシジャの始まり  if thisworkbook.readonly then end  ↓macro2プロシジャはここまで end sub  :  以下同文 とします。

nike-mania
質問者

お礼

お礼が遅くなってしまって申し訳ありません。 教えて頂いたとおりにやってうまくいきました。 ようやくテスト運用期間を終えて、グループ内でも問題なさそうということでした。 ありがとうございました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ご覧になった過去ログでは,ベストアンサーのANo.1も実際には色々上手くないようで,要は「アナタがいま実際に運用しているマクロ」は一体全体どういう内容になっているのですか?ってことなんですが。 でもあんまりグダグダと情報提供を待っていても先に進みませんし,アナタもさっさと回答が欲しいでしょうから。 ご質問の直接の回答としては if 対象ブック.readonly then exit sub のような仕込みで,対象ブックが読み取り専用で開かれている場合は「余計なことはしないでさっさとマクロを終了する」といった具合に仕込んでおけばOKです。 具体的に「どこに」この一文を仕込んでおけばよいのかはそれこそアナタのマクロ次第ですが,もしもご自分じゃ判断できないのでしたら,アナタが今運用中の全てのプロシジャの先頭に組み込んでください。

nike-mania
質問者

お礼

早速の回答ありがとうございます。 説明不足失礼しました。 リンク先ANo.1をそのままコピペで使用しています。 標準モジュールの内容が下記になります。 ----------------------------------------------- Public Operated As Boolean Sub SetTimer() Application.OnTime Now + TimeValue("00:05:00"), "CloseMe" End Sub Sub CloseMe() If Operated Then Operated = False SetTimer Exit Sub End If 'ブックの上書き保存 ActiveWorkbook.Save ' 保存確認を避けるため、保存済みにする ThisWorkbook.Saved = True ' 他にブックが開いていなければ、Excelを終了する If Workbooks.Count <= 1 Then Application.Quit ' 本ブックをClose ThisWorkbook.Close False End Sub ------------------------------------------------------ ThisWorkbookの内容が下記になります。 ------------------------------------------------------- Private Sub Workbook_Open() Operated = False SetTimer End Sub Private Sub Workbook_BeforePrint(Cancel As Boolean) Operated = True End Sub Private Sub Workbook_Deactivate() Operated = True End Sub Private Sub Workbook_Activate() Operated = True End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Operated = True End Sub Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Operated = True End Sub Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Operated = True End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Operated = True End Sub Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Operated = True End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Operated = True End Sub Private Sub Workbook_WindowActivate(ByVal Wn As Window) Operated = True End Sub Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) Operated = True End Sub Private Sub Workbook_WindowResize(ByVal Wn As Window) Operated = True End Sub --------------------------------------------------------- すべてのプロシージャの先頭ということは 標準モジュールとThisWorkbookに ----------------------------------- if 対象ブック.readonly then exit sub  ----------------------------------- という上記内容を追加すれば良いということでしょうか? また、当方まだまだ知識が乏しいため 詳細な構文がわかりません。 ----------------------------------- Sub MacroStop() If ThisWorkbook.readonly Then Exit Sub End If End Sub ----------------------------------- とすれば良いのでしょうか? 重ね重ね申し訳ありませんがよろしくお願いします。

関連するQ&A

  • [エクセル]マクロを無効にした場合、読み取り専用でファイルを開きたいです

    エクセルのマクロを使い初めの初心者です。 セルに入れた関数をユーザーが消したりしないために、マクロで関数の入ったセルにロックがかかった状態でファイルを開くようにしているのですが、マクロを無効にしてファイルを開くと、ロックがかかっていない状態になってしまいます。 マクロを無効にすると読み取り専用でファイルが開くような処理は可能でしょうか? よろしくお願いします。

  • VBA コピー&ペースト

    次の作業をVBAでマクロを組みたいのですが、どのような構文にすればよいでしょうか。VBA初心者のため、お知恵を拝借させてください。 [目的] 1.ブックA(コピー先)に設定したハイパーリンク先のブックB(コピー元)へジャンプ 2.ブックBへジャンプ後、特定のセルの値をコピー 3.コピーした値をブックAの特定セルへペースト 4. 1.~3.の作業をリピート 対象は、上の作業が未完(ブックAのペースト先のセルがブランク)のもの [詳細] ・ブックB(リンク先)の保存先はサーバー ・リンク先はブックBの特定のシート ・ブックAで設定したハイパーリンクのセルの値がリンク先のシート名 ・ブックBは複数、リンク先のシートも複数(ハイパーリンクごとにリンク先が異なる) ・ブックBにはマクロが設定、開くたびにマクロ有効無効のメッセージ(Excel2003のため) ・コピペする項目は3つ ・ブックA,Bともに開いた状態で、2.~4.のリピートというマクロでも構いません。 以上ですが、他に情報が必要でしたらお申しつけください。 よろしくお願いいたします。

  • 【Excel VBA】 マクロ無効で開かれた共有ファイルに記入できなくする方法?

     こんにちは.質問させていただきます. どうぞよろしくお願いいたします.  共有フォルダに,SelectionChangeイベントを含むエクセルファイルを入れております. マクロ無効状態で操作&保存されるとおかしくなってしまうので マクロ無効で開かれた際に閲覧しかできないように,もしくは無効では開けないように したいのですが,何かよい方法は無いものでしょうか???  試しに,閉じる際に全セルロック状態にして,開く際に解除すればいいかな?と考え, Workbook_BeforeSaveで,Cells.Locked = True としましたところ, 作業中に一度保存すると,再起動しない限り作業続行できなくなってしまいます. Workbook_BeforeCloseで,Cells.Locked = True としましたところ, このイベントのせいなのか,クローズ時にメッセージ「上書き保存しますか?」となり, 「いいえ」を選択すると次回,セルロックされていない状態で開けてしまいます.  何かよい方法は無いものでしょうか?エクセル2003を使用しております.  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします.

  • アドインマクロでマクロが使えない

    会社の共有フォルダで、マクロをアドインして、マクロを実行すると このブックでマクロが使用できないか、またはすべてのマクロが無効に なっている可能性があります とでてしまい使えないです。 マクロ作成者のパソコンからは使えるようなのですが、、 どうすればいいかわかるかた教えてください。 ちなみにエクセル2007です。

  • エクセル2003 マクロのセキュリティを「低」にしても、マクロを無効にしてファイルを開く方法

    http://oshiete1.goo.ne.jp/qa5101957.html で質問したものなのですが、 アクセスでは教えていただいたとおり、Shiftキーを押しながら開くと無効にできるのですが、 エクセルに関しては、Shiftキーを押しても、ブックのオープンイベントが発生します。 エクセルでも場合によっては無効にして開きたい時はどうすればいいでしょう? よろしくお願いします。

  • このファイルはマクロを含んでいます

    VBAを使用して、マクロを作成したBookがあります。マクロボタンごと削除したつもりなのですが、Bookを開こうとすると「・・・はマクロを含んでいます。」とメッセージが表示されます。 「有効にする」「無効にする」どちらを選択しても同じようには開けるのですが、このメッセージが表示されないようにするにはどうすればいいのでしょうか? まだマクロが残っているのだとしても、どこに残っているのか分かりません。。。

  • エクセルマクロ(VBA)の変数について教えてください。

     仕事でエクセルを利用してファイルを作ることが多いのですが、関数とマクロに課題のある者です。  マクロはそんなに高度で複雑なものが現状、必要でないので記録マクロで事足りていますが、私のやり方は  1.手順を記録  2.マクロの実行  3.ステップイン機能でステートメントの動作を見る  4.無駄な構文を削除  5.エラー(デバッグ警告表示)修正  6.日々替わる取り扱いファイル、シート名をそこだけ置き換えて汎用性を持たせている。  7.さらに動作を加えたい時は新しいマクロ記録で構文を記録し、ベースマクロに構文を追加している  8.日々更新変動されるファイルは情報量の余裕をみて、ファイルが想定を超えないように作っている。  9.記述式マクロ(VBA)が十分出来るスキルが乏しい  と言うのが私のレベルですが、参考書、テキストを読んでいると必ず、『変数』Dimスペルというものが出てきます。この意味がもう一つよく分からないので、ツール→オプションのダイヤログボックス編集で『変数の宣言を強制をする』を外しています。  変数は実行の都度変わる値を扱ったり、代入すると言うことは何となく分かるのですが、完全に理解できてないので、(記述が分かりにくい)そこから前に進めません。  サンプル例はありますが、詳しく解説しているものが少ないです。『何故、こうなるか?』というのが抽象的な説明です。  『変数宣言を強制』にチェックを入れた場合、今まで、チェック無しで作ったマクロファイルは動作しませんか?  たまに自動メンバー表示機能から構文を挿入しますが、個々のプロパティやメソッド、コレクションなど記述構文は英語ですが、これを日本語に置き換えて理解できるようにしたいのですが、皆さんはどのようにされたのですか?  

  • VBAで他のブックのVBAを開く方法

    win7を使っています。 あるブックに入ったVBAで別のブックに入ったsubマクロを開きたいのですが http://qanda.rakuten.ne.jp/qa7769745.html このページに書かれた方法を参考にすると 別のxlsmファイルが開いて、マクロを開こうとするところまではいくのですが 権限がない、と言われてsubを開くことができません。 回答をよく読むと、XPの方法には対応しているが win7に対応しておらず xlApp.Visible = True xlApp.Run "'" & MyFileName & "'!" & "test" を入れるとうまくいく、 みたいなことが書いてあるのですが、 これをやってもうまくいきませんでした。 どなたか方法を教えてください。

  • エクセル2004 マクロについて

    エクセル2004のmac版を使用しております。 ブックを開こうとすると「開こうとしているブックには、マクロが含まれています(以下省略)」のメッセージがでてきて下部に〝マクロを有効にする〟〝開かない〟〝マクロを無効にする〟のボタンが表示されています。マクロの有効無効がどのように影響するのかということと、ブックを開く際にでてくるメッセージを消したいのですが、教えていただけますでしょうか?。 因に書類は社内でつくったものなのでウイルスの心配は大丈夫です。

  • VBA ファイル作成時にマクロを含まない

    只今、excelのVBAを学習中です。早速ですが質問させていただきます。 excelファイルを作成し、入力されたファイル名で保存するプログラムを組んでいます。 その際、作成したファイルがマクロを含んでしまうのですがマクロをふくまないようにする事は可能でしょうか? VBAを始めたばかりなので初歩的な質問で大変恐縮です。よろしくお願い致します。

専門家に質問してみよう