Как запретить запуск макроса Save во второй раз - PullRequest
0 голосов
/ 11 января 2019

У меня есть файл, который многие сотрудники используют для определения цены.

Когда они закончили, они меняют имя файла на то, что им нравится.

Руководство попросило нас указать, где первая часть имени сохранения файла сотрудника является исходным именем файла (поэтому мы знаем версию, которую они используют), а затем вторая часть - это то, что пользователь хочет, чтобы это было. Ex - файл называется org и называется "Rate Calculator v14". Сотрудник хочет назвать файл «Лос-Анджелес, Калифорния - Джон Доу».

Файл должен быть сохранен в определенной папке как «Rate Calculator v14 Los Angeles, CA - John Doe.xlsm».

Это должно происходить независимо от сохранения или сохранения как и независимо от того, выполняется ли это с помощью комбинации клавиш Ctrl + s или с использованием ленты.

Когда запускается последняя строка кода, файл фактически сохраняется, но макрос возвращается к началу цикла и снова спрашивает пользователя, как он хочет сохранить файл (хотя теперь он не будет сохранен, и другое имя, которое они использовали, уже сохранено).

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim strFileName(0 To 2) As String

strFileName(0) = "M:\Sales\Rate Calculators\John\"
strFileName(1) = "Rate Calculator v14"
strFileName(2) = InputBox("What would you like to save the file as?")

ActiveWorkbook.SaveAs FileName:=Join(strFileName), FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub

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

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Ответ:

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim strFileName(0 To 1) As String, sPath As String
    Application.EnableEvents = False
    Cancel = True

    sPath = "M:\Sales\Rate Calculators\John"
    strFileName(0) = "Rate Calculator v14"
    strFileName(1) = InputBox("What would you like to save the file as?")

    ActiveWorkbook.SaveAs Filename:=sPath & "\" & Join(strFileName), FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.EnableEvents = True
End Sub
0 голосов
/ 11 января 2019

Попробуйте

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim strFileName(0 To 1) As String, sPath As String

sPath = "M:\Sales\Rate Calculators\John\"
strFileName(0) = "Rate Calculator v14"
strFileName(1) = InputBox("What would you like to save the file as?")

ActiveWorkbook.SaveCopyAs Filename:=sPath & "\" & Join(strFileName) & ".xlsx"

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