Получение правильного имени сохранения по умолчанию и каталога сохранения с пробелами в VBA

У меня есть много шаблонов Excel с разными именами. Один из них называется griep-weerstand v4.xlsb. Но мой вопрос касается всех шаблонов.

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

каталог сохранения по умолчанию: M:\Commercie\Marktdata\IRi\Segment ontwikkeling

имя файла по умолчанию (в этом примере): griep-weerstand v4.xlsb

Ниже то, что я пробовал в последний раз:

Sub save_workbook_name()
Dim workbook_Name As Variant
Dim location As String
Dim workbookname As String
Dim workbookdirectory As String
Dim correctfilename As Variant

workbookname = ActiveWorkbook.Name
workbookdirectory = "M:\Commercie\Marktdata\IRi\Segment ontwikkeling\"

correctfilename = """M:\Commercie\Marktdata\IRi\Segment ontwikkeling\" & workbookname & """"
workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb", initialfilename:=correctfilename)

If workbook_Name <> False Then

    ActiveWorkbook.SaveAs Filename:=workbook_Name, FileFormat:=50

End If
End Sub

Я думал, что чтение имени рабочей книги в виде строки и добавление правильного количества кавычек в комбинированный initialfilename поможет.

Когда я добавляю окно сообщения, отображающее объединенный результат, я получаю правильный путь и имя:

введите здесь описание изображения

Но я продолжаю иметь диалоговое окно «Сохранить как» в правильном каталоге, но без имени файла при использовании этого в строке «getaveasfilename».

Как я могу заставить комбинацию каталога и имени файла работать с getsaveasfilename? Или я должен просто использовать его в сценарии activeworkbook.saveas?


person DutchArjo    schedule 29.10.2018    source источник
comment
Очевидно, что GetSaveAsFilename не любит двойные кавычки, если имя файла включено: "M:\Commercie\Marktdata\IRi\Segment ontwikkeling\" & workbookname должно работать.   -  person Pᴇʜ    schedule 29.10.2018
comment
correctfilename = workbookdirectory & ActiveWorkbook.Name будет самым чистым.   -  person z32a7ul    schedule 29.10.2018
comment
верно, но поскольку он работал не так, как я хотел, я изменил его.   -  person DutchArjo    schedule 29.10.2018


Ответы (2)


Это кажется немного сложным - вы не пробовали проще:

workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), 
*.xlsb", initialfilename:=workbookdirectory & ActiveWorkbook.Name)

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

Sub save_workbook_name()
Dim workbook_Name As Variant
Dim location As String
Dim workbookname As String
Dim workbookdirectory As String
Dim correctfilename As Variant

'workbookname = ActiveWorkbook.Name
workbookdirectory = "C:\Users\myusername\folder with spaces too\"

'correctfilename = """M:\Commercie\Marktdata\IRi\Segment ontwikkeling\" & workbookname & """"
workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb", InitialFileName:=workbookdirectory & ActiveWorkbook.Name)

If workbook_Name <> False Then

    ActiveWorkbook.SaveAs Filename:=workbook_Name, FileFormat:=50

End If
End Sub
person Bertrand Leroy    schedule 29.10.2018
comment
Поскольку мне приходилось использовать кавычки для правильного расположения каталога, я подумал, что они также нужны мне для правильного использования имени файла. Оказалось, что это не так. - person DutchArjo; 29.10.2018
comment
Ген проблема! и не стесняйтесь отмечать мой ответ как правильный ответ;) - person Bertrand Leroy; 29.10.2018

Не знаю, правильно ли я вас понял, но вы можете попробовать что-то вроде этого:

Dim actWb As Workbook
Dim newName As String

Set actWb = ActiveWorkbook
newName = "M:\Commercie\Marktdata\IRi\Segment ontwikkeling\" & actWb.Name
actWb.SaveAs newName
person BOB    schedule 29.10.2018