Board logo

標題: [發問] 於自動另存新檔時檢查有關路徑及於有需要時建立資料夾 [已解決] [打印本頁]

作者: jimmyhk    時間: 2011-8-29 13:42     標題: 於自動另存新檔時檢查有關路徑及於有需要時建立資料夾 [已解決]

本帖最後由 jimmyhk 於 2011-9-23 13:40 編輯

想請教我於網上找到有檢查檔案名的位置和名稱是否正確,
以及亦有一份是檢查資料夾的.

但於我寫的 excel VBA  (我是初心者) 內就行不通,
可否指教一下?

Dim sa As String
SaveLocation.Show
' (於 form SaveLocation 輸入路徑後存到 Range("D24")

Sheets("data_field").Select
sa = Range("D24").Value
Dim Ex As String
    Sheets("input").Select
    Ex = Range("A23").Value
Sheets(Ex).Select

booknme1 = f1
booknme2 = f2
booknme3 = f3
folda = sa
fname1 = folda & "\" & booknme1
fname2 = folda & "\" & booknme2
fname3 = folda & "\" & booknme3

'  以下這段為網上找到的 VBA 碼
Dim fso
    CreateObject ("Scripting.FileSystemObject")
'  這個為它預設的路徑
'    If Not (fso.FolderExists("d:\abc")) Then
'  因為我想儲存的路徑是於 Range("A23") 決定, 我本想改為這句, 但 Excel 不能給我執行
    If Not (fso.FolderExists(folda)) Then
MkDir (folda)
End If

ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=fname3
ActiveWorkbook.Close True

ActiveSheet.SaveAs fname1, xlUnicodeText
ActiveSheet.SaveAs fname2, xlUnicodeText


'請問有方法解決這個問題嗎?  謝謝
作者: GBKEE    時間: 2011-8-29 15:14

回復 1# jimmyhk
請附上檔案 看看你如何套用修改的?
作者: jimmyhk    時間: 2011-8-29 22:40

回復 2# GBKEE


[attach]7641[/attach]


thx~
作者: Hsieh    時間: 2011-8-30 00:11

回復 3# jimmyhk
因為是多層目錄,必須循序建立
Set fsd = CreateObject("Scripting.FileSystemObject")
fs = ComboBox1
ar = Split(fs, "\")
If Not fsd.folderexists(fs) Then
fd = ar(0)
For i = 1 To UBound(ar)
fd = fd & "\" & ar(i)
MkDir fd
Next
End If
作者: jimmyhk    時間: 2011-8-31 00:41

回復 4# Hsieh


    謝謝你的回覆.

但我發現有兩個問題,

Set fsd = CreateObject("Scripting.FileSystemObject")
fs = sa   '  這句執行時它發生錯誤, 我把這個改為 sa (不用 combox1 ) 時就可以通過.
ar = Split(fs, "\")
If Not fsd.folderexists(fs) Then
fd = ar(0)
For i = 1 To UBound(ar)
fd = fd & "\" & ar(i)
MkDir fd
Next
End If


另一個問題,
例如我輸入存檔路徑為 D:\aa\abc  
如原先母資料夾和子資料夾都不存在時,
它可以正常自行建立兩個資料夾,
但如 d:\aa 是已經存在, 而 abc 是不存在時,
就會於 mkdir fd 執行時發生錯誤,
我是否要於它建立時再加檢查前部份的句子?  應如何加入?
作者: Hsieh    時間: 2011-8-31 08:59

本帖最後由 Hsieh 於 2011-8-31 09:01 編輯

回復 5# jimmyhk

那就是要在MKDIR時做判斷
If Not fsd.folderexists(fs) Then
fd = ar(0)
For i = 1 To UBound(ar)
fd = fd & "\" & ar(i)
If Not fsd.folderexists(fd) Then MkDir fd
Next
End If
作者: jimmyhk    時間: 2011-8-31 11:11

回復 6# Hsieh


哦~~~
即是要檢查兩次...
明白
我再試試~~~




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