返回列表 上一主題 發帖

[發問] FileCopy 同名檔案不覆蓋

[發問] FileCopy 同名檔案不覆蓋

我要抓某個資料夾(A)底下所有資料夾(b、c、d、、、)裡面的excel檔

下方程式碼是在GOOGLE搜尋而得的

好像是版大早期的解說XDD

因為很實用就拿來應用了


但是我發現碰到檔名一樣的excel檔

COPY過去會覆蓋掉  造成檔案有缺漏

能否修改即使檔名一樣  都存在 而不要附蓋過去
  1. 'Option Explicit

  2. Sub SF_collection_Click()

  3.     t = Time
  4.    
  5.     Set fs = CreateObject("Scripting.FileSystemObject")
  6.     Set sf = fs.GetFolder("路徑*****").SubFolders
  7.    
  8.     For Each f In sf
  9.   
  10.         With Application.FileSearch
  11.         .FileType = msoFileTypeExcelWorkbooks
  12.         .LookIn = f
  13.         .Execute
  14.         
  15.         For i = 1 To .FoundFiles.Count
  16.             myfile = Replace(.FoundFiles(i), .LookIn, "")
  17.             FileCopy .FoundFiles(i), "路徑*****" & myfile
  18.         Next
  19.    
  20.         End With
  21.    
  22.     Next
  23.    
  24.     Debug.Print "經過時間: " & DateDiff("n", t, Time) & "分"
  25.   
  26. End Sub
複製代碼
謝謝~~~
用功到世界末日那一天~~~

if FileLen( "路徑*****" & myfile ) = 0 then
FileCopy.FoundFiles(i), "路徑*****" & myfile
end if

TOP

回復 2# bobomi

謝謝bobomi回覆

請問這個寫法是指如果檔案不存在才執行FileCopy的動作嗎???
用功到世界末日那一天~~~

TOP

回復 1# li_hsien
試試看
  1. Option Explicit
  2. Sub SF_collection_Click()
  3.     Dim 目的目錄  As String, 搜尋目錄 As String, T As Date, Fs As Object, Sf As Object, f As Object
  4.     Dim i As Integer, 檔名 As String, 副檔名 As String, 檔名_計數 As Integer, MyDir As String
  5.     目的目錄 = "D:\"
  6.     搜尋目錄 = "C:\test"
  7.     T = Time
  8.     Set Fs = CreateObject("Scripting.FileSystemObject")
  9.     Set Sf = Fs.GetFolder(搜尋目錄).SubFolders
  10.     For Each f In Sf
  11.         With Application.FileSearch
  12.             .FileType = msoFileTypeExcelWorkbooks
  13.             .LookIn = f             '傳回大寫的資料夾名稱
  14.             .Filename = "*.*"
  15.             .Execute
  16.             For i = 1 To .FoundFiles.Count
  17.                 檔名 = Fs.GetBaseName(.FoundFiles(i))
  18.                 副檔名 = Fs.GetExtensionName(.FoundFiles(i))
  19.                 檔名_計數 = 0
  20.                 MyDir = Dir(目的目錄 & 檔名 & "*." & 副檔名, vbDirectory)
  21.                 Do While MyDir <> ""
  22.                     檔名_計數 = 檔名_計數 + 1
  23.                     MyDir = Dir
  24.                 Loop
  25.                 If 檔名_計數 > 0 Then
  26.                     檔名 = 目的目錄 & 檔名 & "(" & 檔名_計數 & ")." & 副檔名
  27.                 Else
  28.                     檔名 = 目的目錄 & 檔名 & "." & 副檔名
  29.                 End If
  30.                 FileCopy .FoundFiles(i), 檔名
  31.             Next
  32.         End With
  33.     Next
  34.     Debug.Print "經過時間: " & DateDiff("n", T, Time) & "分"
  35. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  bobomi

謝謝bobomi回覆

請問這個寫法是指如果檔案不存在才執行FileCopy的動作嗎???
li_hsien 發表於 2014-9-11 15:58



這樣就可以了

On Error Resume Next
If FileLen("路徑*****" & myfile) = 0 Then
On Error GoTo 0
FileCopy.FoundFiles (i), "路徑*****" & myfile
End If

TOP

or

If Dir("路徑*****" & myfile) = "" Then
FileCopy.FoundFiles (i), "路徑*****" & myfile
End If

TOP

回復 6# bobomi
     
     謝謝bobomi的回覆!!!


     測試起來檔案還是不能併存
   
     我用了10個檔案測試,其中有2個同檔名

     彙整起來所要的結果應該是10個都有

     但結果只有9個

  
     我不是很清楚FileLen的用法

     但是就我目前理解,看bobomi您的寫法應該是如果檔案不存在才執行吧???


     TKS~
用功到世界末日那一天~~~

TOP

那你就用 Dir

我猜到你用 FileLen 為何不行了
你的 EXCEL 檔是 csv 對嗎
我一直幻想著是你的是 xls 檔
xls 檔用FileLen 就可以
csv 檔用FileLen 就有機會出錯 ( 例如 空的 csv 檔)

TOP

回復 8# bobomi

謝謝bobomi協助

不過我的確實是.xls檔

而且我兩個方法都試過了@@

還是不能將同名的檔案保留下來
用功到世界末日那一天~~~

TOP

回復 4# GBKEE

謝謝GBKEE版大

確實可行!!!

太神了!!!

感謝
用功到世界末日那一天~~~

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題