返回列表 上一主題 發帖

[發問] 自動產生資料夾

[發問] 自動產生資料夾

Sir,
我有一個"NEDoc" 的文件,我希望它能以sheet:INV的儲存格S8_Q8_I8_自命為一個新的資料夾"55767_TE_CI12-182",其中S8為客人的訂單號碼,只取右邊的5碼就好,
新資料夾名稱及路徑為P:\Shipping Doc\NE-Logistics\55767_TE_CI12-182
巨集存放位置及檔案為P:\PJ-Home\VBA Cluster
原"NEDoc"文件的存放位置及檔名為P:\PJ-Home\NEDoc
我的需求如下,請求各位幫忙:
1 自動產生新的資料夾(方式如前所提及)
2 產生資料夾後,要原本的"NEDoc"以儲存格I8_PO#S8另存一個新的檔案名稱(即:CI12-182_PO#4500055767)置於資料夾"55767_TE_CI12-182"中

NEDoc.zip (52.69 KB)

回復 1# PJChen
試試看
  1. Sub Ex()
  2. Set fdo = CreateObject("Scripting.FilesystemObject")
  3. With Workbooks.Open("P:\PJ-Home\NEDoc.xlsx")
  4.     With .Sheets("INV")
  5.        fs = Right(.[S8], 5) & "_" & .[Q8] & "_" & .[I8]
  6.        fd = "P:\Shipping Doc\NE-Logistics\" & fs
  7.        k = fdo.folderexists(fd)
  8.        ar = Split(fd, "\")
  9.        fn = ar(0)
  10.        For i = 1 To UBound(ar)
  11.        fn = fn & "\" & ar(i)
  12.           If fdo.folderexists(fn) = False Then fdo.createfolder fn
  13.        Next
  14.     End With
  15.     .SaveCopyAs fd & "\" & fs & ".xlsx"
  16.     .Close
  17. End With
  18. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 2# Hsieh

謝謝您,執行很成功!
我若想將NEDoc打開後(因有時還要修改文件)再執行上述的巨集,請問要如何改?
是否改以下的程式:With Workbooks.Open("P:\PJ-Home\NEDoc.xlsx")
改成 With Workbooks("P:\PJ-Home\NEDoc.xlsx") ,但它不能執行,請問問題出在哪裡?

TOP

回復 2# Hsieh
另外剛才沒有檢查到,Excel的檔案名稱要用以下的方式存檔,請問該怎麼修改程式?
產生資料夾後,要原本的"NEDoc"以儲存格I8_PO#S8另存一個新的檔案名稱(即:CI12-182_PO#4500055767)置於資料夾"55767_TE_CI12-182"中

TOP

回復 2# Hsieh
我想將發現的問題總結如下,請再指教!
1)  Excel的檔案名稱要用以下的方式存檔,請問該怎麼修改程式? (例:即:CI12-182_PO#4500055767)
       產生資料夾後,要原本的"NEDoc"以儲存格I8_PO#S8另存一個新的檔案名稱(即:CI12-182_PO#4500055767)置於資料夾"55767_TE_CI12-182"中
2)  我若想將NEDoc打開後(因有時還要修改文件)再執行上述的巨集,請問要如何改? 是否改以下的程式:With Workbooks.Open("P:\PJ-Home\NEDoc.xlsx")
       改成 With Workbooks("P:\PJ-Home\NEDoc.xlsx") ,但它不能執行,請問問題出在哪裡?
3)  若原"NEDoc"文件的存放位置及檔名為P:\PJ-Home\NEDoc,在執行後我不想覆蓋原檔名,
       只要它執行後儲存在新資料夾名稱及路徑為P:\Shipping Doc\NE-Logistics\55767_TE_CI12-182中,又該更改哪個部份?

TOP

回復 5# PJChen

