dポイントプレゼントキャンペーン実施中!

Excel起動時にAuto_Openでマクロを動作させています。
1回目はマクロを行いたいのですが、
次回起動時はマクロを使用したくありません。
(初期にAuto_Openを使用しなければいいのですが、できれば使用したいです)

そこで下記はできますでしょうか?
・名前を付けて保存(時)後にマクロを削除するマクロ
・2回目以降起動時(該当のファイル名が違う場合に、Auto_Openが動作しない)マクロ

ほかでもよい案があれば教えてください。

A 回答 (3件)

一例です



Sub auto_open()
If ThisWorkbook.Name = "Book1" Then
Call 処理
End If
End Sub

sub 処理()
auto_openにあった処理をこっちへ移動する
end sub

の様にして
If ThisWorkbook.Name = "Book1" Then
この行に、最初のファイル名を記入しておき判断させ
ファイル名が変わったら"処理"マクロは実行されない

参考まで
    • good
    • 0

1.>1回目はマクロを行いたいのですが、次回起動時はマクロを使用したくありません。


2.>名前を付けて保存(時)後にマクロを削除するマクロ
3.>2回目以降起動時(該当のファイル名が違う場合に、Auto_Openが動作しない)マクロ

全部可能ですが、質問者さんの考え方や技術しだいと思います。そのまま、質問しっぱなしっていうだけでは、上手くないと思います。もちろん、私自身としては、#2さんの回答は、私も使っているテクニックです。ただし、少し複雑なのは、最初にブックを使用した時に自分専用の環境を作り、それでチェックさせるという方法です。だから、フォルダを変えても、動かないような作りにしています。

昔ながらの方法は、キーファイルからマクロを実行して、処理をすればよいのですが、これが一番簡単です。ただし、それでは、趣旨が違うかもしれませんし、それでも、ある程度の技術レベルは必要だと思います。Sheets.Copy は、マクロを除いてコピーということは、出来ないというぐらいは気がつかないといけないかもしれません。

2.に関しては、ご質問の趣旨は、ユーザーの手間なしに、マクロ・コードを削除させるわけです。それ自体は、ここで発言がなくても、インターネット検索すれば、10万件以上も出てきます。ただ、マイクロソフト側が、Extensibilityを使う方法に、セキュリティを設け安全策を講じたわけですが、セキュリティの問題以上に、私は個人的に、自己破壊型マクロは、あまり好きではありません。VBAを長年やっている人なら、一度や二度は試すコードでも、それを実際に実務で使用する人は、まずいないと思います。プロレベルの人が、こうしたテクニックを奨励することもありません。Excelの場合は、ユーザーフレンドリーにも、限界があるからです。

私自身としては、もう一度、こういう設計はしっかりと考えてもらい、最終的な結果からさかのぼって、単なるテクニックではなく、もう少し、周辺環境(OS とVersion, ExcelのVersion)や、その必要な理由や具体的な内容を書いていただかないと、いけないような気がします。面倒だなって思うなら、#2さんのテクニックで十分だと思います。ただ、ある時はマクロ付きブックで、ある時はマクロなしブックという可変型のブックよりも、最初から、マクロ付きブックと、そうでないブックとは明確に分けたほうがよいのは言うまでもありません。
    • good
    • 1

マクロを直接除去したり操作するマクロは,まんま「マクロウィルス」の作り方につながりかねないので,ここのような公開の掲示板等では触れない話題です。

また比較的最近のエクセルでは,標準ではそういった操作が通らないセキュリティが仕込まれています。

ただ
>該当のファイル名が違う場合に、Auto_Openが動作しない

といった段取りで良いなら例えば,
1.Auto_Openが起動する
2.全ての(若しくは必要な)シートを,シートの複写して新しいブックを起こす
 (現在開いている中のブックの全てのシートを移動するマクロを書いてしまうと上手く行かないので注意)
3.複製ブックを名前を付けて保存し,以後はそちらを使って貰う
4.オリジナルブックは必要なら「致命的な」修正を行い,以後は使えない格好にして上書き保存しておく
などのような手はずで,Auto_Openを「置き去り」にしたマクロ無しブックを準備できます。

例:
sub Auto_Open()
sheets.copy
activeworkbook.saveas filename:="no_macro.xls"
thisworkbook.sheets(1).range("A1:M100") = "このブックはもう使えません"
thisworkbook.close savechanges:=true
end sub
    • good
    • 0

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