Пытаюсь макросом сохранить файл в виде шаблона Excel 2003-2007. В принципе сохраняет, но вот есть проблема с путем сохранения. Каждый раз приходится искать место откуда был запущен исходный файл, что бы новый сохранить в ту же папку. Почему-то не подхватывается путь базового расположения файла.
[vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
If SaveAsUI Then Dim sFileName As String Application.EnableEvents = False sFileName = Application.GetSaveAsFilename ThisWorkbook.SaveAs sFileName & IIf(Right(ThisWorkbook.Path & "\" & sFileName, 3) <> "xlt", "xlt", ""), xlExcel8 Cancel = True: SaveAsUI = False: Application.EnableEvents = True End If
End Sub
[/vba]
Подскажите в чем проблема?
Пытаюсь макросом сохранить файл в виде шаблона Excel 2003-2007. В принципе сохраняет, но вот есть проблема с путем сохранения. Каждый раз приходится искать место откуда был запущен исходный файл, что бы новый сохранить в ту же папку. Почему-то не подхватывается путь базового расположения файла.
[vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
If SaveAsUI Then Dim sFileName As String Application.EnableEvents = False sFileName = Application.GetSaveAsFilename ThisWorkbook.SaveAs sFileName & IIf(Right(ThisWorkbook.Path & "\" & sFileName, 3) <> "xlt", "xlt", ""), xlExcel8 Cancel = True: SaveAsUI = False: Application.EnableEvents = True End If
Можно всё-таки на моем примере показать как воспользоваться FileDialog, что бы путь подхватывался корректно? С готовыми решениями я не разобрался
Можно всё-таки на моем примере показать как воспользоваться FileDialog, что бы путь подхватывался корректно? С готовыми решениями я не разобрался Stork4ever
Сообщение отредактировал Stork4ever - Суббота, 28.11.2015, 10:24
Выяснились некоторые дополнительные обстоятельства, которые проясняют причину, но усложняют данную задачу.
Изначально запускается именно шаблон *.xlt Это значит, что в открывающемся уже *.xls файле нет связи с исходным шаблоном и соответствено с путем его нахождения, т.е. Excel не хранит информацию об исходном шаблоне.
Вопрос. Может все-таки есть какой-нибудь способ получить недостающие данные, или передавать их при открытии шаблона?
Выяснились некоторые дополнительные обстоятельства, которые проясняют причину, но усложняют данную задачу.
Изначально запускается именно шаблон *.xlt Это значит, что в открывающемся уже *.xls файле нет связи с исходным шаблоном и соответствено с путем его нахождения, т.е. Excel не хранит информацию об исходном шаблоне.
Вопрос. Может все-таки есть какой-нибудь способ получить недостающие данные, или передавать их при открытии шаблона?Stork4ever
Нет, не поможет. Если при сохранении вручную выбрать сохранение в виде шаблона, то такое переключение действительно происходит на папку с шаблонами. В моём варианте (мой первый пост) пользователь не может сохранить файл перезаписав шаблон, который он запустил, и при сохранении файла у него есть возможность сохранить обновленный файл с изменениями только в виде нового файла шаблона. Таким образом можно видеть всю историю изменений и всегда вернуться к предыдущим расчетам. Проблема в том, что запуская файл шаблона нет информации откуда запущен файл, а следовательно нет возможности быстро сохранить измененный файл в туже папку из которой запускался первоначальный шаблон. Приходиться вручную выбирать диск и папки вспоминая структуру вложенности. Что не удобно. Хотелось бы быстро сохранить обновленный файл в ту же папку из которой запускался базовый шаблон.
Нет, не поможет. Если при сохранении вручную выбрать сохранение в виде шаблона, то такое переключение действительно происходит на папку с шаблонами. В моём варианте (мой первый пост) пользователь не может сохранить файл перезаписав шаблон, который он запустил, и при сохранении файла у него есть возможность сохранить обновленный файл с изменениями только в виде нового файла шаблона. Таким образом можно видеть всю историю изменений и всегда вернуться к предыдущим расчетам. Проблема в том, что запуская файл шаблона нет информации откуда запущен файл, а следовательно нет возможности быстро сохранить измененный файл в туже папку из которой запускался первоначальный шаблон. Приходиться вручную выбирать диск и папки вспоминая структуру вложенности. Что не удобно. Хотелось бы быстро сохранить обновленный файл в ту же папку из которой запускался базовый шаблон.Stork4ever
Сообщение отредактировал Stork4ever - Понедельник, 30.11.2015, 22:06
Решил сделать передачу данных о расположении файла через ячейку.
[vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) On Error Resume Next If SaveAsUI Then Dim sFileName As String Dim sPathName As String If ThisWorkbook.Path = "" Then Else Sheets("СМЕТА").Cells(12, 28) = ThisWorkbook.Path End If Application.EnableEvents = False sFileName = Application.GetSaveAsFilename sPathName = Sheets("СМЕТА").Cells(12, 28) MsgBox sPathName & "|" & sFileName ThisWorkbook.SaveAs sFileName & IIf(Right(sPathName & "\" & sFileName, 3) <> "xlt", "xlt", ""), xlExcel8 Cancel = True: SaveAsUI = False: Application.EnableEvents = True End Sub
[/vba] Что-то не так идет - MsgBox sPathName & "|" & sFileName - путь и имя файла выдает, а по факту путь не подхватывает, а имя подхватыват. Открывается диалоговое окно с предложением сохнанить в папку пользователя назначенную по умолчанию системой. В чем проблема?
Решил сделать передачу данных о расположении файла через ячейку.
[vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) On Error Resume Next If SaveAsUI Then Dim sFileName As String Dim sPathName As String If ThisWorkbook.Path = "" Then Else Sheets("СМЕТА").Cells(12, 28) = ThisWorkbook.Path End If Application.EnableEvents = False sFileName = Application.GetSaveAsFilename sPathName = Sheets("СМЕТА").Cells(12, 28) MsgBox sPathName & "|" & sFileName ThisWorkbook.SaveAs sFileName & IIf(Right(sPathName & "\" & sFileName, 3) <> "xlt", "xlt", ""), xlExcel8 Cancel = True: SaveAsUI = False: Application.EnableEvents = True End Sub
[/vba] Что-то не так идет - MsgBox sPathName & "|" & sFileName - путь и имя файла выдает, а по факту путь не подхватывает, а имя подхватыват. Открывается диалоговое окно с предложением сохнанить в папку пользователя назначенную по умолчанию системой. В чем проблема?Stork4ever
Сообщение отредактировал Stork4ever - Вторник, 01.12.2015, 19:06
У меня так и написано. Но при "Сохранить как" открывается диалоговое окно, которое предлагает сохранить в папку "Мои документы" а не в ту, которая назначена для сохранения!
У меня так и написано. Но при "Сохранить как" открывается диалоговое окно, которое предлагает сохранить в папку "Мои документы" а не в ту, которая назначена для сохранения!Stork4ever
Сообщение отредактировал Stork4ever - Вторник, 01.12.2015, 19:14
Хорошо. Пусть такая строка будет для сохранения в xlt!
Но как тогда определить путь откуда был открыт файл шаблона? Excel эти данные вроде как не хранит для шаблонов. Application.GetSaveAsFilename - по умолчанию открывает путь "Мои документы" Имея несколько жестких и сетевых дисков, а также сложную структуру вложенности папок раздражает каждое сохранение скакать по папкам ища, куда сохранить файл :(
Появилась идея при сохранении записать путь в ячейку шаблона, что бы при открытии отуда взять нужный путь. При сохранении, или закрытии файла можно путь прописать в ячейку таблицы, но я никак не могу понять, как его туда подставить. Если брать просто путь, то без Application.GetSaveAsFilename теряется исходное имя шаблона.
....
Еще раз о задаче. Я запускаю, например файл Шаблон.xlt. Вношу изменения и жму сохранение. Мне нужно, что бы скрипт сохранения предложил сохранить измененный файл в виде шаблона в той же папке, но предложил скорректировать текущее имя (обычно открывая Шаблон.xlt открывается Шаблон1.xls, который при попытке сохранения предложит сохранить с именем Шаблон1, но уже xlt).
Если в последствии я отрываю Шаблон1.xlt и вношу изменения, то откроется Шаблон11.xls, который при сохранении должен по умолчанию предложить сохранить файл в ту же папку с именем Шаблон11.xlt (если не менять имя), а если имя изменить на, например Расчет, то получим файл Расчет.xlt
И т.д.
Хорошо. Пусть такая строка будет для сохранения в xlt!
Но как тогда определить путь откуда был открыт файл шаблона? Excel эти данные вроде как не хранит для шаблонов. Application.GetSaveAsFilename - по умолчанию открывает путь "Мои документы" Имея несколько жестких и сетевых дисков, а также сложную структуру вложенности папок раздражает каждое сохранение скакать по папкам ища, куда сохранить файл :(
Появилась идея при сохранении записать путь в ячейку шаблона, что бы при открытии отуда взять нужный путь. При сохранении, или закрытии файла можно путь прописать в ячейку таблицы, но я никак не могу понять, как его туда подставить. Если брать просто путь, то без Application.GetSaveAsFilename теряется исходное имя шаблона.
....
Еще раз о задаче. Я запускаю, например файл Шаблон.xlt. Вношу изменения и жму сохранение. Мне нужно, что бы скрипт сохранения предложил сохранить измененный файл в виде шаблона в той же папке, но предложил скорректировать текущее имя (обычно открывая Шаблон.xlt открывается Шаблон1.xls, который при попытке сохранения предложит сохранить с именем Шаблон1, но уже xlt).
Если в последствии я отрываю Шаблон1.xlt и вношу изменения, то откроется Шаблон11.xls, который при сохранении должен по умолчанию предложить сохранить файл в ту же папку с именем Шаблон11.xlt (если не менять имя), а если имя изменить на, например Расчет, то получим файл Расчет.xlt
Получается что новый файл сохнаняется в любом случае не задавая лишних вопросов и прибалвляя к имени файла 1, если существует указанный в ячейке А1 путь. А потом задает вопрос еще раз куда сохранить? И предлагает сохранить в папке "Мои документы", когда находишь нужный путь, оказывается, что там файл уже сохранен. Можно это как-то причесать, что бы работало так, как описано в посте №15?
Умоляю, помогите!!! Уже четверо суток бъюсь над этой проблемой...
Сделал простенький файл с примером.
Получается что новый файл сохнаняется в любом случае не задавая лишних вопросов и прибалвляя к имени файла 1, если существует указанный в ячейке А1 путь. А потом задает вопрос еще раз куда сохранить? И предлагает сохранить в папке "Мои документы", когда находишь нужный путь, оказывается, что там файл уже сохранен. Можно это как-то причесать, что бы работало так, как описано в посте №15?
Умоляю, помогите!!! Уже четверо суток бъюсь над этой проблемой...Stork4ever
Вставлю 5 копеек. Хоть с шаблонами работал не очень много, но вывел следующее правило. Если хочешь редактировать шаблон как шаблон, то сначал открываешь Excel, щёлкаешь Открыть, находишь папку с шаблоном и открываешь его, указав, что это шаблон. Редактируешь его и сохраняешь. Естественно при этом путь к папке уже известен со времени открытия файла.
А по дабл-клику на шаблоне в Проводнике или иных файл-менеджерах запускается Excel и создается новая книга НА БАЗЕ ШАБЛОНА. С добавлением очередной циферки в конец имени нового файла: 1, 2 и т.д. Ну а как иначе? Шаблоны для того и служат, чтобы на их основе легко и просто создавались новые файлы. А если по дабл-клику будут редактироваться сами шаблоны, как пользователю тогда создавать новые файлы НА ИХ БАЗЕ? Конечно, хорошо бы было, чтобы сам шаблон редактировался, например, по дабл-клику с какой-нибудь нажатой Шифт или Контрол, но я про подобные комбинации ничего не слышал...
ИМХО а вообще проблема как-то очень надуманна... впрочем, не знаю, конечно, дерзких планов ТС
Вставлю 5 копеек. Хоть с шаблонами работал не очень много, но вывел следующее правило. Если хочешь редактировать шаблон как шаблон, то сначал открываешь Excel, щёлкаешь Открыть, находишь папку с шаблоном и открываешь его, указав, что это шаблон. Редактируешь его и сохраняешь. Естественно при этом путь к папке уже известен со времени открытия файла.
А по дабл-клику на шаблоне в Проводнике или иных файл-менеджерах запускается Excel и создается новая книга НА БАЗЕ ШАБЛОНА. С добавлением очередной циферки в конец имени нового файла: 1, 2 и т.д. Ну а как иначе? Шаблоны для того и служат, чтобы на их основе легко и просто создавались новые файлы. А если по дабл-клику будут редактироваться сами шаблоны, как пользователю тогда создавать новые файлы НА ИХ БАЗЕ? Конечно, хорошо бы было, чтобы сам шаблон редактировался, например, по дабл-клику с какой-нибудь нажатой Шифт или Контрол, но я про подобные комбинации ничего не слышал...
ИМХО а вообще проблема как-то очень надуманна... впрочем, не знаю, конечно, дерзких планов ТС Gustav
Идея работы шаблонов понятна, но суть вопроса не в этом. Решение уже практически вымучено. Осталось причесать код. Я не программист, поэтому и прошу помощи!
Идея работы шаблонов понятна, но суть вопроса не в этом. Решение уже практически вымучено. Осталось причесать код. Я не программист, поэтому и прошу помощи!Stork4ever