VBA: при выводе метода SaveCopyAs не удается найти файл - PullRequest
0 голосов
/ 03 июля 2019

Я изменяю шаблон диаграммы Ганта Excel, который я нашел в сети для Vertex42 для дополнительной функциональности.

Одна из этих модификаций - это флажок внутри листа под названием «Конфигурация», который, когда отмечен, создает резервную копиюдиаграмму Ганта при каждом открытии документа.

По какой-то причине я не могу заставить эту простую задачу работать.

Я пробовал использовать оба флажка: «Управление формой» и «Управление ActiveX», сразные сообщения об ошибках.Насколько я могу судить, элементы управления Form не рекомендуются, поэтому я использую приведенный ниже код в объекте Excel ThisWorkbook, основываясь на том, что я видел в Интернете.

Private Sub Workbook_open()
    Dim backupFilename As String
    Dim formattedDateTime As String

    If Sheets("Config").OLEObjects("AutoBackupCheckbox").Object.Value = True Then
        formattedDateTime = Format(Now, "d-MMMM-yyyy, h:mm:ss")
        backupfilename = Replace(ActiveWorkbook.Name, ".xlsm", " - backup " & DateTime & ".xlsm")
        ActiveWorkbook.SaveCopyAs (backupfilename)
    End If
End Sub

Этот код заставляет менясообщение об ошибке всякий раз, когда я открываю документ или запускаю отладчик,

Run-time error '1004':

Sorry, we couldn't find the <filename> - backup <day>-<month>-<year>, <hour>:<minute>:<seconds>.xlsm. Is it possible it was moved, renamed or deleted?

Есть идеи?

ОБНОВЛЕНИЕ: После запуска отладчика он жалуется на строку ActiveWorkbook.SaveAs.

ОБНОВЛЕНИЕ 2: изменен формат 'backupFilename', чтобы удалить '.xlsm' в середине.

ОБНОВЛЕНИЕ 3: Заменена дата на дату / время без косой черты, и заменено SaveAs на SaveCopyAs.Обновлено сообщение об ошибке.

1 Ответ

0 голосов
/ 04 июля 2019

В аргументе для вызова SaveCopyAs отсутствует путь к файлу.

Заменить код на

Private Sub Workbook_open()
    Dim backupFilename As String
    Dim formattedDate As String
    Dim tempFilename As String
    Dim workingPath As String
    Dim i As Integer
    i = 1

    If Sheets("Config").OLEObjects("AutoBackupCheckbox").Object.Value = True Then
        formattedDate = Format(Date, "d-MMMM-yyyy, ver " & i)
        workingPath = Application.ActiveWorkbook.FullName
        backupFilename = Replace(workingPath, ".xlsm", " - backup " & formattedDate & ".xlsm")
        tempFilename = Dir(backupFilename)

        While tempFilename <> "" ' if file already exists
            i = i + 1
            formattedDate = Format(Date, "d-MMMM-yyyy, ver " & i)
            backupFilename = Replace(workingPath, ".xlsm", " - backup " & formattedDate & ".xlsm")
            tempFilename = Dir(backupFilename)
        Wend

        ActiveWorkbook.SaveCopyAs (backupFilename)
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...