• 締切済み

エクセルファイルを自身のファイルで削除する方法

Microsoft Excelについて、エクセルファイルをそのエクセルファイル内のマクロで削除する方法がありましたら教えてください。 ファイルを削除させなくても、記述したマクロコードだけ削除させるのでよいです。 自分で作成したマクロ入りエクセルファイルを他人にお試しとして提供することを考えています。お試しなので、ある期限になったら自動で削除させたいと思っています。 すみませんが、どなたかわかるかたがいましたらお願いします。

みんなの回答

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.5

追記。 ANo.4の方法での自己消滅は、エクセルのファイルそのものを消去するので、慎重にテストして下さい。うっかり「オリジナルファイル」を削除してしまわないように(回答の投稿の前にテストで削除が実行されてしまい、マクロを最初から書き直ししたウッカリさんがここに居ます) なお、何をしているかと言うと 1.使用期限切れの日付をチェック 2.エクセルファイルが消えるまで、繰り返してデリートを試みて、エクセルファイルが消えたら自分自身も自己消去するバッチファイルを生成 3.使用期限の警告を表示 4.上記2で生成したバッチファイルを、非表示モードで実行 5.自分自身のエクセルファイルファイルを閉じる と言う処理をしています。 エクセルファイル自身は、自分自身が開かれている限り自分自身を削除できませんが、バッチファイルは「実行中の自分自身を削除可能」なので、エクセルファイルとバッチファイル自身の削除をバッチファイルで行っています。

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.4

ThisWorkbookのOpenイベントに以下のコードを仕込むと、2014/12/23日になった時点で、開いた時に警告を出してから自己消滅します。 Private Sub Workbook_Open() Dim ofn As String Dim bfn As String If Now() >= #12/23/2014# Then ofn = ThisWorkbook.FullName bfn = ofn & ".bat" Open bfn For Output As #1 Print #1, "@echo off" Print #1, ":loop" Print #1, "del """ & ofn & """" Print #1, "if exist """ & ofn & """ goto loop" Print #1, "del """ & bfn & """" Close #1 MsgBox "使用期限切れの為、使用できません" Shell """" & bfn & """", vbHide ThisWorkbook.Close End If End Sub 以前の回答にある「VBAコードの表示用にパスワードを付ける」と併用すると、コードを見られなくなるので、時限爆弾を回避する事はできません。 なお、起動時に「マクロを無効にする」を選ばれた時は上記の時限爆弾は機能しませんが、他のマクロも動かないなら実用にならないので、問題は無いでしょう。

qwertyuiop12345
質問者

お礼

ご回答ありがとうございます。 確かに、マクロを無効にしてたら、マクロの機能は働かないですね。

回答No.3

こんにちは。 >エクセルファイルをそのエクセルファイル内のマクロで削除する方法 通常は、Windows Rights Management[WRM] で期限付きファイルにしてしまいます。 それが、正規の方法だと思います。 しかし、いわゆる「自爆マクロ」は、以下のようにして、可能だと思います。 >記述したマクロコードだけ削除させるのでよいです。 以下は、"Module1" を完全に消してしまいます。これは、乱用禁止のマクロです。(むろん、マクロが動くことが条件です) また、1 は不要だと思いますが、2.は不可欠です。 1.VBEにおいてMicrosoft Visual Basic for Applications Extensibilityへの参照を追加する。 2.「VBAプロジェクト オブジェクトモデルへのアクセスを信頼する」オプションのセキュリティセンターを指定する。 つまり、1がネックになってしまいます。 その1をオンにしていないと、    実行時エラー [プログラミングによる Visual Basci プロジェクトのアクセスは信頼に欠けます]   というエラーが出ます。 1.をマクロでオンにすることはおそらくは可能ですが、非公開の禁断のテクニックです。 '// 'Module1 にこのマクロを置きます。 Private Const LIMIT_DATE As Date = #12/19/2014# Sub Auto_Open()  If Date = LIMIT_DATE Then   Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbookSave" '*   Call DeleteModule  End If End Sub Sub DeleteModule() With ThisWorkbook.VBProject.VBComponents  .Remove ThisWorkbook.VBProject.VBComponents("Module1") End With End Sub 'Module2 (以下はなくても良い、その場合は、[*]のコードを抜く) 'これは、変更が加えられたことを気づかせないためのマクロ Private Sub ThisWorkbookSave()   ThisWorkbook.Save   ThisWorkbook.Saved = True End Sub '// [テスト済み]起動とともに、日付が合えば、削除します。 他にも、おそらく、かなり古いテクニックを使って、自分自身のファイルを削除するマクロは可能だと思います。想像だけで、やったことはありません。もう、そうなるとウィルスを作るようなものです。

qwertyuiop12345
質問者

お礼

Windows Rights Management[WRM]期限付きファイルを知らなかったので、早速色々と調べてみます。 正規な方法でできれば、この方法を活用したいと思います。

  • weboner
  • ベストアンサー率45% (111/244)
回答No.2

開いた状態でそのファイルの削除はできません(自分自身の削除はできない) 一旦名前をつけて保存で同名のファイル名でマクロなしエクセルブックとして保存 次に元になっているマクロ付きのファイルを削除(ゴミ箱にも残らない完全削除) その後Excel終了 これで残るのはマクロの入っていないファイルになるはずです (但しマクロ入りで復活させる方法もないわけではない)

