Как сделать уникальное имя сохраняемого документа VBA excel. Например Test0, Test1 и тд
Public Sub ButtonSave_Click()
Workbooks.Add
FiNum = 0
FiName = "C:\Users\svv71\Desktop\Test\Test" & FiNum & ".xlsx"
ActiveWorkbook.SaveAs Filename:=FiName
FiNum = FiNum + 1
ActiveWorkbook.Close
End Sub
Ответы (2 шт):
Автор решения: rotabor
→ Ссылка
Примерно так:
Sub sxfgsdf()
Dim FiNum As Integer, FiName As String
FiName = "C:\Users\svv71\Desktop\Test\Test"
While Dir(FiName & FiNum & ".xlsx") <> ""
FiNum = FiNum + 1 ' циклим и инкрементируем, пока такой файл есть
Wend
ActiveWorkbook.SaveAs Filename := FiName & FiNum & ".xlsx"
End Sub
Если вам нужно вообще уникальное имя, то его нужно сохранять где-то в книге. Можно сделать новый лист Misc (например) и скрыть его.
Sub sxfgsdf()
Dim FiNum As Integer, FiName As String
FiName = "C:\Users\svv71\Desktop\Test\Test"
FiNum = Sheets("Misc").Cells(1, 1) + 1
While Dir(FiName & FiNum & ".xlsx") <> ""
FiNum = FiNum + 1 ' циклим и инкрементируем, пока такой файл есть
Wend
Sheets("Misc").Cells(1, 1) = FiNum ' счётчик будет в последней сохранённой книге
ActiveWorkbook.SaveAs Filename := FiName & FiNum & ".xlsx"
End Sub
Автономно счётчик можно хранить в отдельном файле.
Автор решения: Алексей Р
→ Ссылка
Вариант с использованием CustomDocumentProperties
Option Explicit
Sub UniqNameSave()
Const CDP_NAME = "Version", BASE_NAME = "Test*.xlsx"
Dim Version As Object
With ActiveWorkbook.CustomDocumentProperties
On Error Resume Next
Set Version = .Item(CDP_NAME) ' пытаемся извлечь свойство с номером версии книги
On Error GoTo 0
If Version Is Nothing Then ' если свойства еще нет, то добавляем его и устанавливаем начальное значение
.Add Name:=CDP_NAME, LinkToContent:=False, Type:=msoPropertyTypeNumber, Value:=0
Else
Version = Version + 1 ' если свойство уже существует, инкрементируем
End If
ActiveWorkbook.SaveAs Replace(BASE_NAME, "*", Format(Version, "000")) ' сохраняем книгу, добавляя номер версии из свойства и форматируя
End With
End Sub
Test016.xlsx
Test015.xlsx
Test014.xlsx
Test013.xlsx
Test012.xlsx
...