Board logo

標題: [發問] 自動產生資料夾 [打印本頁]

作者: PJChen    時間: 2012-3-31 12:21     標題: 自動產生資料夾

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"中

[attach]10260[/attach]
作者: Hsieh    時間: 2012-3-31 17:15

回復 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
複製代碼

作者: PJChen    時間: 2012-4-1 12:46

回復 2# Hsieh

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

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

回復 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中,又該更改哪個部份?
作者: Hsieh    時間: 2012-4-1 22:54

回復 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:同目錄下不可有重複檔名,所以這部分無法了解你的邏輯。
作者: PJChen    時間: 2012-4-2 12:25

回復 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中.

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

回復 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")
作者: Hsieh    時間: 2012-4-2 15:22

回復 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的活頁簿物件
作者: PJChen    時間: 2012-4-2 23:19

回復 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\新檔名
作者: PJChen    時間: 2012-4-4 14:58

回復 9# Hsieh
謝謝版大幫忙寫的程式,有問題的部份,我自己試了6個小時解決了一個問題
1)  NEDoc在開啟狀態下,再執行上述的巨集(改成   With Workbooks("NE-Team Doc.xlsx").Sheets("INV").Activate 就ok
2)  執行巨集後不要覆蓋原檔名,只要儲存在新資料夾名稱及路徑為P:\Shipping Doc\NE-Logistics\新檔名 (存檔時自己小心,因為想不出辦法了)




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)