Как я могу убедиться, что мой код VBA не перезаписывает существующие файлы при сохранении?

Пример: я сохраняю каждый лист как новую книгу и хочу иметь v1, v2, v3 и т. д. С помощью приведенного ниже кода я всегда перезаписываю существующий файл, так как каждый сохраняемый файл содержит то же имя файла с окончанием "_V1" ...

    NewWbName = Left(wbSource.Name, InStr(wbSource.Name, ".") - 1)

For i = 1 To 9
    'check for existence of proposed filename
    If Len(Dir(wbSource.Path & Application.PathSeparator & NewWbName & "_V" & i & ".xlsx")) = 0 Then
        wbTemplate.SaveAs wbSource.Path & Application.PathSeparator & NewWbName & "_V" & i & ".xlsx"
        Exit For
    End If
Next i

If i > 9 Then
    '_V1.xlsx through _V9.xlsx already used; deal with this situation
    MsgBox "out of options"

      wbTemplate.Close False 'close template
    Next wsSource

    wbSource.Close False 'close source


End If
End Sub
1
PlutoX 25 Сен 2018 в 10:10

2 ответа

Лучший ответ

Просматривайте различные варианты _V n .xlsx, пока не найдете тот, которого там нет.

dim i as long, NewWbName as string

NewWbName = Left(wbSource.Name, InStr(wbSource.Name, ".") - 1)

for i=1 to 9
    'check for existence of proposed filename
    if len(dir(wbSource.Path & Application.PathSeparator & NewWbName & "_V" & i & ".xlsx")) = 0 then
        wbTemplate.SaveAs wbSource.Path & Application.PathSeparator & NewWbName & "_V" & i & ".xlsx"
        exit for
    end if
next i

if i>9 then
    '_V1.xlsx through _V9.xlsx already used; deal with this situation
    msgbox "out of options"
end if

Если вы собираетесь преобразовать цикл в двузначные числа, возможно, будет лучше ... & "_V" & Format(i, "00") & ".xlsx, чтобы папка, отсортированная по имени, располагала их в правильном порядке.

3
Chronocidal 25 Сен 2018 в 07:38

Рекомендую использовать дату и время для стольких версий.

«V» и формат (дата, «ггггммдд») и формат (время, «ччммсс») и «.xlsx»

Да, вы все равно можете проверить существующий файл, но пользователь редко отправляет ввод менее чем за секунду.

0
Chris Duncan 26 Сен 2018 в 01:16