VBAでshell関数を利用してXCOPYを実行し、テキストファイルにその実行結果を出力しています。
しかし、結果には
D:\>xcopy D:\test\ssss.txt D:\test2
ファイルが見つかりません - ssss.txt
0 個のファイルをコピーしました
もしくは
D:\>xcopy D:\test\sssss.txt D:\test2
D:\test\sssss.txt
1 個のファイルをコピーしました
というDOS画面で表示される内容が出力されているだけです。
ここでコピーに失敗している(0個のファイルをコピーしました)ファイル名だけを取得することは可能でしょうか?
色々サイトを検索してみましたが、答えが見つかりません。
恐れ入りますが、どなたかご存知の方がいらっしゃいましたらご教示ください。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
ええと、テキストファイル中のファイル名を取り出す方法ですよね?
ファイル名に「-」を含んだ物がないと言う前提ですが、テキストファイルをExcelで開いて、データの区切り位置を「-」にするとB列にコピーできなかったファイル名が出ますがそれでは駄目ですか?
マクロでやるなら↓こんな感じでしょうか。
取り出したファイル名をSheet1のA列に貼り付けてます。
Sub Sample()
Workbooks.OpenText Filename:="C:\log.txt", Other:=True, OtherChar:="-"
Columns("B:B").Copy
ThisWorkbook.Activate
Sheets("Sheet1").Columns("A:A").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("log.txt").Close
End Sub
ファイルにアクセス出来ない為にコピーに失敗した場合などは別の内容になりますので、違う方法が必要になります。
ありがとうございます。
大変参考になりました。確かにコピーできなかったファイル名には区切り文字"-"があります。気づかなかった・・・。
この方法で試してみます。
ありがとうございました。
No.2
- 回答日時:
こんにちは。
例えば、Dir関数 で、コピー先を調べるという方法は、思いつくのかもしれませんが、こちらで試してみると、一旦、Shell の子プロに出てxcopy を実行するので、そのスピードとはマッチしないので、コピーが成功しても、誤認識して、ファイルが見当たらないと出てしまいました。
以下のように、コマンドプロンプトの 戻り値(ErrorLevel) を取る方法はあります。
命令 ="xcopy D:\test\ssss.txt D:\test2"
ExecCmd 命令, Ret
MsgBox Ret
'--------------------------------
Function ExecCmd(sCmd As String, Ret As String) _
As Boolean
Dim objShell As Object
Dim objExec As Object
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("%ComSpec% /c " & sCmd)
Do Until objExec.Status: DoEvents: Loop
If Not objExec.StdErr.AtEndOfStream Then
ExecCmd = True
Ret = objExec.StdErr.ReadAll
ElseIf Not objExec.StdOut.AtEndOfStream Then
Ret = objExec.StdOut.ReadAll
End If
Set objExec = Nothing
Set objShell = Nothing
End Function
ただ、こういう方法は、VB/VBAの範囲ではありません。
VB なら、FileCopy などがありますから、それを使えばよいと思います。
確かに、FileCopy を利用すれば、簡単に結果を取得することも出来ますね。。
ご提示いただいた内容で一度試して見ます。
ひとまず、お礼まで。
ありがとうございました。
No.1
- 回答日時:
>D:\>xcopy D:\test\ssss.txt D:\test2
>ファイルが見つかりません - ssss.txt
>0 個のファイルをコピーしました
では、ssss.text が見つからないので「0個」と表示されているのですよね?
ということは、「ない」ファイル名を取得することは出来ないのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
frxファイルの役目
-
エクセルのハイパーリンクがコ...
-
[エクセル]コピーするとオブジ...
-
Vba初心者です。下記のコード助...
-
バッチファイル 別ファイルにリ...
-
C言語について教えて欲しいです...
-
vbsでファイルやフォルダのコピ...
-
DOSコマンドのコピー完了判定
-
VBSでExcelシートのコピー
-
アクセス クエリを別のファイ...
-
bat 同名ファイルコピー時にリ...
-
バッチファイル XCOPYで上書き...
-
Runtime.exec()について
-
エクセルの保護ビューについて
-
Excelのマクロについて教えてく...
-
エクセル2010、図が大きすぎま...
-
Excel VBAで値コピーが使用でき...
-
コマンドプロンプトで、指定し...
-
FTPとファイルコピーの違いにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
バッチファイル XCOPYで上書き...
-
frxファイルの役目
-
エクセルVBAで開いているファイ...
-
エクセルのハイパーリンクがコ...
-
[エクセル]コピーするとオブジ...
-
バッチファイル 別ファイルにリ...
-
Vba初心者です。下記のコード助...
-
ファイルサーバ上のファイルが...
-
Gitについて質問。 クローンし...
-
エクセル2010、図が大きすぎま...
-
バッチファイルのコピーで
-
現在のブックを閉じないで、マ...
-
エクセルのマクロについて教え...
-
vbsでExcelのシートをコピーす...
-
同じファイル名 上書きしないフ...
-
アクセス クエリを別のファイ...
-
マインクラフトPCをプレイしよ...
-
xcopyでのバッチコピー方法でコ...
-
開いている別のファイルにExcel...
おすすめ情報