質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1197閲覧

vbaでexcelのセル指定のフォルダ内のxlsxファイルを消去したい……

ma2hiro

総合スコア159

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/11/29 05:16

お世話になっております。
初心者の質問失礼いたします。

今現在 前任者のexcelをメンテナンスしています。

VBA

1Sub deleteFile_Click() 2 Dim copyDirFiles As String 3 copyDirFiles = Range("B3").Value & "*.xlsx" 4 With CreateObject("Scripting.FileSystemObject") 5 If .FileExists(copyDirFiles) Then 6 .DeleteFile copyDirFiles 7 End If 8 End With 9End Sub

というVBAがふと気がつくと動作しなくなったのです……

このVBAがあるexcelのB3には
\192.168.2.79\gyoumu\200_事業\来期ファイル格納
とちゃんと値があるのです……

どういう語句で調べれば良いのかご助力頂けないでしょうか?
”Scripting.FileSystemObject”やら”VBA ファイル削除”などで調べたのですが
それっぽい情報にHITしなかったのです……

お忙しい所大変申し訳ないのですが何か情報をお持ちな方はコメント頂けますと嬉しく思います。

どういう語句で調べれば良いのかご助力頂けないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/11/29 05:33 編集

[2. 質問をする前に自分で何がわからないのかを把握しましょう] https://teratail.com/help/question-tips#questionTips2 > 人に質問をするには、自分が何を尋ねたいかを知っている必要があります。 > これは、「自分が今『何がわからないのか』がわかっていて、言語化できている」ということです。 > 一見簡単なようですが、実はとても難しいことです。 動作しなくなった、とは何が動作しなくなったんですか? エラーは発生しているんですか? それぞれの処理を一行づつ実行させた場合、どこまで正しく動作しているんですか? 変数の値はどうなっていたんですか? 体調が悪い、だけで病気を診断できる医者は居ません。 自分の言葉で、自分で考えて他人に判るように質問に追記して説明してください。
退会済みユーザー

退会済みユーザー

2021/11/29 05:45 編集

少なくとも、今質問に記載されている ”Scripting.FileSystemObject”や”VBA ファイル削除” であなたの言う「それっぽい情報」は出てくる筈ですが。出てきた情報を自分で実際に試してみて、ファイルが実際に削除されるかどうかくらいは試す事が出来るでしょう。何を調べて、何を試して、試した結果がどうだったかすら書かれていないのでは、こいつ何も調べてないなと判断するしかないのです。
ma2hiro

2021/11/29 05:46

なるほど仰る通りですね…… もうちょっとまとめます。 大変失礼しました。
bebebe_

2021/11/29 06:40

ステップインは使用されていますか? 1行ずつ動作してみると「.DeleteFile copyDirFiles」の行は実行されていません。 なぜ実行されていないかというと「If .FileExists(copyDirFiles) Then」がFalseになるからです。 となると「copyDirFiles」に問題がある可能性が高いので「Range("B3").Value & "\*.xlsx"」 に原因があるのでは無いかと予想されます。 とすると試しに「Range("B3").Value」だけにしてB3にファイル名まで含めたパスを入力して試すなどすれば答えに近づいてくるのではと思います。
ma2hiro

2021/11/29 06:54

bebebe_ 様 ありがとうございます。 仰るように copyDirFiles = Range("B3").Value としてB3に \\192.168.2.7\gyoumu\事業管理\来期ファイル格納\*.xlsx としてみたのですが駄目でした…… With CreateObject("Scripting.FileSystemObject") If .FileExists(copyDirFiles) Then にて  ↑がFalseとなるので.FileExistsにて 見つけようとしているファイル名もあるのになんでか迷っております…… もう少し調査してみます。 コメントありがとうございました。
ma2hiro

2021/11/29 07:11

hatena19様 ありがとうございます。 >FileSystemObjectを利用した方がよいでしょう。 と記載があるので With CreateObject("Scripting.FileSystemObject") にて使用しているつもりなのです…… 何か私は基本的な事が抜けている気がしますがもう少し調べてみます。 コメントありがとうございました。
bebebe_

2021/11/29 07:31 編集

*の意味は理解されていますか? >単純にファイルの存在をチェックする場合はワイルドカードが指定できるDir関数を利用した方がよいです。 >FileSystemObjectのFileExists関数はワイルドカードは指定できず固定ファイル名しか判定できません。 B3に\\192.168.2.7\gyoumu\事業管理\来期ファイル格納\*.xlsxではなく実際に削除してもいいファル名にしてその名前のファイルを置いて試してみると原因が特定できると思います。
hatena19

2021/11/29 07:48

> どういう語句で調べれば良いのかご助力頂けないでしょうか? 「ワイルドカード」の意味を調べてみてください。それが理解できたら、 「VBA 削除 ワイルドカード」で検索するとご希望の情報がヒットするでしょう。
guest

回答1

0

ベストアンサー

FileExistsはワイルドカードが使えないが、
DeleteFileメソッドはワイルドカードが使えるので、
そもそもFileExistsは必要ない。

vba

1Sub deleteFile_Click() 2 Dim copyDirFiles As String 3 copyDirFiles = Range("B3").Value & "*.xlsx" 4 With CreateObject("Scripting.FileSystemObject") 5 .DeleteFile copyDirFiles 6 End With 7End Sub

質問のコードが以前は動いていたというのはありえない。

投稿2021/11/29 12:53

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ma2hiro

2021/11/30 00:41

hatena19様 コメントありがとうございます。 >FileExistsはワイルドカードが使えないが、 >DeleteFileメソッドはワイルドカードが使えるので、 >そもそもFileExistsは必要ない。 との情報ありがとうございます。 以前は動作していたとの私の記憶は勘違いだった模様ですね…… コメントありがとうございました。
退会済みユーザー

退会済みユーザー

2021/11/30 01:30 編集

貰った回答を書き写して、動いたからOK、で終わらせず、ドキュメントでオブジェクトとメソッドの仕様をきちんと確認し、理解しましょう。 https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/filesystemobject-object メソッドの説明見れば、ワイルドカード文字使用可能かどうかも書いてありますよね。 追記修正依頼欄で指摘した事も質問に全く反映されていませんし、調べ方以前に論理的思考・問題解決に取り組む姿勢そのものに問題があると思います。会話のキャッチボールも全く成り立ってないですよね。
退会済みユーザー

退会済みユーザー

2021/11/30 01:54 編集

まさかページ左のメニューから使用するメソッドを選択する事すら出来ない、とは言わないですよね? [DeleteFile メソッド] https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/deletefile-method > filespec 必須。 削除するファイルの名前です。 最後のパス コンポーネントではワイルドカード文字を使用できます。 家電を買ってきたら、普通はマニュアルは読んでどんな機能があるか確認するでしょう。 知らないオブジェクトや関数を見たら、まず始めにドキュメントで機能を確認する、というのを当たり前にする習慣をつけてください。 そして、もしドキュメントの記述が不足していたり、判り難かった場合はここでgoogleを駆使してサンプル・使用例を探したりしましょう。実際に小さいサンプルプログラムを書いてデバッグすれば、すぐ判りますよね。
ma2hiro

2021/11/30 01:55

ありがとうございました。 マニュアルの見方が不勉強なためお手数おかけして申し訳ございませんでした。 ちなみにFileExistsには https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/fileexists-method ワイルドカード云々と書いていないため ワイルドカードは使用出来ないとの理解でよろしいのでしょうか? VBAのマニュアル読み解けるようにします。 コメントありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問