循环检查文件是否存在而没有DIR功能

时间:2016-03-04 00:02:20

标签: excel vba

我需要创建一个循环,将编辑后的文件按数字顺序保存在文件夹中,但如果我再次运行宏,则需要保留最后一个数字:

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以确定具有该数字的文件是否已存在,但无法使其正常工作。谢谢你的帮助。

1 个答案:

答案 0 :(得分: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
相关问题