電子書籍の厳選無料作品が豊富!

 質問番号:2547199 にも全く同じ質問があり、回答の通り

(1)ここからここまでをモジュール1の先頭にコピー
(2)同じモジュール1の中の使いたいSubの中で DeletFile "c:\fileA"

と書き込み試してみると
『コンパイルエラー 引数の数が一致していません・・・』
というerror450が表示されます。

先の質問者さんではうまく行っているようですが、
私の場合どこがおかしいのでしょうか?

よろしくお願いします。

A 回答 (2件)

#1です。



Sub DeleteFile

End Sub
の所を

Sub DeleteFile(Target As String)
Dim SH As SHFILEOPSTRUCT, re As Long
With SH
.hwnd = Application.hwnd
.wFunc = FO_DELETE
.pFrom = Target
.fFlags = FOF_ALLOWUNDO
End With
re = SHFileOperation(SH)
If re <> 0 Then MsgBox "削除に失敗しました", vbExclamation
End Sub

と入替えてみて下さい。
    • good
    • 0
この回答へのお礼

#1さん、早速のお返事ありがとうございました。
上の通りDeleteFileの中を入れ替えるとうまく行きました!
どうも本当にありがとうございました。

 最初の内容とどう違うのか、今後のために考えました。
元々のDeleteFileでは、TargetをApplication.GetOpenFilenameで
選ぶようになっており、DeleteFile()の引数部分で指定しないように
なっているようですね。
 このあたり、APIがよく理解できていないのでうまく行かなかった
ようです。
 私の場合はエクセルSheetのセルに入っている写真ファイル名を削除
したいので引数が必要だったということのようですね。

 まだ十分理解していませんが、ともかくうまく行きましたので
これからまた勉強していきたいと思います。
 どうもありがとうございました。

お礼日時:2009/08/29 15:44

ExcelVBA ファイルを削除する


http://okwave.jp/qa2547199.html
こちらの質問でしょうか?

当方 WinXP & Excel2002 でテストした所ではきちんと出来ました。

なので環境による物かコードに不備があるのかと言う感じかと。
⇒PC環境とコードを提示されると良いかも知れません。

>DeletFile "c:\fileA"
DeleteFile eが漏れてますし、拡張子のないファイルなのでしょうか?

この回答への補足

お返事ありがとうございます。

>http://okwave.jp/qa2547199.html
>こちらの質問でしょうか?
 
 失礼しました。そうです、この質問です。
いろいろ検索しているうちにてっきりGooでの質問と勘違いしておりました。
 わざわざ見つけてくださりありがとうございました。

>当方 WinXP & Excel2002 でテストした所ではきちんと出来ました。
ということですが、最初の質問に書いてますとおり、
うまく行きません。具体的なコードを貼り付けますので
また、ご教示お願いします。

・・・・・・・・・モジュール1の先頭にコピーした部分・・・・・・・・・・・
''ごみ箱に送るためのAPI
Private Declare Function SHFileOperation Lib "shell32.dll" _
(lpFileOp As SHFILEOPSTRUCT) As Long

''SHFileOperation関数に渡すユーザー定義型
Private Type SHFILEOPSTRUCT
hwnd As Long ''ウィンドウハンドル
wFunc As Long ''実行する操作
pFrom As String ''対象ファイル名
pTo As String ''目的ファイル名
fFlags As Integer ''フラグ
fAnyOperationsAborted As Long ''結果
hNameMappings As Long ''ファイル名マッピングオブジェクト
lpszProgressTitle As String ''ダイアログのタイトル
End Type

Private Const FO_DELETE = &H3 ''削除する
Private Const FOF_ALLOWUNDO = &H40 ''ごみ箱に送る

Sub DeleteFile()
Dim SH As SHFILEOPSTRUCT, re As Long, Target As String
Target = Application.GetOpenFilename(Title:="削除するファイルを選択してください")
If Target = "False" Then Exit Sub
With SH
.hwnd = Application.hwnd
.wFunc = FO_DELETE
.pFrom = Target
.fFlags = FOF_ALLOWUNDO
End With
re = SHFileOperation(SH)
If re <> 0 Then MsgBox "削除に失敗しました", vbExclamation
End Sub
・・・・・・・・・・・・先頭部分のコピーはここまで・・・・・・・・・・・・・
・・・・・・・・・・・削除したいSubのところのコード・・・・・・・・・・
Sub 写真名削除()
Dim koumoku, delfile, sentakuaddress As String

koumoku = Cells(3, 1).Value

sentakuaddress = ActiveWindow.RangeSelection.Address
delfile = Range(sentakuaddress).Text ←削除したい写真のファイル名(JPG部分はここでは有りません)

'選択ファイル写真の削除
'Kill "C:\データ\写真\" & koumoku & "\" & delfile & ".JPG"

DeleteFile "C:\データ\写真\" & koumoku & "\" & delfile & ".JPG"

End Sub
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
 以上です。Sub中にも書いてますが、
Kill でやるとエラーが出ず削除できます。

>DeleteFile eが漏れてますし、拡張子のないファイルなのでしょうか?
 すみませんでした、質問のところでは直接打ち込んだのでeが抜けていました。拡張子はDeleteFileのところではつけています。

環境はエクセル2003、XPです。
恐れ入りますが、またよろしくお願いします。

補足日時:2009/08/29 13:36
    • good
    • 0

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