1)  Excel的檔案名稱要用以下的方式存檔,請問該怎麼修改程式? (例:即:CI12-182_PO#4500055767)
       產生資料夾後,要原本的"NEDoc"以儲存格I8_PO#S8另存一個新的檔案名稱(即:CI12-182_PO#4500055767)置於資料夾"55767_TE_CI12-182"中
ANS1:這只是檔名規則問題,原本fs = Right(.[S8], 5) & "_" & .[Q8] & "_" & .[I8]檔名會是55767_TE_CI12-182
           fs = .[I8] & "-PO#" & "_" & .[S8]檔名就是CI12-182_PO#4500055767

2)  我若想將NEDoc打開後(因有時還要修改文件)再執行上述的巨集,請問要如何改? 是否改以下的程式:With Workbooks.Open("P:\PJ-Home\NEDoc.xlsx")
       改成 With Workbooks("P:\PJ-Home\NEDoc.xlsx") ,但它不能執行,請問問題出在哪裡?
ANS2:檔案已經開啟狀態只需使用視窗的Caption指定,改成With Windows("NEDoc.xlsx") 即可。

3)  若原"NEDoc"文件的存放位置及檔名為P:\PJ-Home\NEDoc,在執行後我不想覆蓋原檔名,
       只要它執行後儲存在新資料夾名稱及路徑為P:\Shipping Doc\NE-Logistics\55767_TE_CI12-182中,又該更改哪個部份?
ANS3:同目錄下不可有重複檔名,所以這部分無法了解你的邏輯。
學海無涯_不恥下問

TOP

回復 6# Hsieh

1)  請問 With Workbooks(":\PJ-Home\NEDoc.xlsx")與 With Windows("NEDoc.xlsx") 請問這2個的差別意義在哪裡?

2)  原"NEDoc"文件的存放路徑為P:\PJ-Home\NEDoc(原檔名)
      新資料夾名稱及路徑為P:\Shipping Doc\NE-Logistics\(+新檔名)
在執行巨集後我不想在將路徑為P:\PJ-Home覆蓋原檔名(現行的巨集會問我是否存檔?因為我以為它是問我存放在新路徑的檔案作覆蓋,就按了"是",然後原先有公式的檔案就被覆蓋了...
       當然它執行巨集後也會儲存在新資料夾名稱及路徑為P:\Shipping Doc\NE-Logistics\55767_TE_CI12-182中.

通常打開一個檔案當你再次存檔時,當然可以覆蓋原檔案,但也可以直接指向別的路徑另存新檔,我要的便是這種的!
我不希望它執行巨集後在原來的路徑中問我要不要存檔,很容易讓我錯亂,一不小心便存錯檔案了.

TOP

回復 6# Hsieh
我試了幾次,只要檔案打開的話, ,以下方式都不能執行,請問問題出在哪裡?
With Workbooks("P:\PJ-Home\NEDoc.xlsx")
With Windows("NEDoc.xlsx")
With Workbooks("NEDoc.xlsx")
   With ActiveWorkbook("P:\PJ-Home\NEDoc.xlsx")
   With ActiveWorkbook("NEDoc.xlsx")

TOP

回復 8# PJChen
這關乎到你的開檔動作
假設程式碼是在TEST.xlsm檔案內
如果以TEST.xlsm的程式碼開啟NEDoc.xlsx
NEDoc.xlsx與程式碼所在的檔案是同一個專案(Application)下的2個視窗
那麼,With Windows("NEDoc.xlsx")應該可以執行
如果,NEDoc.xlsx是以手動開啟後做修改
那麼要看你的TEST.xlsm開啟後是兩個EXCEL專案或是同一個專案
如果同一個專案With Workbooks("NEDoc.xlsx")應可成立
若非同一個專案那麼程式碼並無法跨專案取得EXCEL的活頁簿物件
學海無涯_不恥下問

TOP

回復 9# Hsieh

我的巨集程式都放在P:\PJ-Home\VBA Cluster.xlsm
原"NEDoc"文件的存放位置及檔名為P:\PJ-Home\NEDoc.xlsx
執行巨集後=>新資料夾名稱及路徑為P:\Shipping Doc\NE-Logistics\55767_TE_CI12-182.xlsx
是兩個不同的EXCEL檔,但巨集全部放在VBA Cluster.xlsm,
這樣還能不能依我的需求:
1)  NEDoc在開啟狀態下,再執行上述的巨集
2)  執行巨集後不要覆蓋原檔名,只要儲存在新資料夾名稱及路徑為P:\Shipping Doc\NE-Logistics\新檔名

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題