プロが教える店舗&オフィスのセキュリティ対策術

【やりたい事】
・フォルダAからダBへファイルを、マクロで、1つづつ移動する
⇒ボタン1回おすと1つ移動するイメージ
⇒もう1回、押すと、次の1つを移動する伊目地
・違う種類のPDFファイルがフォルダAに常に5~10個あるイメージ
・ファイルの更新日時【古いものから先に移動】の順番で
 フォルダAからフォルダBへ移動したい
・上記の条件を満たした、マクロが【参考2】です。動きます。
※【参考2】は、教えてgooにて、教授いただきました


【教えて欲しい事】
・フォルダAとフォルダBのパスが【参考1-A】であれば、参考2のマクロで
できます。しかし、【参考1-B】のフォルダパスだとどのように
VBAを記述すれば良いかわかりません

ご存じのかた、いましたら、教えて下さい

【補足】
・【参考3】のマクロは、フォルダAとフォルダBを一発で開くマクロです。
⇒こちらは動きます。

・【参考3】のフォルダAとフォルダBのパスで【参考2】のマクロを
動かしたいです
※参考3は、教えてgooにて、教授いただきました

・フォルダパスに半角スペースが入っている場合の
→参考2のマクロの動かし方が分からないという質問です


【参考1-A】
【VBAの書き方が分からるフォルダAとフォルダBのパス】

C:\Users\2020\Desktop\フォルダA
C:\Users\2020\Desktop\フォルダB

【参考1-B】
【VBAの書き方が分からないフォルダAとフォルダBのパス】

C:\Users\user\Desktop\Aフォルダ
C:\Users\user\Desktop\㉖ あいうえお\フォルダB



※㉖とあいうえおの間に半角スペースあり
※㉖は環境依存文字という種類の為次のように書く " & ChrW(12886) & "




【参考2】
Sub フォルダAから時系列で1つずつフォルダBへ移動する()


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


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


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


【参考3】
Const 半角スペース = """"

Sub sample()

Dim Apath As String

Dim Bpath As String

'Apathのフォルダパスは C:\Users\user\Desktop\Aフォルダ

Apath = "C:\Users\user\Desktop\Aフォルダ"


'Bpathのフォルダパスは C:\Users\user\Desktop\? あいうえお\フォルダB
'上記の?マークはまる26という環境文字です。VBA記述不可の為
'" & ChrW(12886) & "を変わりに記述しています
'" & ChrW(12886) & "とあいうえおの間には半角スペースが入っています


Bpath = "C:\Users\user\Desktop\" & ChrW(12886) & " あいうえお\フォルダB"




CreateObject("WScript.Shell").Run 半角スペース & Apath & 半角スペース

CreateObject("WScript.Shell").Run 半角スペース & Bpath & 半角スペース


End Sub

質問者からの補足コメント

  • HAPPY

    ありがとうございます。動くマクロが作れました。
    なお、ChrW(160) は動きませんでした


    Q1.今回、教授いただいたいのは、フォルダパスを
    定数から変数に変更した事なのでしょうか?


    【ポイント】
    定数にChrW(12886)は設定できない
    String型変数にして
    Dim pathB As String

    【動いた】
    Dim pathB As String
    pathB = "C:\Users\user\Desktop\" & ChrW(12886) & " あいうえお\フォルダB"


    【動かなかった⇒指定フォルダが存在しません とメッセージボックスが表示】
    Dim pathB As String
    pathB = "C:\Users\user\Desktop\" & ChrW(12886) & ChrW(160) & "あいうえお\フォルダB"

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/08/25 16:19

A 回答 (3件)

連投すみません


Const pathB = "C:\Users\2020\Desktop\フォルダB"
ここの書き方かな?

定数にChrW(12886)は設定できないので
String型変数にして
Dim pathB As String
pathB = "C:\Users\user\Desktop\" & ChrW(12886) & ChrW(160) & "あいうえお\フォルダB"

ChrW(160)ではなく【参考3】の書き方でもOK?
この回答への補足あり
    • good
    • 0

読解力が無く申し訳ないです


初め、半角スペースが読めないのかな と思いました・・
が、【参考2】のコードが動いていて変更する方法だったので#2です

>Q1.今回、教授いただいたいのは、フォルダパスを定数から変数に変更した事なのでしょうか?
仰る通り、そのような事になります。

半角スペースと言うとChr(32) か ChrW(160) だったと思いましたが
pathB = "C:\Users\user\Desktop\" & ChrW(12886) & ChrW(160) & "あいうえお\フォルダB" は ダメなのですね

試していないので お手数をお掛けいたしました
    • good
    • 0
この回答へのお礼

大変、助かりました。ありがとうございました。また、別のファイル移動のマクロについて、質問いたします。

内容は、今回と同様に動いているコード【マクロ】を変更する方法
についてです。

変更の内容は今回、同様に、フォルダパスの変更です。
お目につきましたら、宜しくお願い致します。

お礼日時:2022/08/25 16:50

こんにちは


【参考1-B】のフォルダパスだとどのようにVBAを記述すれば良いかわかりません
Bpath = "C:\Users\user\Desktop\" & ChrW(12886) & " あいうえお\フォルダB"
だとダメと言う事ですね

半角スペースが上手く処理できないと言う事かな・・
半角スペース Chr(32)を使うかChrW(160)を使うか・・

Bpath = "C:\Users\user\Desktop\" & ChrW(12886) & ChrW(160) & "あいうえお\フォルダB"
かな
    • good
    • 0

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