Excel VBA質問箱 IV

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

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


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

【21341】フォルダ内の .txtファイルを全て削除したい VBAトーシロ 05/1/19(水) 15:14 質問[未読]
【21343】Re:フォルダ内の .txtファイルを全て削除... G-Luck 05/1/19(水) 15:29 回答[未読]
【21344】Re:フォルダ内の .txtファイルを全て削除... Jaka 05/1/19(水) 15:36 回答[未読]
【21354】Re:フォルダ内の .txtファイルを全て削除... VBAトーシロ 05/1/19(水) 21:58 発言[未読]
【21370】Re:フォルダ内の .txtファイルを全て削除... G-Luck 05/1/20(木) 9:39 回答[未読]
【21417】Re:フォルダ内の .txtファイルを全て削除... VBAトーシロ 05/1/20(木) 21:23 お礼[未読]
【21356】Re:フォルダ内の .txtファイルを全て削除... りすりす 05/1/19(水) 22:30 発言[未読]
【21364】ゴミ箱へ Re:フォルダ内の .txtファイルを... りすりす 05/1/20(木) 0:10 発言[未読]
【21360】Re:フォルダ内の .txtファイルを全て削除... [名前なし] 05/1/19(水) 23:13 回答[未読]
【21362】Re:フォルダ内の .txtファイルを全て削除... りすりす 05/1/19(水) 23:28 発言[未読]
【21363】Re:フォルダ内の .txtファイルを全て削除... ちゃっぴ 05/1/19(水) 23:47 回答[未読]
【21368】Re:フォルダ内の .txtファイルを全て削除... ichinose 05/1/20(木) 8:44 発言[未読]
【21369】Re:フォルダ内の .txtファイルを全て削除... Jaka 05/1/20(木) 9:10 回答[未読]
【21422】Re:フォルダ内の .txtファイルを全て削除... りすりす 05/1/20(木) 22:10 回答[未読]

【21341】フォルダ内の .txtファイルを全て削除し...
質問  VBAトーシロ  - 05/1/19(水) 15:14 -

引用なし
パスワード
   マクロを実行するエクセルファイルの
同一ディレクトリ内の全ての .txtファイルを
削除する方法を教えてください。

ファイル名が分かっていれば
kill で削除できるようですが、

該当テキストファイル全てに対し処理
する場合の方法を教えてください。

【21343】Re:フォルダ内の .txtファイルを全て削...
回答  G-Luck  - 05/1/19(水) 15:29 -

引用なし
パスワード
   Dir("*.txt")で,ひとつずつ消していくのではどうでしょうか?
※Dirについては、Helpを参照してください。

【21344】Re:フォルダ内の .txtファイルを全て削...
回答  Jaka  - 05/1/19(水) 15:36 -

引用なし
パスワード
   こんにちは。

DOS版です。
pas(対象フォルダのパス)は、直してね。

Dim DfDr As String, ComL As String, pas As String
DfDr = CurDir()
pas = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\aaa"
ChDir pas
ComL = "COMMAND.COM /C del *.txt"
Call Shell(ComL, vbHide)
ChDir DfDr
DoEvents

【21354】Re:フォルダ内の .txtファイルを全て削...
発言  VBAトーシロ  - 05/1/19(水) 21:58 -

引用なし
パスワード
   G-Luck : さん

レスありがとうございます。
dirについては、txtがある限り消すという方法?
やってみます。

