- ベストアンサー
マクロを上書き保存時に削除または停止させる
エクセル2003での質問です。 Auto_Openでマクロを実行させ、上書き保存し、次に開くときはそのAuto_Openのマクロを実行しないようにしたのですが、何か良い方法はありますでしょうか? ちなみに、Auto_Openマクロでは他のファイルにリンクしている表をコピーして値のみ張付け、そのまま上書き保存してリンクをさせないようにしています。 どなたか分かる方がいらっしゃいましたら宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3の回答者です。 #3の補足のコードは直しましたが、このようなスタイルではどうでしょうか。 >保存用のフォルダ(共有ネットワーク内)に入れています。 >保存用に入れたファイルはAuto_Openマクロが動かないようにしたいと思っています。 共有ネットワークに入っているフォルダのフォルダパスは、\\(¥¥)となりますから、以下のようにして、Auto_Open は動かないようにします。試してみてください。 考え方の理屈は分かっていただけると思いますので、もし違うようでしたら、実際のフォルダを登録する方法もあると思います。 なお、シート名は、実際の名前に書き換えてください。 Sub Auto_Open() ''MsgBox ThisWorkbook.Path '確認用 If ThisWorkbook.Path Like "\\*" Then Exit Sub With Worksheets("Sheet1") 'シート名 .Range("B8:C8").Value = .Range("B8:C8").Value .Range("A10:E22").Value = .Range("A10:E22").Value .Range("A25:E37").Value = .Range("A25:E37").Value .Range("E24").Select End With End Sub
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
ご質問の内容では、良く分かりません。 >Auto_Openでマクロを実行させ、上書き保存し、次に開くときはそのAuto_Openのマクロを実行しないようにした…… Auto_Open を上書き保存しなければ動きませんが、次に開けた時点でマクロを動かしたくないというのなら、Auto_Openに登録する必要性などありえません。なぜ、Auto_Openに登録しているのか、その理由と仕組みが分からないと、本当の解決には至らないような気がします。どうも事情が分かりません。 >マクロを上書き保存時に削除または停止させる 自爆型のマクロというのは、Excelでは使ったことがありません。マクロ関数で書くなら可能かもしれません。そうでなければ、アドイン型でも可能ですが、アドインを外すマクロが残ってしまいます。 VBAマクロを削除させるのは、今は、ウィルスもどきなので禁止技になっています。Auto_Open で、レジストリや、iniファイルの有無のチェックで起動させないことは出来ますが、VBAとしては上級ワザのひとつかもしれません。レジストリや、iniファイルの代わりに、CustomDocumentPropertiesに登録しても良いと思います。 もう少し、詳しいお話を聞かないと、私は、何も答えられませんね。
補足
Auto_Openのマクロは以下の通りになります。 Sub Auto_Open() Range("B8:C8").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A10:E22").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A25:E37").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Range("E24").Select End Sub 表の中の数値が入力シート(外部ファイル)にリンクしているので、 一旦表をコピーして、値だけ貼り付ける作業をしています。 このファイルを上書き保存して、保存用のフォルダ(共有ネットワーク内)に入れています。 保存用に入れたファイルはAuto_Openマクロが動かないようにしたいと思っています。 まとめると、該当ファイルを開いた時に、外部ファイルにリンクした表をコピーして値だけ貼り付け、 Auto_Openマクロを次回起動時に動かないようにして、上書き保存出来れば最高です。
- ogawa_sora
- ベストアンサー率36% (468/1280)
今晩は。 「Auto_Open」とは、古いバージョンのExcelもお使いですか。 Excel2002以降は「Workbook_Open」イベントプロシージャを使いますが、開くとき「Shift」キー を押しながらブックを開くと無効となり実行されませんから、同じやり方で良いと思います。 趣旨と違っていたらすいません。
補足
Excel2003を使用しています。 Shiftを押さないでファイルを開いた時にAuto_Openが作動しないように出来る方法を探しています。
- merlionXX
- ベストアンサー率48% (1930/4007)
geos_test2006さんの意図が、お書きになった通りなら Sub Auto_Open() If Sheets("Sheet1").Range("A1").Value = "実行済み" Then Exit Sub Else Sheets("Sheet1").Range("A1").Value = "実行済み" 現在のAuto_Openで実行のコード End If End Sub とでもして判定させればいいと思います。 まあ、実際にはA1セルじゃなくもっとめだたないところがいいかな。 でも違う意図、たとえば値だけになった表を、マクロのないBOOKにして保存したいとか、ならまた違う方法も考えられます。
お礼
完璧です!! ありがとうございました! これで大分楽になります(T_T)//