Макрос Excel — Автоматическое имя файла

#excel #vba #filenames #auto-increment

Вопрос:

Решено, спасибо

У меня есть макросы, которые создают файлы экспорта для наших данных. Мы создаем много файлов каждый день, поэтому я пытаюсь настроить несколько вещей.

В конце макроса я хотел бы сохранить файл как .xlsx с именем файла, в котором используется добавочный номер партии и сегодняшняя дата.

Примеры имен файлов в папке:

B001 Экспорт имени клиента 051121

B002 Экспорт имени клиента 091121

B003 Экспорт имени клиента 101121

Есть ли какой-либо способ автоматизировать добавочное число? Используйте 1 для наибольшего значения.

Затем следующий файл будет сохранен как Экспорт имени клиента B004 <сегодняшняя дата>

Мне удалось заполнить окно сообщения, в котором отображается текущее наибольшее число, моя трудность заключается в том, чтобы использовать это для сохранения документа со следующим номером

 Option Explicit

Public Sub Example()
Const FolderPath = "Z:"
Const FileExt = "xlsx"
Debug.Print GetNextFileNum(FolderPath, FileExt)
End Sub

Public Function GetNextFileNum(ByVal TargetFolder As String, ByVal Extension As String) As Integer
Dim Folder As Object, File As Object

With CreateObject("Scripting.FileSystemObject")
    Set Folder = .GetFolder(TargetFolder)
    For Each File In Folder.Files
        If IsNumeric(Mid(File.Name, 2, 3)) And FileExt(File.Name) = Extension Then
            GetNextFileNum = IIf(CInt(Mid(File.Name, 2, 3)) > GetNextFileNum, CInt(Mid(File.Name, 2, 3)), GetNextFileNum)
        End If
    Next File
End With

GetNextFileNum = GetNextFileNum   1

  ActiveWorkbook.SaveAs Filename:= _
    "Z:" amp; "F00" amp; GetNextFileNum amp; " 
One " amp; _
    Format(Date, "ddmmyy") amp; ".xlsx" _
    , FileFormat:=xlOpenXMLStrictWorkbook, CreateBackup:=False

End Function

Public Function FileExt(ByVal Path As String) As String
With CreateObject("Scripting.FileSystemObject"): FileExt = .GetExtensionName(Path): End With
End Function
 

Комментарии:

1. С чем конкретно у вас возникли трудности?

Ответ №1:

Тоби.

Вы можете попробовать что-то вроде этого.

 Sub LoopThroughFiles()
 
Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim i As Integer
 
Set oFSO = CreateObject("Scripting.FileSystemObject")
AcFolder = ActiveWorkbook.Path
 
Set oFolder = oFSO.GetFolder(AcFolder)
 
Bigger = 0
 
For Each oFile In oFolder.Files
    If Left(oFile.Name, 1) = "B" Then
       If CInt(Mid(oFile.Name, 2, 3)) > Bigger Then
          Bigger = CInt(Mid(oFile.Name, 2, 3))
       End If
    End If
Next oFile
    
    NextNumber = Bigger   1
    MsgBox NextNumber
     
End Sub