Do Until Dir(ThisWorkbook.Path & "\" & "*.txt") <> ""
  Kill Dir(ThisWorkbook.Path & "\" & "*.txt")
Loop

とやってみましたがダメでした・・・。
どうすればいいのでしょうか?

▼Jaka さん:
すいません・・。まだまだ私には難しすぎました・・・。
(すごすぎる・・・) 
>こんにちは。
>
>DOS版です。
>pas(対象フォルダのパス)は、直してね。
>
>Dim DfDr As String, ComL As String, pas As String
>DfDr = CurDir()
>pas = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\aaa"
>ChDir pas
>ComL = "COMMAND.COM /C del *.txt"
>Call Shell(ComL, vbHide)
>ChDir DfDr
>DoEvents

【21356】Re:フォルダ内の .txtファイルを全て削...
発言  りすりす  - 05/1/19(水) 22:30 -

引用なし
パスワード
   Private Sub CommandButton1_Click()
 Dim fs As Object
 Dim Path, FileFullPathName As String
 
 Path = ThisWorkbook.Path
 If Len(Path) = 0 Then Exit Sub
 If (Mid(Path, Len(Path), 1) <> "\") Then Path = Path + "\"
 
 Set fs = CreateObject("Scripting.FileSystemObject")
 If Not fs.FolderExists(Path) Then Exit Sub
 ' ここから削除
 FileFullPathName = Path + "*.txt"
 fs.DeleteFile (FileFullPathName)
End Sub

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp


SHFileOperation を使うとゴミ箱へ移動できます。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shfileoperation.asp

ゴミ箱へ移動、作っていますので、できたら追加でアップしますね。


▼VBAトーシロ さん:
>マクロを実行するエクセルファイルの
>同一ディレクトリ内の全ての .txtファイルを
>削除する方法を教えてください。
>
>ファイル名が分かっていれば
>kill で削除できるようですが、
>
>該当テキストファイル全てに対し処理
>する場合の方法を教えてください。

【21360】Re:フォルダ内の .txtファイルを全て削...
回答  [名前なし]  - 05/1/19(水) 23:13 -

引用なし
パスワード
   ▼VBAトーシロ さん:

Kill ThisWorkbook.Path & "\*.txt"

だけでできませんか?

【21362】Re:フォルダ内の .txtファイルを全て削...
発言  りすりす  - 05/1/19(水) 23:28 -

引用なし
パスワード
   ▼[名前なし] さん:
>▼VBAトーシロ さん:
>
>Kill ThisWorkbook.Path & "\*.txt"
>
>だけでできませんか?

そうですね。
だけど、正確につくるのなら。

ルートドライブにファイルをおいた場合は、はじめから
\がついているので
たとえば例外があって、c:\
だと
c:\\になるので、
最後が\でないなら付けるという条件処置がいります。


おまじないに
あと完全に未保存だと
ThisWorkbook.Path
は空文字なので その対応も書く必要があります。
(一度でも保存したら必ず入ってますけどね(^_^))

【21363】Re:フォルダ内の .txtファイルを全て削...
回答  ちゃっぴ  - 05/1/19(水) 23:47 -

引用なし
パスワード
   >>Kill ThisWorkbook.Path & "\*.txt"
>>
>>だけでできませんか?

ですと、VBA の FileSystem Class なので、ANSI処理で
256ByteのPath長制限を受けます。

Explorer で扱えるPath長は260文字ですので、
2Byte文字が大量に含まれるFileは削除できずに
Errorになる可能性があります。

Scipting.FileSystemObject を使用してやるか、
API(Unicode版がより望ましい)の使用が適切でしょう。

【21364】ゴミ箱へ Re:フォルダ内の .txtファイル...
発言  りすりす  - 05/1/20(木) 0:10 -

引用なし
パスワード
   ▼りすりす さん:
>ゴミ箱へ移動、作っていますので、できたら追加でアップしますね。

使い方、
SendToRecycleBin (FullFileName)

' こいつで消すと
' メニュー元に戻すが機能しない
' ゴミ箱で選択して右クリックメニューで元に戻すはできる
' 普通になにかファイルを削除をすると メニューでも選択できるみたい。
' この辺は謎です。


' SHFileOpStruct Module

Type SHFileOpStruct
   hWnd         As Long
   wFunc         As Long
   pFrom         As String
   pTo          As String
   fFlags        As Long
   fAnyOperationsAborted As Long
   hNameMappings     As Long
   lpszProgressTitle   As String
End Type
  
Const FO_MOVE = &H1
Const FO_COPY = &H2
Const FO_DELETE = &H3
Const FO_RENAME = &H4
Const FOF_MULTIDESTFILES = &H1
Const FOF_CONFIRMMOUSE = &H2
Const FOF_SILENT = &H4
Const FOF_RENAMEONCOLLISION = &H8
Const FOF_NOCONFIRMATION = &H10
Const FOF_WANTMAPPINGHANDLE = &H20
Const FOF_ALLOWUNDO = &H40
Const FOF_FILESONLY = &H80
Const FOF_SIMPLEPROGRESS = &H100
Const FOF_NOCONFIRMMKDIR = &H200
Const FOF_NOERRORUI = &H400
 
Declare Function SHFileOperation Lib "shell32" _
    Alias "SHFileOperationA" _
    (lpFileOp As SHFileOpStruct) As Long

Declare Function GetActiveWindow Lib "user32" () As Long

Public Sub SendToRecycleBin(ByVal FileName As String)
 Dim SHF As SHFileOpStruct
 With SHF
   .hWnd = GetActiveWindow
   .wFunc = FO_DELETE ' 削除する
   .pFrom = FileName
  ' .fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION ' ゴミ箱へ:確認なし
   .fFlags = FOF_ALLOWUNDO + FOF_SILENT ' ゴミ箱へ:確認付き
   .lpszProgressTitle = String(1, vbNull)
   .pTo = String(1, vbNull)
 End With
 Call SHFileOperation(SHF)
End Sub

【21368】Re:フォルダ内の .txtファイルを全て削...
発言  ichinose  - 05/1/20(木) 8:44 -

引用なし
パスワード
   ▼りすりす さん、皆さん、おはようございます。

>>
>>Kill ThisWorkbook.Path & "\*.txt"
>>
>>だけでできませんか?
>
>そうですね。
>だけど、正確につくるのなら。
>
>ルートドライブにファイルをおいた場合は、はじめから
>\がついているので
>たとえば例外があって、c:\
>だと
>c:\\になるので、
>最後が\でないなら付けるという条件処置がいります。

ん?ルートドライブでも Thisworkbook.Pathは、"c:"と入りますが・・・。
全部のバージョンでは確認していませんが、
Win98+Excel2000
Win2000+EXCEL2002では上記の結果は得られています。

Thisworkbook.Path & "\・・・"
と言う記述はいろんなコードで行っているので
バージョンによって結果が違うのなら、
これは 豪いこっちゃなんですが・・・。

【21369】Re:フォルダ内の .txtファイルを全て削...
回答  Jaka  - 05/1/20(木) 9:10 -

引用なし
パスワード
   ichinose さん 久しぶりです。
ごちゃごちゃになっているのでここにつけます。

とりあえずご要望のDir()版です。

Sub TTTT()
  foldnm = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\aaa\"
  FilNm = Dir(foldnm)
  Do Until FilNm = ""
    If FilNm Like "*.txt" Then
     Kill foldnm & FilNm
    End If
    FilNm = Dir()
  Loop
End Sub

【21370】Re:フォルダ内の .txtファイルを全て削...
回答  G-Luck  - 05/1/20(木) 9:39 -

引用なし
パスワード
   ▼VBAトーシロ さん:
>Do Until Dir(ThisWorkbook.Path & "\" & "*.txt") <> ""
>  Kill Dir(ThisWorkbook.Path & "\" & "*.txt")
>Loop
>
>とやってみましたがダメでした・・・。
>どうすればいいのでしょうか?

Dir(ThisWorkbook.Path & "\" & "*.txt")
では、ファイル名しか取得できないようです。
さらに Kill は現在のフォルダを対称にするようで、
ChDir で現在のフォルダを変更するか、フォルダも指定する必要があるようです。以下に二つの例を示します。
あと、同じ条件でファイルを検索する場合、
Fn = Dir
とすることもできますよ。
ほかの方の方法が、確実で速そうですが。

Private Sub TxtDelete()
  Dim Fn As String
  
  Do
    Fn = Dir(ThisWorkbook.Path & "\" & "*.txt")
    If Fn <> "" Then
      Kill ThisWorkbook.Path & "\" & Fn
    Else
      Exit Do
    End If
  Loop
End Sub

Private Sub TxtDelete()
  Dim Fn As String
  
  ChDir ThisWorkbook.Path
  
  Do
    Fn = Dir("*.txt")
    If Fn <> "" Then
      Kill Fn
    Else
      Exit Do
    End If
  Loop
End Sub

【21417】Re:フォルダ内の .txtファイルを全て削...
お礼  VBAトーシロ  - 05/1/20(木) 21:23 -

引用なし
パスワード
   あっすいません。少し見ないうちにたくさん
回答ありがとうございます。
>
>Private Sub TxtDelete()
>  Dim Fn As String
>  
>  Do
>    Fn = Dir(ThisWorkbook.Path & "\" & "*.txt")
>    If Fn <> "" Then
>      Kill ThisWorkbook.Path & "\" & Fn
>    Else
>      Exit Do
>    End If
>  Loop
>End Sub
を利用させていただきます。(他のは難しすぎて・・・・)

早くみなさんのようなエキスパートになれるようがんばります。
(この調子だといったい、いつになるのやら・・・)
これからもよろしくお願いいたします。

【21422】Re:フォルダ内の .txtファイルを全て削...
回答  りすりす  - 05/1/20(木) 22:10 -

引用なし
パスワード
   ▼ichinose さん:
>ん?ルートドライブでも Thisworkbook.Pathは、"c:"と入りますが・・・。
>全部のバージョンでは確認していませんが、
>Win98+Excel2000
>Win2000+EXCEL2002では上記の結果は得られています。
>
>Thisworkbook.Path & "\・・・"
>と言う記述はいろんなコードで行っているので
>バージョンによって結果が違うのなら、
>これは 豪いこっちゃなんですが・・・。


あれれ、ほんと とれてますね・・・(^_^;)
じゃ いきなり¥ つけちゃって ことで。

普通のソフトの開発環境で、ルート呼び出すとついているんですよぉ ¥
GetCurrentDirectory なんか必ず・・・

Thisworkbook.Path はとってくれていたんですね・・・。

・・・(((∂。∂)

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