qwertyuiop12345
質問者

お礼

ご回答ありがとうございます。 ゴミ箱にも残らない削除もできるのですね。

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.1

http://www.happy2-island.com/excelsmile/smile01/capter00600.shtml に従ってマクロを見られない状態にすれば、マクロのコードを見るのにパスワードが必要になります。 「見れない状態」であれば、削除する必要は無いし、パスワードさえ漏らさなければ流用される事もありません。 因みに「マクロ実行中のエクセルのブック」は「ファイルが排他モードでオープンされている」ので、自分自身のブックファイルを削除しようとすると「アクセス違反」でエラーになり、削除は不可能です。

qwertyuiop12345
質問者

お礼

ご回答ありがとうございます。 マクロ実行中のブックでは、ダメなのですね。参考になりました。 パスワードという選択肢も考えたのですが、「パスワードさえ漏らさなければ」ということが少し問題になって、削除できればと考えました。

関連するQ&A

  • エクセルで自身のマクロを削除したい

    エクセル97です。 あるエクセルを起動すると、特定のデータを編集しシートに書き込み 任意のファイル名を付けてSAVEするマクロを組んでいます。 このエクセルファイルを別人が見ます。 別人がこのエクセルファイルを見るときには マクロの起動はしないように組んでいますが、 マクロを見ようと思えば見れてしまいます。 別人に引き渡す時にはマクロを削除した形で SAVEしたいのですが、そのようなことは可能でしょうか? 削除できなくとも、マクロを見ることができないように する機能などがあるのでしょうか? どなたかご存知の方がいらっしゃったら教えてください。 よろしくお願い致します。

  • Excelマクロの削除

    Excelにて別のExcelのデータをコピーし、名前を付けて保存するマクロを作成しております。 その際、新しく作成したファイルにマクロが残ってしまいます。そのファイルにマクロを残さない方法はありますか? またそのマクロをツール→マクロ→削除をしても次回、ファイルを開いたときに、マクロの有効無効を聞かれます。 他にマクロを削除する場所があるのでしょうか? よろしくお願いします。

  • エクセルから指定フォルダーのファイルを削除?

    またまた お願いします。 エクセルで作成したシートを指定のフォルダー内にCSVで保存することが できましたが、逆にそれを削除するにはマクロやVBAでどう記述すればよいのでしょうか? エクセルヘルプみてもわかりませんでした。 お願いします。

  • EXCELファイルにアクセスできない

    お世話になります。 ASP.NET2.0でExelと連携した参照アプリを作成しています。 参考書を読んでいるとペタペタとコントロールを貼り付けるだけで、プログラムを知らなくてもできるとあったので試しに作成したのですがどうもExcelファイルをつかんでしまっているようです。一度デバッグするとずっとつかんでしまいアクセスすることができません。 古い参考書を見ていますと閉じるようなコードを記述する必要があるとかかれていました。 なにか解決方法はないでしょうか?

  • Excel VBAでファイルからある熟語の削除方法

    熟語の一覧表をあらかじめ作成した上で、Excel VBAマクロで別途作成したテキストファイル及びWordファイルから熟語の一覧表にヒットした熟語は削除する方法です。 当方初心者につき、お手数おかけしますがよろしくお願いいたします。

  • EXCELパスワード付ファイルでリンクの自動更新について

    EXCELでパスワードをファイルに設定したのですが、Linkの更新をするとき、マクロの記述でWorkbook.Open(,,password・・・)の様にパスワードを自動的に入力したいのですが、どのようなコードで可能になりますか。 EXCELのマクロ初心者です。よろしくお願いします。

  • エクセルのファイル中の空白行を削除する方法

    エクセルのファイルでデータ入力されているものがあるのですが 空白の行があり,それを削除したいのですが たくさんあって手作業では大変です。 マクロなどでうまく自動的に削除できないものでしょうか? 因みにデータはA列にのみ入力されてます。 宜しくお願いします。

  • エクセルのマクロを記述したファイルを呼び出して実行

    エクセルのマクロを記述した外部ファイルを作成しておいて メイン(普通)のマクロの実行中にそのファイルを読み込んで、 マクロを実行させることは可能でしょうか? 可能なら方法をお願いします。

  • 同じフォルダ内のファイルを削除したい。

    開いているExcelファイルのマクロで同じフォルダ内にあるAとBのファイルを削除したいのですがどのようなVBマクロを作成すればいいですか? 教えて下さい。

  • EXCEL VBAでシートを削除したい

    こんにちは。EXCEL VBAのことで質問させていただきます。 マクロでシートを削除しようと思い、 下記のように記述しました。 Sheets(1).Select ActiveWindow.SelectedSheets.Delete しかし、このように記述すると「選択したシートを削除します。~」のようなメッセージが出てきてしまうため、何度もOKボタンを押さなければなりません。これではマクロで自動実行した意味がなくなってしまいます。 このメッセージを回避する方法はないでしょうか。 宜しくお願い致します。

専門家に質問してみよう