2016-03-04 47 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

相关问题