過去ログ

                                Page     256
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼自分自身の削除の方法?  カド 02/9/9(月) 16:38
   ┗Re:自分自身の削除の方法?  コロスケ 02/9/9(月) 17:14
      ┣Re:自分自身の削除の方法?  カド 02/9/9(月) 17:24
      ┗Re:自分自身の削除の方法?  カド 02/9/9(月) 17:35
         ┗Re:自分自身の削除の方法?  コロスケ 02/9/9(月) 18:03
            ┣Re:自分自身の削除の方法?  カド 02/9/9(月) 18:54
            ┃  ┗Re:自分自身の削除の方法?  コロスケ 02/9/10(火) 19:38
            ┗Re:自分自身の削除の方法?  カド 02/10/24(木) 13:27
               ┗Re:自分自身の削除の方法?  コロスケ 02/10/24(木) 16:59
                  ┗Re:自分自身の削除の方法?  カド 02/10/25(金) 10:15
                     ┗Re:自分自身の削除の方法?  コロスケ 02/10/25(金) 13:53

 ───────────────────────────────────────
 ■題名 : 自分自身の削除の方法?
 ■名前 : カド
 ■日付 : 02/9/9(月) 16:38
 -------------------------------------------------------------------------
   ダウンロードしたアドイン ファイルで名前を変えたら、ファイルそのものが消えてなくなりました。
どうやら名前を変えると自分自身を削除するプログラムが書かれているようです。

どうしたらそんな凄いことが出来るのでしょうか?非常に興味があって知りたいです。

ネットで調べたら、DOSを使えばできるとありましたが、その方法だと実施後にDOSのショートカットが出来てしまうのでスマートな感じがしません。

今一番知りたいことです。どうか教えてください。
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : コロスケ <corosuke@chan.co.jp>  ■日付 : 02/9/9(月) 17:14  -------------------------------------------------------------------------
   ▼カド さん:

ファイル操作はあんまり得意じゃないし、名前を変えた瞬間に削除する方法はわかりませんが、
どなたか、凄い方の登場までの時間つぶしにでもどうぞ...。

ファイルをオープンした時点でMyAddin.xlaという名前じゃない場合は自分を削除します。
こんなことじゃないですよね...? 

'// 以下 ThisWorkbookモジュールに記載

Private Sub Workbook_Open()
If ThisWorkbook.Name <> "MyAddin.xla" Then Call 自殺
End Sub

Private Sub 自殺()
  Dim intCnt As Integer
  With ThisWorkbook
    .Save
    For intCnt = 1 To Application.RecentFiles.Count
      If Application.RecentFiles(intCnt).Path = .FullName Then
        Application.RecentFiles(intCnt).Delete
        Exit For
      End If
    Next
    .ChangeFileAccess Mode:=xlReadOnly
    Kill .FullName
    .Close SaveChanges:=False
  End With
End Sub
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : カド  ■日付 : 02/9/9(月) 17:24  -------------------------------------------------------------------------
   ▼コロスケ さん:

まさにこんなことです。
なんとすばらしい。

しかも質問に対するこのレスポンスの速さ!!

土日ネットを探し回ったのはいったい何だったのでしょう。

本当に有難う御座います。
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : カド  ■日付 : 02/9/9(月) 17:35  -------------------------------------------------------------------------
   ▼コロスケ さん:
さっきは感動のあまり急いでお礼の返信をしましたが、
よくよく考えると、どうして開いている自分自身を削除することが出来るのですか?

良かったら解説してほしいのですが。
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : コロスケ <corosuke@chan.co.jp>  ■日付 : 02/9/9(月) 18:03  -------------------------------------------------------------------------
   ▼カド さん:

こんにちは。

ファイルの削除はKillステートメントでできるのですが、開いているブックで行うと、
--------------------------------------------------------------------------------
Run-time error '70':
Permission denied
というエラーがでます。
(すいません、今日本語版がないので...日本語版ではたぶん 書き込みエラーかなにか...)
--------------------------------------------------------------------------------

.ChangeFileAccess Mode:=xlReadOnly 
で一旦、読み取り専用モードにしてやることで削除が可能になります。

説明が下手なので上手くいえませんが、逆に読み取り専用ファイルを
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
でファイル属性を変更すると、次のようなメッセージが出ます。

--------------------------------------------------------------------------------
Book1.xls is locked for editing by another user'.
Click 'Notify' to open a read-only copy of the document and receive notification
when the document is no longer in Use.

他のユーザーによって編集中なので"お知らせ"ボタンを押しておくと、ファイルが保存された
時に編集可能のメッセージを出します...。みたいなメッセージが出るはずです。
--------------------------------------------------------------------------------

つまり、読み取り専用モードにしてやることで、保存されているブックと、現在開いているブックが
違うブックだよーとエクセルに認識させてやるわけです。(たぶん...)

おわかりになりましたでしょうか?(多分この説明ではムリそうですが...)

Application.RecentFilesの部分は、最近使ったファイルから履歴を消しているだけです。

説明が違ってたら、どなたかフォローお願いします。m(__)m ではー♪
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : カド  ■日付 : 02/9/9(月) 18:54  -------------------------------------------------------------------------
   ▼コロスケ さん:
