Уважаемые форумчане, вынужден обратиться с вопросом следующего характера: С Вашей же помощью мне удалось из кусочков составить код, который при запуске осуществляет копирование данных с листа Excelи вставляет эти данные на вновь созданный лист Word.
Но мне не удается реализовать заключительный этап своего замысла – мне необходимо вновь созданный файл Word предложить пользователю сохранить в исходной папке (папка где размещается файл Excel) с заготовкой имени файла. При этом команда на сохранение должна отдаваться именно пользователем, а не сохранятся автоматически.
Очень хочу реализовать свой замысел именно следующим образом: 1. Запуск макроса из книги Excel. 2. Копирование данных. 3. Создание листа Word. 4. Вставка данных на лист Word. 5. Вызов диалогового окна для сохранения файла с возможностью редактировать имя файла перед его сохранением. Путь сохранения (по умолчанию) должен быть предложен в папку, в которой сохранен Исходный файл Excel. – здесь мне требуется Ваша помощь!!! 6. После сохранения Пользователем файла завершение работы макроса.
Мне удалось найти решение этой задачи, но только в коде VBA для Word. Перечитал очень много тем, но так и не смог перевести данный код на понятный язык для Excel
Код
Sub MyFileSave() ' если запускать данный код из Word, то он полностью решает мою проблему
Dim sPath As String
sPath = ActiveDocument.Path & "\"
'sPath = ActiveWorkbook.Path & "\" ' для Excel, сэтимвродеудалосьразобраться
With Dialogs(wdDialogFileSaveAs) ' а вот здесь при запуске макроса вылетает ошибка.
.Name = sPath & "Переченьработ_" & Left(ActiveDocument.Paragraphs(2).Range.Text, Len(ActiveDocument.Paragraphs(2).Range.Text) - 1)
.Show
End With
End Sub
Очень прошу Вас помочь мне! Спасибо!
Данная тема близка к моей проблеме, но использовать под свои нужды не смог, так как в диалоговом окне не возможно выбрать расширение файла, а это мне тоже необходимо.
WithDialogs(wdDialogFileSaveAs) ' а вот здесь при запуске макроса вылетает ошибка. ------------ Либо подключите библиотеку ворд в референсах, либо замените вордовские константы на их числовые значение.
Function GetFileName(Optional ByVal Title As String = "Выберите файл для обработки", _
Optional ByVal InitialPath, _
Optional ByVal MyFilter As String) As String
' функция выводит диалоговое окно выбора папки с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
If Not IsMissing(InitialPath) Then
On Error Resume Next: ChDrive Left(InitialPath, 1)
ChDir InitialPath ' выбираем стартовую папку
End If
res = Application.GetOpenFilename(MyFilter, , Title, "Открыть") ' вывод диалогового окна
GetFileName = IIf(VarType(res) = vbBoolean, "", res) ' пустая строка при отказе от выбора
End Function
Sub ПримерИспользования_GetFileName()
ИмяФайла = GetFileName("Заголовок окна", ThisWorkbook.Path, "Документы Ворд (*.doc*),") ' запрашиваем имя файла
' ===================== другие варианты вызова функции =====================
' текстовые файлы, стартовая папка не указана
' ИмяФайла = GetFileName("Выберите текстовый файл", , "Текстовые файлы (*.txt),")
' файлы любого типа из папки "C:\Windows"
' ИмяФайла = GetFileName(, "C:\Windows", "")
' ==========================================================================
If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла
MsgBox "Выбран файл: " & ИмяФайла, vbInformation
End Sub
Александр Моторин написал: как вариант вызвать диалог сохранения вордовский
Александр, спасибо за подсказку! Данной строкой диалог вызывается, однако путь сохранения по умолчанию в "Мои документы", а мне необходимо в папку с исходным файлом Excel, так как исходный файл "кочует" из папки в папку. Кроме того не совсем ясно как прописать "заготовку" имени для созданного файла Word. Как я понял в диалоге отражаются первые слова из текстового документа. Может я что-то упустил из Ваших ответов ниже ... ?
Добрый день, уважаемые форумчане! Выражаю благодарность Александру Моторину за его труд! К сожалению сразу мне не удалось отписаться, был в отъезде.
Короче говоря проследовал я по пути Александра М. на домашнем ПК (Windows Vista, Ofice 2010), но путь мой был не долог. При запуске макроса выдает ошибку activex component can't create object и выделяет следующую строку в коде: ... Dim DLG As CommonDialog Set DLG = New CommonDialog ' здесь ошибка Dim sPath As String ...
В референсах CommonDialog подключен (я его и включал и отключал и снова включал без успеха).
При этом при запуске на рабочем компьютере (наша организация работает в облаке, возможно там более новая версия офиса) он сработал без ошибок (правда там были другие нюансы, но основная задача выполнялась).
Подскажите пожалуйста что мне сделать, чтобы с файлом можно было работать и на домашнем ПК и на рабочем ?
Чтобы работало на всех компах, - про CommonDialog надо забыть
варианты на выбор (взято из постов выше): 1) FunctionGetFileName - функция вызова диалогового окна 2) .Application.Dialogs(84).Show - вызов одного из встроенных в Word / Excel диалоговых окон
Игорь, я рассматривал каждое из этих предложений, возможно не достаточно внимательно и с пониманием, но все же ...
1) FunctionGetFileName - функция вызова диалогового окна - вызывает диалоговое окно, как я понял, именно для открытия файлов, а мне необходимо окно для сохранения файлов.
2) .Application.Dialogs(84).Show - вызов одного из встроенных в Word / Excel диалоговых окон Данной строкой диалог вызывается, однако путь сохранения по умолчанию в "Мои документы", а мне необходимо в папку с исходным файлом Excel, так как исходный файл "кочует" из папки в папку. Кроме того не совсем ясно как прописать "заготовку" имени для созданного файла Word. Как я понял в диалоге отражаются первые слова из ]текстового документа.
Пока продолжаю ковыряться ... Появилась мысль макросом из Excel создать во вновь созданном документе Word макрос, который сразе же и запустить в Ворде. Наверное это не реально, но ...