標題:
[發問]
複製檔案至糢糊路徑
[打印本頁]
作者:
PJChen
時間:
2019-5-22 18:07
標題:
複製檔案至糢糊路徑
請問先進:
我要從來源路徑W:\私\範例\理貨單\
複製裡面的所有含有檔名"5月"的excel檔
到目的路徑含有今天日期例:20190522,但資料夾的檔名沒有一定,只有當天日期是固定的
當我把檔名/路徑寫死,沒有*時可以複製,但因為檔名及最後一層目的資料夾名稱,不是固定的,請問要如何修改以下程式?
Sub autocopy()
Dim fso As Object, souf$, desf$
Set fso = CreateObject("Scripting.FilesyStemObject") '定義fso為物件
souf = "W:\私\範例\理貨單\*5月*.xlsx"
desf = "R:\Downloads.4T.Films\暫存\" & "*" & Format(Date, "YYYYMMDD") & "*\" '目的資料夾
fso.CopyFile souf, desf
Set fso = Nothing
End Sub
複製代碼
作者:
GBKEE
時間:
2019-5-23 10:30
回復
1#
PJChen
試試看
Option Explicit
Dim sf As Object
Sub Ex()
Set sf = CreateObject("Scripting.FileSystemObject")
Ex_SubFolder "W:\私\範例\理貨單\" '**呼叫程式 參數為 指定的資料夾"
End Sub
Sub Ex_SubFolder(xFolder As String) '**參數為文字
Dim xSub As Object, E As Variant
Set xSub = sf.GetFolder(xFolder).SubFolders
'**SubFolders : 傳回包含所有資料夾的一個 Folders 集合物件
For Each E In xSub
Ex_xFiles E '**呼叫程式 傳遞參數 Folder 物件
'**傳遞下一層的資料夾***
Ex_SubFolder E.Path '**呼叫程式 傳遞參數 SubFolders 集合物件
Next
End Sub
Sub Ex_xFiles(xF As Variant) '**參數為文字
Dim E As Variant
For Each E In xF.FILES '**Files 集合物件 : 資料夾內的所有 File 物件的集合物件
Debug.Print E.SHORTPATH '** E.SHORTPATH : 檔案的完整路徑名稱
'**在這裡套入你所需的程式碼
'************
Next
End Sub
複製代碼
作者:
PJChen
時間:
2019-5-26 21:29
回復
2#
GBKEE
G大好,
我在測試時,加入了我需要的路徑,但一直無法執行,出現"引數不為選擇性",我無法理解是什麼樣的錯誤,可否指導?
另外我在複製到指定資料夾後"W:\0_自訂表單\Backup\倉儲共用" & "*" & Format(Date, "YYYYMMDD") & "*\" '目的資料夾
想使原檔名加上當月月份,但因為每月月份都會變動,請問要怎麼寫,它才會在原檔後面加上會變動的月份?
Option Explicit
Dim sf As Object
Sub 群組copy()
Set sf = CreateObject("Scripting.FileSystemObject")
群組copy_SubFolder = "W:\蘆竹共用\倉儲共用\1_理貨.庫存\1.日班理貨換算表\*5月.xlsx" '**呼叫程式 參數為 指定的資料夾"
End Sub
Sub 群組copy_SubFolder(xFolder As String) '**參數為文字
Dim xSub As Object, E As Variant
Set xSub = sf.GetFolder(xFolder).SubFolders
'**SubFolders : 傳回包含所有資料夾的一個 Folders 集合物件
For Each E In xSub
群組copy_xFiles E '**呼叫程式 傳遞參數 Folder 物件
'**傳遞下一層的資料夾***
群組copy_SubFolder E.Path '**呼叫程式 傳遞參數 SubFolders 集合物件
Next
End Sub
Sub 群組copy_xFiles(xF As Variant) '**參數為文字
Dim E As Variant
For Each E In xF.Files '**Files 集合物件 : 資料夾內的所有 File 物件的集合物件
Debug.Print E.SHORTPATH = "W:\0_自訂表單\Backup\倉儲共用" & "*" & Format(Date, "YYYYMMDD") & "*\" '目的資料夾 '** E.SHORTPATH : 檔案的完整路徑名稱
'**在這裡套入你所需的程式碼
'************
Next
End Sub
複製代碼
作者:
GBKEE
時間:
2019-5-27 09:08
本帖最後由 GBKEE 於 2019-5-28 07:24 編輯
回復
3#
PJChen
Option Explicit
Dim sf As Object
Sub Ex()
Set sf = CreateObject("Scripting.FileSystemObject")
' *** 為 指定檔案的資料夾目錄 , 不要包含檔案名稱 ****
Ex_SubFolder "e:\excel"
' *** 為 指定檔案的資料夾目錄 , 不要包含檔案名稱 ****
End Sub
Sub Ex_SubFolder(xFolder As String) '**參數為文字 為 指定檔案的資料夾目錄
Dim xSub As Object, E As Variant
Set xSub = sf.GetFolder(xFolder)
Ex_xFiles xSub.Files
For Each E In xSub.SubFolders
Ex_xFiles E.Files '**呼叫程式 傳遞參數 Files 物件
'**傳遞下一層的資料夾***
Ex_SubFolder E.Path '**呼叫程式 傳遞參數 SubFolders 集合物件
Next
End Sub
Sub Ex_xFiles(xF As Variant) '**參數為文字
Dim E As Variant
For Each E In xF '.Files '**Files 集合物件 : 資料夾內的所有 File 物件的集合物件
Debug.Print E.SHORTPATH '** E.SHORTPATH : 檔案的完整路徑名稱
Next
End Sub[code]Option Explicit
Sub Ex()
Dim a
a = Format(Date, "mmdd") '本月
Debug.Print a
a = Format(DateAdd("m", -1, Date), "mmdd") '上一個月
Debug.Print a
End Sub
複製代碼
作者:
PJChen
時間:
2019-5-27 17:50
回復
4#
GBKEE
G大,
不好意思,因為我看過的程式碼實在不多,也第一次看到這種寫法,讓我不知如何套入我需要的程式,已經多次嘗試各種組合,但沒有一次可以run完這個程式,它使終都卡在路徑這一關,就無法執行了,可以勞煩G幫忙看下嗎?
Option Explicit
Dim sf As Object
Sub Ex()
Set sf = CreateObject("Scripting.FileSystemObject")
Ex_SubFolder "W:\蘆竹共用\倉儲共用\1_理貨.庫存\1.日班理貨換算表\*5月*.xlsx" '**呼叫程式 參數為 指定的資料夾
End Sub
Sub Ex_SubFolder(xFolder As String) '**參數為文字
Dim xSub As Object, E As Variant
Set xSub = sf.GetFolder(xFolder).SubFolders
xSub "W:\蘆竹共用\倉儲共用\1_理貨.庫存\1.日班理貨換算表\*5月*.xlsx"
'**SubFolders : 傳回包含所有資料夾的一個 Folders 集合物件
For Each E In xSub
Ex_xFiles E '**呼叫程式 傳遞參數 Folder 物件
'**傳遞下一層的資料夾***
Ex_SubFolder E.Path '**呼叫程式 傳遞參數 SubFolders 集合物件
Next
End Sub
Sub Ex_xFiles(xF As Variant) '**參數為文字
Dim E As Variant
Dim a
a = Format(Date, "yyyymmdd") '當日
Debug.Print a
For Each E In xF.Files '**Files 集合物件 : 資料夾內的所有 File 物件的集合物件
Debug.Print E.SHORTPATH = "W:\0_自訂表單\Backup\" & "*" & a & "*\" '** E.SHORTPATH : 檔案的完整路徑名稱
'**在這裡套入你所需的程式碼
sf.CopyFile SubFolders, xFiles
Set sf = Nothing
'************
Next
End Sub
複製代碼
另外原先的這個程式,對我來說其實是比較淺顯易懂的,可否也同時請教:
1. 這個程式的路徑用固定式的寫法,可以非常快速的copy檔案到指定路徑
2. 當目的路徑為年月日為變動資料夾時,卻無法copy
3. 請問這個寫法還有救嗎?可以稍加修改目的資料夾為年月日變動式的嗎?
4. 我一次想備份多個來源不同的資料夾,到多個不同目的資料夾,是否可以共用Dim fso As Object, souf$, desf$, P$, a的宣告?這樣程式會混淆而無法複製資料嗎?
Sub autocopy()
Dim fso As Object, souf$, desf$, P$, a
a = Format(Date, "yyyymmdd") '本月當日
Debug.Print a
Path = "W:\0_自訂表單\Backup\"
P = Path & "*" & a & "*" & "\" '目的路徑為年月日為變動資料夾時,無法copy
Set fso = CreateObject("Scripting.FilesyStemObject") '定義fso為物件
souf = "W:\蘆竹共用\倉儲共用\1_理貨.庫存\1.日班理貨換算表\*5月*.xlsx"
desf = P '目的路徑為年月日為變動資料夾時,無法copy
fso.CopyFile souf, desf
Set fso = Nothing
End Sub
複製代碼
作者:
GBKEE
時間:
2019-5-28 12:11
回復
5#
PJChen
是這樣嗎.
Option Explicit
Dim sf As Object, a As String, souf As String
Sub Ex()
souf = "W:\蘆竹共用\倉儲共用\1_理貨.庫存\1.日班理貨換算表\*5月*.xlsx" '**指定的*檔案
a = "*" & Format(Date, "yyyymmdd") & "*" '本月當日
Set sf = CreateObject("Scripting.FileSystemObject")
Ex_SubFolder "W:\0_自訂表單\Backup\"
' *** W:\0_自訂表單\Backup資料夾目錄 ,下搜尋所有的子目錄 ****
End Sub
Sub Ex_SubFolder(xFolder As String) '**參數為文字 為 指定檔案的資料夾目錄
Dim xSub As Object, E As Variant
Set xSub = sf.GetFolder(xFolder) 'xSub 傳回一個資料夾物件
For Each E In xSub.SubFolders '** E 一一傳回 xSub.下的子資料夾目錄
Debug.Print E.Path
If E.Path Like a Then '**子資料夾 包含本月當日
'**複製souf的指定檔案到, E.Path資料夾. 對嗎! 對嗎! ****"
sf.copyFile souf, E.Path
'*********************************************************
End If
'**傳遞下一層的資料夾***
Ex_SubFolder E.Path '**呼叫程式 傳遞參數 下一個資料夾目錄
Next
End Sub
複製代碼
作者:
PJChen
時間:
2019-5-28 15:41
回復
6#
GBKEE
G大好,
單一資料夾的複製檔案已經沒問題了,想請問複製多對多路徑時,
例如以下的路徑對應,我該如何把以下對應的路徑套到程式中?
目的路徑,有日期的那一個資料夾,只有當天日期是已知的,其餘的字會變動,只能用"*" [attach]30699[/attach]
來源路徑.....所有包含"*5月*.xlsx"...的檔案 目的路徑
W:\蘆竹共用\倉儲共用\1_理貨.庫存\佳乳 D:\0_自訂表單\Backup\倉儲共用 20190528\佳乳
W:\蘆竹共用\倉儲共用\1_理貨.庫存\1.日班理貨換算表 D:\0_自訂表單\Backup\倉儲共用 20190528\1.日班理貨換算表
W:\蘆竹共用\倉儲共用\1_理貨.庫存\2.全台理貨換算表 D:\0_自訂表單\Backup\倉儲共用 20190528\2.全台理貨換算表
W:\蘆竹共用\倉儲共用\1_理貨.庫存\比菲多 D:\0_自訂表單\Backup\倉儲共用 20190528\比菲多
W:\蘆竹共用\倉儲共用\倉儲共用\1_理貨.庫存\比菲多\108年比菲多\過允收蘆竹所轉經銷 D:\0_自訂表單\Backup\倉儲共用 20190528\比菲多\過允收蘆竹所轉經銷
作者:
GBKEE
時間:
2019-5-29 14:10
回復
7#
PJChen
多個來源路徑.....所有包含"*5月*.xlsx"...的檔案到複製多個目的路徑
,多個目的路徑有包含
1.日班理貨換算表
一樣要複製到嗎?
B6為指定資料夾 (
1.日班理貨換算表
) ,裡面有很多檔案,我只放2個測試,每個檔案都做
相同的動作
這相同的動作
也包含這複製後的*5月*.xlsx"...檔案 嗎?
只放2個測試 : 特定的檔案或是所有檔案
作者:
PJChen
時間:
2019-5-29 20:10
回復
8#
GBKEE
1. 每個來源路徑 及 目的路徑的資料夾,都只對應各自的檔案,不能有下搜功能,否則所有備份的檔案會整個大亂
2. 每個來源及目的各有各的對應,複製的檔案也都不相同,無法一一列舉
3. 目的路徑有年月日資料夾內的名稱,不能寫死,因為每天都會變動
4. 複製的檔案,可以自行修改需要的名稱,如: "*5月*.xlsx" 和 "*.xlsx",這樣就完美了.
來源路徑 目的路徑
W:\蘆竹共用\倉儲共用\1_理貨.庫存\佳乳 D:\0_自訂表單\Backup\倉儲共用 20190528\佳乳..........來源檔案名稱沒有共通性,只能用"*.xlsx"
W:\蘆竹共用\倉儲共用\1_理貨.庫存\1.日班理貨換算表 D:\0_自訂表單\Backup\倉儲共用 20190528\1.日班理貨換算表..........來源檔案名稱"*5月*.xlsx"
W:\蘆竹共用\倉儲共用\1_理貨.庫存\2.全台理貨換算表 D:\0_自訂表單\Backup\倉儲共用 20190528\2.全台理貨換算表..........來源檔案名稱"*5月*.xlsx"
W:\蘆竹共用\倉儲共用\1_理貨.庫存\比菲多 D:\0_自訂表單\Backup\倉儲共用 20190528\比菲多..........來源檔案名稱沒有共通性,只能用"*.xlsx"
W:\蘆竹共用\倉儲共用\倉儲共用\1_理貨.庫存\比菲多\108年比菲多\過允收蘆竹所轉經銷 D:\0_自訂表單\Backup\倉儲共用 20190528\比菲多\過允收蘆竹所轉經銷..........來源檔案名稱"*5月*.xlsx"
作者:
GBKEE
時間:
2019-5-30 09:19
本帖最後由 GBKEE 於 2019-5-30 09:20 編輯
回復
9#
PJChen
W:\蘆竹共用\倉儲共用\倉儲共用\1_理貨.庫存\比菲多\108年比菲多\過允收蘆竹所轉經銷 D:\0_自訂表單\Backup\倉儲共用 20190528\比菲多\過允收蘆竹所轉經銷..........來源檔案名稱"*5月*.xlsx"
沒有 \儲共用 20190528 這共通性須單獨處理
來源路徑 W:\蘆竹共用\倉儲共用\1_理貨.庫存\ 只搜尋 這目錄的下一層子目錄
然後比對 目的路徑 D:\0_自訂表單\Backup\
倉儲共用 20190528\
這有
倉儲共用
且有當日日期的資料夾
來源路徑 如 子目錄 \.日班理貨換算表
含(理貨換算表)
複製"*5月*.xlsx" 到 D:\0_自訂表單\Backup\
倉儲共用 20190528\
日班理貨換算表
來源路徑 如 子目錄 \.佳乳
不含(理貨換算表)
複製"*.*.xlsx" 到 D:\0_自訂表單\Backup\
倉儲共用 20190528\
.佳乳
是這樣嗎?
作者:
PJChen
時間:
2019-5-30 19:18
回復
10#
GBKEE
G大,
您說的沒錯,我也把它表格化了,不知這樣是否能看得更明瞭... [attach]30731[/attach]
作者:
GBKEE
時間:
2019-5-31 05:25
本帖最後由 GBKEE 於 2019-5-31 05:26 編輯
回復
11#
PJChen
試試看
Option Explicit
Sub EX()
Dim SF As Object, Source_Folder As String, Target_Folder As String
Dim Source_File As String, E As Variant, E1 As Variant
Source_Folder = "W:\蘆竹共用\倉儲共用"
Target_Folder = "D:\0_自訂表單\Backup\倉儲共用 " & Format(Date, "YYYYMMDD")
If Dir(Target_Folder, vbDirectory) <> "" Then '傳回這資料夾目錄
Set SF = CreateObject("Scripting.FileSystemObject")
For Each E In SF.GetFolder(Source_Folder)
For Each E1 In SF.GetFolder(Target_Folder)
Source_File = E.Path & "\*.xlsx"
If E.Path Like "*班理貨換算表" And E1.Path Like "*班理貨換算表" Then
Source_File = E1.Path & "\*" & Format(Date, "M") & "月*.xlsx"
End If
SF.CopyFile Source_File, E1.Path
Next
Next
Else
MsgBox "找步到 " & vbLf & Target_Folder
End If
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)