Осваиваю VBA понемногу и столкнулся со следующей задачей: нужно сохранять файл в выбираемую локацию с определенным именем файла. То есть стандартное окно сохранения SAVEAS, но где в строке названия уже прописано название файла, которое, при необходимости, можно отредактировать. (если такое вообще возможно ) Что смог родить из интерната и своими ограниченными знаниями:
[vba]
Код
If Not Application.Dialogs(xlDialogSaveAs).Show(Sheets("Техлист").Range("K2").Value & ".xlsx") Then MsgBox "Книга не сохранена! Требуется сохранение вручную.", vbExclamation End If
[/vba] Но выдает стандартное окно для сохранения без названия файла. Буду очень рад, если сможете помочь. [offtop]лет 7 на форуме не был, в свое время очень хорошо прокачал excel тут =)
Привет форумчане!
Осваиваю VBA понемногу и столкнулся со следующей задачей: нужно сохранять файл в выбираемую локацию с определенным именем файла. То есть стандартное окно сохранения SAVEAS, но где в строке названия уже прописано название файла, которое, при необходимости, можно отредактировать. (если такое вообще возможно ) Что смог родить из интерната и своими ограниченными знаниями:
[vba]
Код
If Not Application.Dialogs(xlDialogSaveAs).Show(Sheets("Техлист").Range("K2").Value & ".xlsx") Then MsgBox "Книга не сохранена! Требуется сохранение вручную.", vbExclamation End If
[/vba] Но выдает стандартное окно для сохранения без названия файла. Буду очень рад, если сможете помочь. [offtop]лет 7 на форуме не был, в свое время очень хорошо прокачал excel тут =)akatorginak
Если кому не сложно, подскажите глупышу, можно ли как то доработать макрос, чтобы в открывающемся меню сохранения 1ым предлагаемым вариантом сохранения было расширение .xlsx [vba]
Код
Sub Сохранение()
With Application.FileDialog(msoFileDialogSaveAs) .InitialFileName = Sheets("Техлист").Range("K2").Value & ".xlsx" .Show .Execute End With
End Sub
[/vba]
Попытался в своем варианте добавить & ".xlsx" - не работает
Форумчане!
Если кому не сложно, подскажите глупышу, можно ли как то доработать макрос, чтобы в открывающемся меню сохранения 1ым предлагаемым вариантом сохранения было расширение .xlsx [vba]
Код
Sub Сохранение()
With Application.FileDialog(msoFileDialogSaveAs) .InitialFileName = Sheets("Техлист").Range("K2").Value & ".xlsx" .Show .Execute End With
End Sub
[/vba]
Попытался в своем варианте добавить & ".xlsx" - не работает akatorginak
Sub Срхранение2() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Sheets("ТехЛист").Range("K2").Value, _ FileFilter:="Excel files(*.xlsm*),*.xlsm*", _ FilterIndex:=2, _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If
ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=ThisWorkbook.FileFormat End Sub
[/vba]
Но сохраняет вообще непонятно в каком формате файл
Я смог "родить" это:
[vba]
Код
Sub Срхранение2() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Sheets("ТехЛист").Range("K2").Value, _ FileFilter:="Excel files(*.xlsm*),*.xlsm*", _ FilterIndex:=2, _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If
ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=ThisWorkbook.FileFormat End Sub
[/vba]
Но сохраняет вообще непонятно в каком формате файл akatorginak
Сообщение отредактировал akatorginak - Пятница, 15.07.2022, 10:31
У меня сохраняет нормально. Поскольку файла нет, то и ответить нечего. И вопрос - зачем вам диалог, если вы сохраняете с фиксированным именем из ячейки?
У меня сохраняет нормально. Поскольку файла нет, то и ответить нечего. И вопрос - зачем вам диалог, если вы сохраняете с фиксированным именем из ячейки?RAN
Ваш макрос работает нормально, но в диалоговом окне сохранения априори ставит Книга excel, а не Книга excel с поддержкой макросов, что вызывает множество проблем у операторов файла. Диалог нужен, чтобы перед сохранением, при необходимости, можно было скорректировать имя файла и выбрать из стандартного меню сохранения путь к сохранению файла. 2ой Вариант макроса сохраняет файл с типом файла по концу названия файла, то есть насколько я понял, вообще не задает формат файла.
Я к сожалению, по политике конфиденциальности не могу ничего подгрузить вообще:(
Ваш макрос работает нормально, но в диалоговом окне сохранения априори ставит Книга excel, а не Книга excel с поддержкой макросов, что вызывает множество проблем у операторов файла. Диалог нужен, чтобы перед сохранением, при необходимости, можно было скорректировать имя файла и выбрать из стандартного меню сохранения путь к сохранению файла. 2ой Вариант макроса сохраняет файл с типом файла по концу названия файла, то есть насколько я понял, вообще не задает формат файла.akatorginak
открывающемся меню сохранения 1ым предлагаемым вариантом сохранения было расширение .xlsx
Кстати, я не понял - зачем вам сохранять книгу с макросами в xlsx?
Хорошо, вот с выбором [vba]
Код
Sub ShowGetSaveAsDialod() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Range("K2").Value, _ FileFilter:="Формат xlsx(*.xlsx),*.xlsx, Формат xlsm(*.xlsm),*.xlsm", _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If If Right(sToSavePath, 1) = "x" Then ff_ = 51 Else ff_ = 52 End If ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=ff_ End Sub
[/vba]
Вот без выбора, сразу в xlsm [vba]
Код
Sub tt() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Range("K2").Value, _ FileFilter:="Формат xlsm(*.xlsm),*.xlsm", _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=52 End Sub
[/vba]
В К2 написано вот так (без расширения) d:\Стереть\1854392
открывающемся меню сохранения 1ым предлагаемым вариантом сохранения было расширение .xlsx
Кстати, я не понял - зачем вам сохранять книгу с макросами в xlsx?
Хорошо, вот с выбором [vba]
Код
Sub ShowGetSaveAsDialod() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Range("K2").Value, _ FileFilter:="Формат xlsx(*.xlsx),*.xlsx, Формат xlsm(*.xlsm),*.xlsm", _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If If Right(sToSavePath, 1) = "x" Then ff_ = 51 Else ff_ = 52 End If ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=ff_ End Sub
[/vba]
Вот без выбора, сразу в xlsm [vba]
Код
Sub tt() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Range("K2").Value, _ FileFilter:="Формат xlsm(*.xlsm),*.xlsm", _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=52 End Sub
[/vba]
В К2 написано вот так (без расширения) d:\Стереть\1854392_Boroda_
Sub Сохранение2() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Sheets("ТехЛист").Range("K2").Value, _ FileFilter:="Формат xlsm(*.xlsm),*.xlsm", _ FilterIndex:=2, _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If
ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=52 End Sub
[/vba]
_Boroda_, ваш не работал, сравнил со своим, добавил FilterIndex:=2, _заработало ровно так, как и должно! Спасибо огромное!
Оффтоп вопрос - не в курсе куда написать по поводу восстановления старого профиля на сайте?
[vba]
Код
Sub Сохранение2() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Sheets("ТехЛист").Range("K2").Value, _ FileFilter:="Формат xlsm(*.xlsm),*.xlsm", _ FilterIndex:=2, _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If
ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=52 End Sub
[/vba]
_Boroda_, ваш не работал, сравнил со своим, добавил FilterIndex:=2, _заработало ровно так, как и должно! Спасибо огромное!
Оффтоп вопрос - не в курсе куда написать по поводу восстановления старого профиля на сайте?akatorginak
У меня функционал работал, но не выдавал предлагаемое имя файла. Добавил эту строчку - имя файла опять начало отображаться, все остальное сравнил - один в один Ладно, вспоминая старый мем с голубем - работает: не трогай!
У меня функционал работал, но не выдавал предлагаемое имя файла. Добавил эту строчку - имя файла опять начало отображаться, все остальное сравнил - один в один Ладно, вспоминая старый мем с голубем - работает: не трогай! akatorginak
Еще раз попробовал все вариации, работает только в таком виде как надо: [vba]
Код
Sub Сохранение() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Sheets("Техлист").Range("K2").Value, _ FileFilter:="Excel files(*.xlsm),*.xlsm", _ FilterIndex:=2, _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If
ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=ThisWorkbook.FileFormat End Sub
[/vba] Или если последнюю строчку так прописать: [vba]
Согласен, в моем варианте немного бредово - но почему то работает только в таком варианте, без данной строки или со значением "1" не выдает название файла в форме сохранения, просто пустое место.
Еще раз попробовал все вариации, работает только в таком виде как надо: [vba]
Код
Sub Сохранение() Dim sToSavePath sToSavePath = Application.GetSaveAsFilename( _ InitialFileName:=Sheets("Техлист").Range("K2").Value, _ FileFilter:="Excel files(*.xlsm),*.xlsm", _ FilterIndex:=2, _ Title:="Сохранить файл") If VarType(sToSavePath) = vbBoolean Then Exit Sub End If
ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=ThisWorkbook.FileFormat End Sub
[/vba] Или если последнюю строчку так прописать: [vba]
Согласен, в моем варианте немного бредово - но почему то работает только в таком варианте, без данной строки или со значением "1" не выдает название файла в форме сохранения, просто пустое место.akatorginak