Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3946 / 13644 ツリー ←次へ | 前へ→

【59327】KILL関数って不安定なのでしょうか? 大目玉 08/12/6(土) 15:17 質問[未読]
【59328】Re:KILL関数って不安定なのでしょうか? neptune 08/12/6(土) 15:43 回答[未読]
【59334】Re:KILL関数って不安定なのでしょうか? 大目玉 08/12/6(土) 22:31 発言[未読]
【59335】Re:KILL関数って不安定なのでしょうか? neptune 08/12/6(土) 23:09 発言[未読]
【59337】Re:KILL関数って不安定なのでしょうか? 大目玉 08/12/7(日) 1:09 お礼[未読]
【59338】Re:KILL関数って不安定なのでしょうか? neptune 08/12/7(日) 9:41 回答[未読]

【59327】KILL関数って不安定なのでしょうか?
質問  大目玉  - 08/12/6(土) 15:17 -

引用なし
パスワード
   無い知恵絞ってこんなマクロを作りました。
5行目のB列からはじまるファイルパスのファイルを削除できるはずですが、実務で使っていて過去2回ほどフォルダ内のファイルが全て消えました。
そこで幾つか質問します。

1.
そもそもエクセルでのKill関数って不安定ってことはないですか?

2.
よく使うファイルパスが「C:\Files\*エクセル*」などで、フォルダ内にあるエクセルという文字を含むファイルを削除してます。間違って「**」や「*.*」になったと思ったらそうでもないようです。「*文字*」でエクセルが間違ってフォルダ内ファイルを削除することってあるのでしょうか?
他にフォルダ内ファイルが消えた理由が分かれば教えて下さい。

3.
このマクロで「**」や「*.*」によってフォルダ内ファイルが全て消えないように変えるには何を加えれば良いでしょう?

4.
必要なのは5行目のB列からはじまるファイルパスのファイルを削除することです。ファイルパスは5つのときもあれば、50や100つの時もあります。5つのときは当然にそれ以下のせるは空欄になりますが、kill関数において空欄って、フォルダ内ファイルが全て消えるとかという危険を含んでいますか?

5. 
他にアドバイスがあれば教えて下さい。


Sub 削除()
 Dim i, kFile
 i = 5
 Do While Cells(i, 2) <> ""
  On Error Resume Next
  kFile = Cells(i, 2).Value
  i = i + 1
  Kill kFile
 Loop
End Sub

【59328】Re:KILL関数って不安定なのでしょうか?
回答  neptune  - 08/12/6(土) 15:43 -

引用なし
パスワード
   ▼大目玉 さん:
こんにちは

>1.
>そもそもエクセルでのKill関数って不安定ってことはないですか?
「不安定」をどう捕らえるかも問台ですが、私はKellの不具合は聞いたことないです。
不安なら、他の方法はあるのでそれを使っては如何?Ex:fsoなど。

>2.
Dir関数などで、ワイルドカードの実験をすれば実感できるかと思います。

>3.
同上。

>5. 
>他にアドバイスがあれば教えて下さい。
4についてはUPされたソースが何をやっているかの理解をすれば
解決すると思います。

例1:
i = 5
としていて、且つDo〜Loop内でCells(i, 2)に代入も行っていない
従って
> Do While Cells(i, 2) <> ""
のCells(i, 2).valueは変化しない。

例2:
On Error Resume Next
は場合によって必要でしょうが、
作成途中に、発生するエラーの確認もせずに使用するものではない。
使用して問題ないと判断した上で使うもの。

【59334】Re:KILL関数って不安定なのでしょうか?
発言  大目玉  - 08/12/6(土) 22:31 -

引用なし
パスワード
   つまるところ、出来が良くないから消えた確立が高そうな感じですね。

どう作り直せばいいでしょうか?

【59335】Re:KILL関数って不安定なのでしょうか?
発言  neptune  - 08/12/6(土) 23:09 -

引用なし
パスワード
   ▼大目玉 さん:

>どう作り直せばいいでしょうか?
私の先のResに書いたとおり、ワイルドカードの働きを確認し、
自分の思い通りに動かすにはどうやれば良いかの手順(考え方。コードではない)
を紙に書いて考えそれをコードに起こす。

基本的にこんな所です。
自分の思い通りに作ろうと思えば最低この程度は必要です。

自分で考えてその上で判らないところは質問して下さい。

【59337】Re:KILL関数って不安定なのでしょうか?
お礼  大目玉  - 08/12/7(日) 1:09 -

引用なし
パスワード
   どうもです。

といっても「マクロの記録」の一部を直すぐらいならいざ知らず、VBAを一昼夜で学べるとは思っていません。

とりあえず、返信のあった用語等でネット検索しつつ再度作って実験してみます。

ワイルドカードの実験?は、KillもDirも試してみました。
何が検証できたのかは分かりませんでしたが。


巧くいかなくても必要な記述ですので、
最初から最後までの記述をお願いするような質問を再度するかもしれません。

どもでした。

【59338】Re:KILL関数って不安定なのでしょうか?
回答  neptune  - 08/12/7(日) 9:41 -

引用なし
パスワード
   ▼大目玉 さん:

サンプルです。動作確認はしてませんので動作保障はないです。

>必要なのは5行目のB列からはじまるファイルパスのファイルを削除することです。
>ファイルパスは5つのときもあれば、50や100つの時もあります。
>5 つのときは当然にそれ以下のせるは空欄になります
だけに着目して書いてます。

ファイルパスは正確なフルパスである前提です。
ワイルドカードは考慮してません。(どういう結果がほしいか不明なので考慮しようがない)

Sub t()
Dim i As Long
Dim ret As Long

  With Worksheets("Sheet1")
    On Error Resume Next
    i = 5
    Do Until .Cells(i, 2).Text = ""
      Kill .Cells(i, 2).Text
      If Err.Number <> 0 Then
        ret = MsgBox(Err.Number & ": " & Err.Description & vbCrLf _
            & .Cells(i, 2).Text & "の削除が正常に行われませんでした。処理を続けますか?", _
            vbYesNo Or vbQuestion, "ファイル削除エラー")
        If ret = vbNo Then Exit Do
        Err.Clear
      End If
      i = i + 1
    Loop
    On Error GoTo 0
  End With
End Sub

よければ参考にして適当に改造して下さい。

3946 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free