2016-03-04 83 views
1

我需要做一個循環,將編輯後的文件保存在數字順序的文件夾中,但如果我再次運行宏,它需要從最後一個數字不斷:循環來檢查文件是否存在,而不DIR功能

wb.SaveAs "C:\User\Desktop\Data\" & i & ".dat" 
i = i + 1 

此處代碼按順序保存文件(1,2,3)。如果我再次運行宏,它需要保存(4,5,6)。

我試圖用高於這個循環保存功能:

Do While Dir("C:\User\Desktop\Data\" & i & ".dat") = i 
    i = i + 1 
Loop 

但很顯然,因爲我已經在使用它在循環結束時得到我不能使用DIR功能,下一個文件和循環中斷。

'Get next file name 
MyFile = Dir 

那麼,有什麼辦法可以做到這一點?我試圖做一個函數,檢查並返回truefalse是否具有該編號的文件已經存在,但無法使其工作。謝謝您的幫助。

+0

可以使用'filesystemobject'檢查文件是否存在:它有一個'FILEEXISTS()'方法。 https://msdn.microsoft.com/en-us/library/x23stk5t(v=vs.84).aspx –

+0

嗡嗡聲,感謝提示,我不知道如何使用它,但我會繼續努力。 – Mike

+0

請參閱下面@Mike,讓我知道它是否符合你的要求... –

回答

0

你可以得到目錄中最大的數字,並繼續從那裏?

此代碼假設所有文件均按如下名稱命名:[numericalfilename].[extension]例如"143.dat"。如果有一旦定義PathExtension變量的文件名(除擴展名)

字母字符,該代碼將無法正常工作,你可以調用函數NextNumber,這將給你[MaxNumber_In_Directory] + 1

從這裏您就可以執行「保存環」,通過設置i = NextNumber(Path, "*." & Ext)

Sub test() 
Dim Path As String 
Dim Ext As String 
Dim i as Long 

' ***** REPLACE VARIABLES ****** 

    Path = "C:\New\New Folder" 
    Ext = "dat" 

' ****************************** 

    i = NextNumber("C:\New\New Folder", "*." & Ext) 

' ******************************** 
' **** PERFORM SAVE CODE HERE **** 
' ******************************** 

    'I am not 100% sure of your save loop, you'll need to modify this 

    wb.SaveAs "C:\User\Desktop\Data\" & i & ".dat" 
    i = i + 1 


End Sub 




Public Function NextNumber(strPath As String, strExt As String) As Long 
Dim vArray(500) 
Dim i As Long 
Dim length As Long 
ChDir strPath 
strExtension = Dir(strExt) 

     'Perform Loop 
     Do While strExtension <> "" 
      length = Len(strExtension) - (Len(strExt) - 2) - 1 
      vArray(i) = CLng(Mid(strExtension, 1, length)) 
      i = i + 1 
      strExtension = Dir 
     Loop 

NextNumber = WorksheetFunction.Max(vArray) + 1 

End Function 
+0

是的,謝謝你,我設法使你的代碼工作。 – Mike

相關問題