もう今家に帰って夕食を済ませ、ビールを飲みながら書いています。
本当に解説までしていただきありがとうございます。

久々にいい事があって、幸せな気分です。

コロスケさんは一体どんな人なのでしょう。
プログラムを仕事にしている人ですか?そうでなかったら、どうやってプログラムを習得しているのですか?

自分の妹の子供のころのあだ名がゴロスケだったことも、偶然とは思えない気持ちです。

また、どうしても知りたい疑問があったら投稿します。
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : コロスケ <corosuke@chan.co.jp>  ■日付 : 02/9/10(火) 19:38  -------------------------------------------------------------------------
   ▼カド さん:
解決してよかったです。

>コロスケさんは一体どんな人なのでしょう。
>プログラムを仕事にしている人ですか?そうでなかったら、どうやってプログラムを習得しているのですか?
プログラマではありません。プログラムは素人です(笑)
社内のコンピュータシステムの管理が本職です。

ではー♪ またお会いしましょう。
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : カド  ■日付 : 02/10/24(木) 13:27  -------------------------------------------------------------------------
   ▼コロスケ さん または どなたか親切な人へ

昔の質問を蒸し返して恐縮ですが、読み取り専用にすると削除できるのは、一種のバグ?のような気がします。バグではないにしても、何か今ひとつスマートな感じがしません。
もっと別の方法はないのでしょうか?

コロスケさんの回答が良い悪いというわけではないので気分を害さないで下さい。
最初はすごく感動しました。でも時間がたつともっと別な方法があるんじゃないかと欲が出ました。おねがいします。
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : コロスケ <corosuke@chan.co.jp>  ■日付 : 02/10/24(木) 16:59  ■Web : http://www.interq.or.jp/sun/puremis/colo/  -------------------------------------------------------------------------
   >コロスケ さん
はいはーい。久しぶりにフラット立ち寄るとカドさんが..。お久しぶりです。

>何か今ひとつスマートな感じがしません。
全然気分は害していないので誤解しないで下さい。
このコードは結構スマートなほうじゃないかなぁと思ってました。
前に考えたことのあるコードで下記のようなものがあります。
一旦別ブックを作成し、モジュールをインポートして実行させて、実行後にモジュールを削除するものです。

これはもっとスマートじゃありませんが一応別の方法と言うことでアップしておきます。

PS.私ももっとスマートなコードがあれば知りたいので一緒に回答をお待ちしましょう!
ではー♪

Sub Suicide2()
  Dim NB As Object
  Set NB = Workbooks.Add
  With Application
    .DisplayAlerts = False
    With ThisWorkbook
      Open .Path & "\xx.bas" For Output As #1
      Print #1, "Sub Temp"
      Print #1, "Workbooks(" & """" & .Name & """" & ").Close False"
      Print #1, "Kill " & """" & .Path & "\" & .Name & """"
      Print #1, "Kill " & """" & .Path & "\xx.bas" & """"
      Print #1, "ThisWorkbook.Close False"
      Print #1, "End Sub"
      Close #1
      NB.VBProject.VBComponents.Import Filename:=.Path & "\xx.bas"
    End With
    .OnTime Now(), NB.Name & "!Temp"
    .DisplayAlerts = True
  End With
End Sub
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : カド  ■日付 : 02/10/25(金) 10:15  -------------------------------------------------------------------------
   ▼コロスケ さん。こんにちわ〜

>はいはーい。久しぶりにフラット立ち寄るとカドさんが..。お久しぶりです。

ちょうど質問したばかりの所にコロスケさんが寄ってくれてちょ〜ラッキーでした。
な〜んだちゃんと別の答えも知ってたんだ〜。
これですよこれ。この答えを期待していました。

なにをもってスマートと言うかは別として、こっちの方が正攻法じゃないのかと思います。アンインストーラーが自分自身を削除する方法もこれじゃないのかなあ?

前にも質問したけどどうやって勉強してるんですか?
そういう私もVBAの本を持っているわけでもなく、好きでいろいろ見てるだけで結構出来るようになりましたが。

あとコロスケさんのホームページだけどどうして英語なんだ〜。
非常に興味があるのに読めません。ガッカリです。

それでは、また〜。
 ───────────────────────────────────────  ■題名 : Re:自分自身の削除の方法?  ■名前 : コロスケ <corosuke@chan.co.jp>  ■日付 : 02/10/25(金) 13:53  ■Web : http://www.interq.or.jp/sun/puremis/colo/  -------------------------------------------------------------------------
   こんにちは。
>前にも質問したけどどうやって勉強してるんですか?
お答えしてなくてすいません。m(__)m
では、お答えします。私の単なる意見なので「そんなんじゃ、ダメダー!」と思うときは
反論せずにそぉーっとしておいてください(笑)
VBAの本は1冊だけ古いやつを持っています。あとは、Helpとネットサーフィンで勉強してます。
私が一番いいと思っている勉強方法はQAサイトの回答をすることです。
質問されている内容で、結構自分が知りたい内容と重複していることは
ありませんか?そんなときにHELPを読んだり、いろいろ調べたりしてチャレンジしてみると身につくと
思います。また同じスレッドに他の回答者の方がレスをつけてくださるときには、他の解き方を見ることが
できますんで非常に勉強になります。

そんなところでしょうか...。
ではー♪
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 256