プロが教えるわが家の防犯対策術!

下記のマクロをご覧ください
Aフォルダにある複数のファイル【どんな種類でもOK】1回の実行で
1個つず、Bフォルダへ移動するマクロです。動きます。

このマクロにて、Aフォルダにファイルが1つも無い時に
【ファイルがありません】とメッセージが表示されるようにしたいです。

ご存じの方いましたら、宜しくお願いいたします

【AフォルダからBフォルダへファイルを1つずつ移動するマクロ】
Sub フォルダAから時系列で1つずつフォルダBへ移動する()


Dim f, fo, dt As Date, i As Long
Dim fn As String, ex As String, tmp As String
Dim pathB As String


'PDFfaxを最初に受信するフォルダを設定

Const pathA = "C:\Users\2020\Desktop\フォルダA"

'太田個人作業フォルダを設定

pathB = "C:\Users\2020\Desktop\" & ChrW(12886) & " あいうえお\フォルダA"





With CreateObject("Scripting.FileSystemObject")

If Not (.FolderExists(pathA) And .FolderExists(pathB)) Then

MsgBox "指定フォルダが存在しません"

Exit Sub

End If





dt = Now + 1

For Each f In .getfolder(pathA).Files

If f.DateLastModified < dt Then

dt = f.DateLastModified

Set fo = f

End If

Next f





If Not fo Is Nothing Then

ex = "." & .GetExtensionName(fo.Name)

fn = Left(fo.Name, Len(fo.Name) - Len(ex))

tmp = .BuildPath(pathB, fn & ex)

i = 1

While .FileExists(tmp)

i = i + 1

tmp = .BuildPath(pathB, fn & "(" & i & ")" & ex)

Wend





.MoveFile fo.Path, tmp

End If

End With





End Sub

A 回答 (4件)

フォルダの存在確認の次に



If .getfolder(pathA).Files.Count = 0 Then
  MsgBox "ファイルがありません"
  Exit Sub
End If

でよろしいのでは?
    • good
    • 3
この回答へのお礼

ありがとうございます。動きました。
ちなみに、マクロはどうやって、勉強していますか?

お礼日時:2022/08/30 07:29

連投すみません


ファイルが無い場合に無駄な処理をさせるべきでないかもしれませんね
(取得設定段階で確認するべきかな)
メイン処理前に dir 関数で調べるのが良いか・・
If Not Dir(pathA & "\*") <> "" Then MsgBox "【ファイルがありません】", , "Aフォルダ": Exit Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。大変、参考になりました。ちなみに
マクロはどうやって、勉強しましたか

お礼日時:2022/08/30 07:29

ご質問に回答していませんでした


>【ファイルがありません】とメッセージが表示されるようにしたいです。
Next fの後で確認すれば良いですが・・#1の様に変更するのでしたら
If Not fo Is Nothing Thenの否定で

.MoveFile fo.Path, tmp
Else
MsgBox "【ファイルがありません】", , "Aフォルダ"
End If
    • good
    • 0

こんにちは


>1つも無い時に 
正しく処理をしたいと言う事だと解釈しました

Dim f, fo, dt As Date, i As Long
変数 foはvariantになっていますので 無い場合 Emptyです

これを If Not fo Is Nothing Then で弾く為には
fo As Objectとすれば、そのままNot fo Is Nothingで分岐する事が出来ると思いますよ
    • good
    • 0

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