Уважаемые форумчане, вынужден обратиться с вопросом следующего характера:
С Вашей же помощью мне удалось из кусочков составить код, который при запуске осуществляет копирование данных с листа 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 |
Очень прошу Вас помочь мне!
Спасибо!
Данная тема близка к моей проблеме
, но использовать под свои нужды не смог, так как в диалоговом окне не возможно выбрать расширение файла, а это мне тоже необходимо.
Пример прилагаю.
Всем привет, с вами автор блога scriptcoding.ru. Данная публикация рассматривает сохранение документа в Word с помощью программирования и с помощью рядовых методов системы Windows.
По сути, что тут может быть особенно – нажал на кнопку «Сохранить» или «Сохранить Как» и все, радуйся жизни. Но, так как я очень люблю оперировать, тьфу ты… программировать, то я решил рассмотреть решение данной задачи программным путем.
Из всей объектной модели Word, компонентами, которые предоставляют средства для сохранения в ворде документа, являются объект Documentи коллекция Documents. По сути, у объекта Document есть два метода: Save и SaveAs, которые соответствуют диалоговым окнам «Сохранить» и «Сохранить Как«, а коллекция предоставляет только метод Save. Я уже рассматривал данный объект и коллекцию, но не углублялся в методы Save и SaveAs, а все потому, что у метода SaveAs огромное количество параметров, описание которых тянет на отдельную статью. Вот я и решил собрать все это воедино, и описать.
Объект Document – сохранение в ворде
Save(NoPrompt, OriginalFormat) – Показывает, как в ворде сохранить все файлы, которые входят в коллекцию Documents.
NoPrompt – Если значение true, то Word автоматически сохранит все файлы. Если значение false — Word предложит пользователю сохранить каждый файл, изменившийся с момента последнего сохранения.
OriginalFormat — Определяет, как документы будут сохранены в ворде. Содержит значение константы WdOriginalFormat:
- wdOriginalDocumentFormat — 1 — Оригинальный формат.
- wdPromptUser — 2 – Пользователю будет предложено выбрать формат.
- wdWordDocument — 0 – Формат Microsoft Word.
Если сохранение в ворде ранее не производилось, то диалоговое окно «Сохранить как» запросит у пользователя имя файла.
SaveAs(FileName, FileFormat, LockComments, Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended, EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, SaveAsAOCELetter, Encoding, InsertLineBreaks, AllowSubstitutions, LineEnding, AddBiDiMarks, CompatibilityMode) – Сохранение файла Word с новым именем или форматом (Диалоговое окно «Сохранить Как»).
FileName – Позволяет задать путь и имя сохраняемого файла в ворде. Если задать только имя файла, то произойдет сохранение в ворд в папке по умолчанию – «Мои Документы». Если документ с таким именем уже существует, то произойдет перезапись без уведомления пользователя.
FileFormat – Задаем формат, в котором сохраняется документ в Word. Значение константы WdSaveFormat.
Константа WdSaveFormatпозволяет задать формат PDF (wdFormatPDF – 17) или XPS(wdFormatXPS — 18). Однако, что бы сохранить в ворде файл в этих форматах, вам придется установить расширение SaveAsPDFandXPS, которое доступно на сайте Майкрософт. Смотрите статью «Как в ворде сохранить документ в PDF формате»
LockComments – Содержит логические значения, true — заблокировать документ для комментариев. По умолчанию используется false.
Password – Пароль для открытия.
AddToRecentFiles – Содержит логическое значение, true — добавить документ в список недавно использовавшихся в меню Файл. По умолчанию используется True.
WritePassword — Пароль для сохранения в ворде изменений.
ReadOnlyRecommended — Содержит логические значения, true – открывать только для чтения. По умолчанию используется False.
EmbedTrueTypeFonts — Содержит логические значения, true – сохранить TrueType шрифты вместе с документом.
SaveNativePictureFormat – Параметр используется, если графики были импортированы из другой платформы (например, Macintosh). true — сохранить в ворд только версию Microsoft Windows импортируемых графиков.
SaveFormsData –true — сохранить в ворд данные, введенные пользователем в форме в виде записи.
SaveAsAOCELetter – Параметр актуален, если документ имеет прикрепленное почтовое вложение. true – сохраняем документ Word как AOCE письмо.
Encoding – Отвечает за кодировку текста. По умолчанию используется системная кодировка. Параметр должен содержать значение константы MsoEncoding.
InsertLineBreaks – Параметр используется, если происходит сохранение документа в Word в виде текстового файла. true — вставить разрывы строк в конце каждой строки текста.
AllowSubstitutions – Актуально, если файл ворд сохраняется в виде текстового файла. Значение true позволяет Word заменить некоторые символы в тексте их упрощенными аналогами. Например, символа авторского права. По умолчанию используется значение False.
LineEnding – Определяет форматирование строк и абзацев в документах, сохраненных в виде текстовых файлов. Может быть одним из следующих значений константы WdLineEndingType:
- wdCRLF — 0 — возврат каретки и строки.
- wdCROnly — 1 — Возврат только каретки.
AddBiDiMarks – true — добавить управляющие символы в выходной файл.
CompatibilityMode — Режим совместимости, который Word2010 использует при открытии документа. Значение константы WdCompatibilityMode:
- wdCurrent — 65535 — Совместимость режим эквивалентен последней версии Microsoft Word.
- wdWord2003 — 11 — Word2010 введен в режиме, который наиболее совместим с Word2003.
- wdWord2007 — 12 — Word2010 введен в режиме, который наиболее совместим с Office Word2007.
- wdWord2010 — 14 — Word2013 введен в режиме, который наиболее совместим.
- wdWord2013 — 15 — По умолчанию. Все функции Word 2013 включены.
Если данный параметр отсутствует, то принимается значение 0 – сохраняется текущий режим совместимости.
Коллекция Documents – как в ворде сохранить документ
Save(NoPrompt, OriginalFormat) – Метод выполняет ту же функцию, что и Save объекта Document, только для коллекции Documents.
Хорошо, с теорией закончили, теперь привожу два примера программного кода на языке VBScript и JScript, котрые создают новый документ, вставляют в него форматированный текст, содержащий информацию о сервере сценариев Windows Script Host и сохраняют в ворде данный документ в текущем каталоге (каталог, откуда был произведен запуск сценария).
Программный код на языке VBSCRIPT:
' ---------------------------------------------------------------------------- ' Сохранение документа в Word ' SaveAs.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, oFont, oShell, CurDir set oWord = WScript.CreateObject("Word.Application") set oShell = WScript.CreateObject("WScript.Shell") set oDoc = oWord.Documents oDoc.Add() set oSel = oWord.Selection oWord.Visible = True set oFont = oSel.Font CurDir = oShell.CurrentDirectory 'текущая папка with oFont .Size = 20 .Name = "Times New Roman" .Bold=true .Colorindex=2 end with oSel.TypeText "как в ворде сохранить документ" ' word сохранение файла with oFont .Size = 12 .Bold=false .Colorindex=0 end with With oSel .TypeParagraph .TypeParagraph End With With WScript call TXInsert("Name: ", .Name & "") call TXInsert("FullName: ", .FullName & "") call TXInsert("ScriptName: ", .Name & "") call TXInsert("ScriptFullName: ", .FullName & "") call TXInsert("Path: ", .Path & "") call TXInsert("Version: ", .Version & "") call TXInsert("Application: ", .Application & "") call TXInsert("Timeout: ", .Timeout & "") call TXInsert("BuildVersion: ", .BuildVersion & "") End With oDoc(1).SaveAs CurDir & "WscInfo_vbs.doc", 0 ' сохранение в ворде Sub TXInsert(a, b) With oSel oFont.Bold=true .TypeText a .EndOf oFont.Bold=false .TypeText b .TypeParagraph End With End Sub
Программный код на языке JSCRIPT:
// ---------------------------------------------------------------------------- // Сохранение документа в Word // SaveAs.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oFont1, oShell1, CurDir1; oWord1 = WScript.CreateObject("Word.Application"); oShell1 = WScript.CreateObject("WScript.Shell"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel1 = oWord1.Selection; oWord1.Visible = true; oFont1 = oSel1.Font; CurDir1 = oShell1.CurrentDirectory; //текущая папка with(oFont1){ Size = 20; Name = "Times New Roman"; Bold=true; Colorindex=2; } oSel1.TypeText("как в ворде сохранить документ"); // word сохранение файла with(oFont1){ Size = 12; Bold=false; Colorindex=0; } with(oSel1){ TypeParagraph(); TypeParagraph(); } with(WScript){ TXInsert1("Name: ", Name + ""); TXInsert1("FullName: ", FullName + ""); TXInsert1("ScriptName: ", Name + ""); TXInsert1("ScriptFullName: ", FullName + ""); TXInsert1("Path: ", Path + ""); TXInsert1("Version: ", Version + ""); TXInsert1("Application: ", Application + ""); TXInsert1("Timeout: ", Timeout + ""); TXInsert1("BuildVersion: ", BuildVersion + ""); } oDoc1(1).SaveAs(CurDir1 + "\WscInfo_js.doc", 0); // сохранение в ворде function TXInsert1(a, b){ with(oSel1){ oFont1.Bold=true; TypeText(a); EndOf(); oFont1.Bold=false; TypeText(b); TypeParagraph(); } }
И так, с программированием закончили, теперь можно приступить к разбору программного кода. Обратите внимание, что в примере для JSCRIPT я изменил имена переменных, добавив к ним единицу.
В самом начале происходит подключение различных классов и коллекций, которые позволяет подключить объектную модель Word, и создать новый документ. Далее следует объявление переменной CurDir, она будет хранить путь к текущему каталогу, именно в этот каталог произойдет сохранение документа в ворде. Доступ к текущему каталогу осуществляется через класс WScript.Shell – смотрите статью «Объект WScript.Shell метод ExpandEnvironmentStrings и свойство CurrentDirectory — Переменные среды Windows и текущий каталог«.
Далее с помощью класса Font – статья «Объект Word Font — параметры форматирования шрифта«, происходит настройка параметров текста: цвет, размер и так далее. После с помощью метода TypeText класса Selection происходит вставка фразы «как в ворде сохранить документ«, данная фраза также будет отформатирована: жирный шрифт и увеличенный размер символов. После мы дважды вставляет параграф – метод TypeParagraph.
Следующим этапом является использование несколько раз процедуры TXInsert, который будет передаваться два параметра: две текстовые строки. Все происходит так, что процедура вставляет в документ параметры свойств класса WScript – имя свойства и его значение.
После всей проделанной работы происходит вызов метода SaveAs, которые отвечает за сохранение файла Word. В нашем случае, в сценарии на языке VBSCRIPT произойдет сохранение документа в ворде под именем «WscInfo_vbs.doc«, а в сценарии на языке JSCRIPT – сохранение файла в ворде под именем «WscInfo_js.doc«
20 / 6 / 1 Регистрация: 06.03.2010 Сообщений: 74 |
|
1 |
|
27.03.2010, 11:08. Показов 9376. Ответов 19
Доброго всем!
0 |
3895 / 898 / 122 Регистрация: 16.04.2009 Сообщений: 1,824 |
|
27.03.2010, 11:28 |
2 |
покажите код
0 |
Заблокирован |
|
27.03.2010, 11:29 |
3 |
Artemo,
0 |
20 / 6 / 1 Регистрация: 06.03.2010 Сообщений: 74 |
|
27.03.2010, 11:31 [ТС] |
4 |
2 BUSINE2009
0 |
Заблокирован |
||||
27.03.2010, 11:42 |
5 |
|||
Artemo,
Этот макрос надо поместить в меню Файл вместо «Сохранить» и «Сохранить как…» и на Стандартную панель инструментов, вместо кнопки «Сохранить».
0 |
20 / 6 / 1 Регистрация: 06.03.2010 Сообщений: 74 |
|
27.03.2010, 12:04 [ТС] |
6 |
Не знаю, как это сделать. Просто запустить-он не работает
0 |
Заблокирован |
||||
27.03.2010, 12:20 |
7 |
|||
Artemo,
Может в твоём случае не надо вызывать Диалоговое окно «Сохранение документа», а надо как-то автоматизировать Сохранение.
1 |
20 / 6 / 1 Регистрация: 06.03.2010 Сообщений: 74 |
|
27.03.2010, 12:39 [ТС] |
8 |
Спасибо!
0 |
ironegg 1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
||||
27.03.2010, 15:58 |
9 |
|||
не могу найти такого свойства.
для любого приложения с VBA должно работать
1 |
20 / 6 / 1 Регистрация: 06.03.2010 Сообщений: 74 |
|
28.03.2010, 13:26 [ТС] |
10 |
Спасибо! Тоже здоровский объект. И документирован. Есть простор для творчества. Коллеги удивятся теперь, всяко…:-)
0 |
ctac1412 18 / 18 / 2 Регистрация: 12.02.2013 Сообщений: 387 |
||||
19.02.2016, 12:24 |
11 |
|||
добрый день, Буду очень благодарен если у вас есть какие нибудь мысли.
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
19.02.2016, 14:26 |
12 |
|||
ctac1412,
0 |
18 / 18 / 2 Регистрация: 12.02.2013 Сообщений: 387 |
|
19.02.2016, 14:51 |
13 |
я не полный ноль, но по 10 бальной шкале я 1. вот концовка макроса допустм, где копи- я копирую в буфер нужное мне название из самого файла. П.с. я работаю в ворде Selection.Copy Dialogs(wdDialogFileSaveAs) Добавлено через 6 минут
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
19.02.2016, 15:28 |
14 |
|||
ctac1412, так Вы не вручную копируете? Если это будет часть макроса, буфер обмена вообще не надо задействовать
и т.п.
0 |
ctac1412 18 / 18 / 2 Регистрация: 12.02.2013 Сообщений: 387 |
||||||||
20.02.2016, 16:51 |
15 |
|||||||
Казанский, Большое спасибо что тратите на меня время. Хоть и тп мне не ясно, потому что я не знаю разнообразия всех методов и мои макросы наверное такие тупые и нагруженые, а спецы делали бы это все в пару строк)) Если не сложно, не подскажете, как указать в макросе путь куда сохранять и что бы не выскакивало окно выбора пути? Добавлено через 15 минут
Добавлено через 9 минут То есть я скачиваю ворду, перетаскиваю из мозилы в месанджер и менял имя внутри месенджера Добавлено через 20 часов 11 минут
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
20.02.2016, 17:19 |
16 |
|||
я не полный ноль, но по 10 бальной шкале я 1 Тогда ваш первый инструмент — «запись макроса». Включаете запись, производите какие-то действия, (останавливаете запись), смотрите полученный код и т.д.
Мне непонятно, текст 11/11/16-1 для формирования имени Вы вручную находите, или макросом? И нет ли этой информации в Свойствах документа?
1 |
ctac1412 18 / 18 / 2 Регистрация: 12.02.2013 Сообщений: 387 |
||||||||
20.02.2016, 17:56 |
17 |
|||||||
Огромное спасибо. Именно через запись я и учусь. Но не все мои действия он прописывает. С тем же сохранить как. Я сам уже написал для себя 7 макросов, мне кажется они настолько ****ты, и что есть намного проще решения)) Но как есть, черновой вариант все же лучше чем ничего)) Тест я нахожу макросом и переделываю в формат 11_11_16-1. А вообще это все просто конец одного большого макроса с манипуляциями с текстами. Просто хочется что бы макрос логически заканчивался Не подскажете полезную литературу?) Где можно найти описанный вами вариант? Очень сложно уже благодарить всех на этом сайте. Добавлено через 11 минут
Видимо здесь он указывает что док в строчке имени файла, но ведь нам не подходит этот вариант. Что можно сделать? Добавлено через 4 минуты
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||||||
21.02.2016, 00:47 |
18 |
|||||||
Не подскажете полезную литературу? Учебники, справочники, самоучители
Тест я нахожу макросом и переделываю в формат 11_11_16-1 Есть подозрение, что Вы делаете это в документе. Но в VBA есть много функций и операторов для работы со строками!
Тогда записать документ в другую папку с именем, взятым из выделенного диапазона, можно так:
То есть если перед этой командой выделить текст 11/11/16-1 , то файл будет сохранен в
1 |
ctac1412 18 / 18 / 2 Регистрация: 12.02.2013 Сообщений: 387 |
||||
21.02.2016, 01:23 |
19 |
|||
вроде разобрался, даже через пол часа понял как вставить функцию))) Котелок не варит уже… нельзя наверное так быстро пытаться понимать?)
0 |
18 / 18 / 2 Регистрация: 12.02.2013 Сообщений: 387 |
|
22.02.2016, 19:55 |
20 |
Добрый день! Помогите пожалуйста!! Появилась новая потребность. Нужно сохранить файл именем, которое не будет в самом файле, но мы можем его скопировать из предыдущего открытого файла.Может как то по ходу макроса задать свойство доку и взять имя из свойства или какие нибудь еще аферы? или подпись…..
0 |
Создание нового документа Word или открытие существующего из кода VBA Excel. Методы Documents.Add и Documents.Open. Сохранение и закрытие документа.
Работа с Word из кода VBA Excel
Часть 2. Создание и открытие документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Новый документ Word создается из кода VBA Excel с помощью метода Documents.Add:
Sub Test1() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True End Sub |
Переменную myDocument можно объявить с типом Object, но тогда не будет ранней привязки к типу Word.Document и подсказок при написании кода (Auto List Members).
Открытие существующего документа
Существующий документ Word открывается из кода VBA Excel с помощью метода Documents.Open:
Sub Test2() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = _ myWord.Documents.Open(«C:Документ1.docx») myWord.Visible = True End Sub |
Замените в этой процедуре строку «C:Документ1.docx» на адрес своего файла.
Подключение к открытому документу
Присвоение переменной ссылки на существующий экземпляр Word.Application осуществляется в VBA Excel с помощью функции GetObject:
Sub Test3() Dim myWord As Object, myDoc As Word.Document On Error GoTo Instr Set myWord = GetObject(, «Word.Application») Set myDoc = myWord.Documents(«Документ1.docx») myDoc.Range.InsertAfter «Добавляем новый текст, подтверждающий подключение к открытому документу.» Exit Sub Instr: MsgBox «Произошла ошибка: « & Err.Description End Sub |
Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Также произойдет ошибка, если не будет найден указанный документ (в примере — «Документ1.docx»).
Сохранение и закрытие документа
Сохранение нового документа
Чтобы сохранить из кода VBA Excel новый документ Word, используйте метод SaveAs2 объекта Document:
myDocument.SaveAs2 («C:Документ2.docx») |
Замените «C:Документ2.docx» на путь к нужному каталогу с именем файла, под которым вы хотите сохранить новый документ.
Сохранение изменений в открытом документа
Сохраняйте изменения в существующем документе с помощью метода Document.Save или параметра SaveChanges метода Document.Close:
‘Сохранение изменений документа myDocument.Save ‘Сохранение изменений документа ‘при закрытии myDocument.Close ‘по умолчанию True myDocument.Close True myDocument.Close wdSaveChanges ‘Закрытие документа без ‘сохранения изменений myDocument.Close False myDocument.Close wdDoNotSaveChanges |
Закрытие любого сохраненного документа
Метод Document.Close закрывает документ, но не приложение. Если работа с приложением закончена, оно закрывается с помощью метода Application.Quit.
WORD Макросы для сохранения слияния и рассылки в отдельные файлы формата DOC или PDF
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sub ToTranslitDoc() | |
Dim i As Long | |
Dim oMerge As MailMerge | |
Dim oData As MailMergeDataSource | |
Set oMerge = ActiveDocument.MailMerge | |
Set oData = oMerge.DataSource | |
Application.ScreenUpdating = False | |
For i = 1 To oData.RecordCount | |
With oData | |
.FirstRecord = i | |
.LastRecord = i | |
.ActiveRecord = i | |
End With | |
With oMerge | |
.Destination = wdSendToNewDocument | |
.Execute Pause:=False | |
End With | |
With ActiveDocument | |
.SaveAs («d:TMP» & oData.DataFields(«Translit»).Value & «.doc») | |
.Close | |
End With | |
Next i | |
Set oData = Nothing | |
Set oMerge = Nothing | |
Application.ScreenUpdating = True | |
End Sub | |
Sub ToTranslitPdf() | |
Dim i As Long | |
Dim oMerge As MailMerge | |
Dim oData As MailMergeDataSource | |
Set oMerge = ActiveDocument.MailMerge | |
Set oData = oMerge.DataSource | |
Application.ScreenUpdating = False | |
For i = 1 To oData.RecordCount | |
With oData | |
.FirstRecord = i | |
.LastRecord = i | |
.ActiveRecord = i | |
End With | |
With oMerge | |
.Destination = wdSendToNewDocument | |
.Execute Pause:=False | |
End With | |
With ActiveDocument | |
.SaveAs FileName:=«d:TMP» & oData.DataFields(«Translit»).Value & «.pdf», FileFormat:=wdFormatPDF | |
.Close (False) | |
End With | |
Next i | |
Set oData = Nothing | |
Set oMerge = Nothing | |
Application.ScreenUpdating = True | |
End Sub |
Автор lapin9126, 21 мая 2017, 08:33
Добрый день. Как сохранить открытый документ с другим именем, в другую папку расположенную в той же директории откуда открыт документ, и в нём выполнить макрос.
Например: документ с именем «Исходный» («С:оригиналы»), сохранить как «Исходный (копия)» в папку «обработано»(«С:оригиналыобработано») и в «Исходный (копия)» выполнить макрос.
Администратор
- Administrator
- Сообщения: 2,254
- Записан
Исходный файл после создания копии нужно закрыть или нужно, чтобы он оставался открытым?
Администратор
- Administrator
- Сообщения: 2,254
- Записан
Папка «обработано» должна быть создана (можно и с помощью макроса её создать).
Макрос
Sub Макрос()
Dim doc As Document
‘ Присваиваем активному ворд-файлу имя «doc».
Set doc = ActiveDocument
‘ Создание копии активного файла, при этом он закроется.
doc.SaveAs2 FileName:=doc.Path & «обработаноИсходный (копия).docx», FileFormat:=wdFormatXMLDocument
‘ Здесь делаете действия с переменной «doc», которая представляет собой новый созданный файл.
‘ Вывод имени файла «doc» в View — Immediate Window.
Debug.Print doc.Name
End Sub
[свернуть]
Администратор
- Administrator
- Сообщения: 2,254
- Записан
Переменную «doc» не обязательно использовать, можно и без неё обойтись:
Макрос
Sub Макрос()
‘ Создание копии активного файла, при этом он закроется.
ActiveDocument.SaveAs2 FileName:=ActiveDocument.Path & «обработаноИсходный (копия).docx», FileFormat:=wdFormatXMLDocument
‘ Здесь делаете действия с новым созданным файлом, используя «ActiveDocument».
‘ Вывод имени активного файла в View — Immediate Window.
Debug.Print ActiveDocument.Name
End Sub
[свернуть]
При сохранении файла нужно присваивать имя исходного (открытого) файла с добавлением (копия), а не конкретно «Исходный (копия)» Это для примера было.
Администратор
- Administrator
- Сообщения: 2,254
- Записан
Sub Макрос()
Dim FN As String
‘1. Формирование полного имени (путь + имя) для нового файла на основе полного имени активного файла.
‘ Вычленение имени файла.
FN = Left(ActiveDocument.Name, InStrRev(ActiveDocument.Name, «.») — 1)
‘ Добавление к имени файла фразы «(копия»).
FN = FN & » (копия)» & «.docx»
‘ Добавление пути.
FN = ActiveDocument.Path & «» & FN
‘2. Создание копии активного файла, при этом он закроется.
ActiveDocument.SaveAs2 FileName:=FN, FileFormat:=wdFormatXMLDocument
‘3. Здесь делаете действия с новым созданным файлом, используя «ActiveDocument».
‘ Вывод имени активного файла в View — Immediate Window.
Debug.Print ActiveDocument.Name
End Sub
[свернуть]
Спасибо, чуть-чуть подправил (добавил место сохранения & «обработано» & «»), теперь то что нужно.
- Форум по VBA, Excel и Word
-
►
Word -
►
Макросы в Word -
►
Word: Как сохранить документ (ворд-файл) с помощью VBA?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
1 09.07.2012 11:34:00
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Тема: Сохранение Word-файла с именем из текста
Уважаемые эксперты, ситуация такая.. Есть программа, в ней хранятся документы. Я экспортирую оттуда документ в Word. Задача: задать ему имя(номер, указанный в документе) и сохранить в отдельную папку (хотя можно и в мои документы). Помогите ПЛЗ.. Буду признателен..
Пример файла прикладываю… Нужный номер/имя на первом листе, в верхнем -правом углу. Конечное имя документа может содержать как только цифры, так и букву с цифрами (в принципе разницы нет).
По всей видимости нужен макрос, который потом надо будет добавить кнопкой на панель, если не так то поправьте..
Post’s attachments
dbnsdbnsb.doc 137.5 Кб, 21 скачиваний с 2012-07-09
You don’t have the permssions to download the attachments of this post.
2 Ответ от aap77 09.07.2012 12:22:07
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Вот самый простой макрос. Выделяете номер документа, жмете на созданную Вами на панели инструментов, будет произведен запрос папки сохранения и и сохранение ативного документа в указанную папку с выделенным номером
Public Sub Test()
Dim FD As FileDialog
Dim FName As String
Dim Path As String
FName = Trim(Selection.Text)
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
With FD
.AllowMultiSelect = False
.Title = «Сохранение документа » & FName
.ButtonName = «Сохранить»
End With
FD.Show
Path = FD.SelectedItems(1) & «» & FName & «.doc»
ActiveDocument.SaveAs2 Path
End Sub
3 Ответ от Noodle 09.07.2012 13:23:28
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
Спасибо за ответ. При использовании макроса(нажатие кнопки), предлагает сохранить на рабочий стол. Нельзя ли как то исправить, чтобы Word предлагал сохранить в папку «документы»? Либо в какую либо другую папку, созданную на рабочем столе? Иначе рабочий стол быстро заполнится..
4 Ответ от aap77 09.07.2012 14:29:06
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Так в открывшемся меню, выберете папку которую вам нужно
5 Ответ от Noodle 09.07.2012 14:32:23
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Так в открывшемся меню, выберете папку которую вам нужно
Объем большой, поэтому если это можно сделать макросом, то пожалуйста скажите как..
6 Ответ от Noodle 09.07.2012 14:35:01
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
Noodle пишет:
aap77 пишет:
Так в открывшемся меню, выберете папку которую вам нужно
Объем большой, поэтому если это можно сделать макросом, то пожалуйста скажите как..
Каждый раз выбирать папку, если документов больше тысячи, да и еще есть возможность промахнуться мимо нужной папки, что тоже может исказить желаемый результат..
7 Ответ от aap77 09.07.2012 14:38:51
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Public Sub Test()
Dim FD As String
Dim FName As String
Dim Path As String
FName = Trim(Selection.Text)
FD = [здесь указывается папка сохранения]
Path = FD & «» & FName & «.doc»
ActiveDocument.SaveAs2 Path
End Sub
Где выделено жирным указывается путь папки сохранения и автоматически туда будут сохраняться документы
8 Ответ от Noodle 09.07.2012 14:53:12
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Public Sub Test()
Dim FD As String
Dim FName As String
Dim Path As String
FName = Trim(Selection.Text)
FD = [здесь указывается папка сохранения]
Path = FD & «» & FName & «.doc»
ActiveDocument.SaveAs2 Path
End Sub
Где выделено жирным указывается путь папки сохранения и автоматически туда будут сохраняться документы
в каком формате указывать? Напрмер мне нужно на рабочи стол в папку «1». ТАкой путь будет правильным? C:UsersuserDesktop1
9 Ответ от Noodle 09.07.2012 15:09:17
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
Уже разобрался с форматом пути к папке.. Я написал правильно.. Спасибо большое за все, aap77!!
10 Ответ от Noodle 09.07.2012 15:12:49
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
Но если все таки можно сделать, чтобы макрос сам находил имя, под которым ему надо будет сохраниться — было бы великолепно.. параметрами для поиска можно взять «G00», например. Если появятся мыли как это реализовать — напишите здесь..
11 Ответ от aap77 09.07.2012 16:29:27
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Сохранение Word-файла с именем из текста
Да мысли в принципе есть, надо их проверить на других файлах, чтобы убедиться что по Вордовским понятиям они составлены одинаково
12 Ответ от Noodle 09.07.2012 16:34:21
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Да мысли в принципе есть, надо их проверить на других файлах, чтобы убедиться что по Вордовским понятиям они составлены одинаково
Этот файл размножить и поменять номер накладной. Другие файлы идут, почти всегда, по возрастанию..
13 Ответ от aap77 09.07.2012 16:40:47
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Опять же хотелось бы уточнить диапазон букв например от A-Z и максимальное количество которое встречается
14 Ответ от Noodle 09.07.2012 16:48:16
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Опять же хотелось бы уточнить диапазон букв например от A-Z и максимальное количество которое встречается
Буква не меняется.. меняются только цифры.. в данный момент диапазон цифр дошел до G0010921, и с каждой накладной, номер соответственно увеличивается на единицу.
15 Ответ от Noodle 09.07.2012 16:50:03
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
Noodle пишет:
aap77 пишет:
Опять же хотелось бы уточнить диапазон букв например от A-Z и максимальное количество которое встречается
Буква не меняется.. меняются только цифры.. в данный момент диапазон цифр дошел до G0010921, и с каждой накладной, номер соответственно увеличивается на единицу.
Опять же, не всегда, на единицу.. бывает и на 2 и на 3 единицы..
16 Ответ от aap77 09.07.2012 17:33:57
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Вот предварительный макрос в котором вы выбираете файлы которые надо пересохранить, выбираете папку куда сохранить, цикл автоматически открывает файлы, ищет в них комбинацию G00 и последущее число неразрывных чисел, сохранят в указанную папку и закрывает документ
Public Sub SaveMyDocument()
Dim FD1 As FileDialog, FD2 As FileDialog
Dim FName As String, Fold As String, i As Long, Doc As Document
Dim Shp As Shape
Set FD1 = Application.FileDialog(msoFileDialogFilePicker)
With FD1
.AllowMultiSelect = True
.ButtonName = "Пересохранить"
With .Filters
.Clear
.Add "Все файлы", "*.*"
.Add "Файлы Word", "*.doc, *.docx"
End With
.Title = "Пересохранение файлов"
End With
FD1.Show
Set FD2 = Application.FileDialog(msoFileDialogFolderPicker)
With FD2
.ButtonName = "Выбрать"
.Title = "Выбор папки сохранения"
End With
FD2.Show
Fold = FD2.SelectedItems(1)
If FD1.SelectedItems.Count = 0 Then Exit Sub
For i = 1 To FD1.SelectedItems.Count
Set Doc = Documents.Open(FD1.SelectedItems(i))
For Each Shp In Doc.Shapes
Shp.Select
If Shp.Type = msoTextBox Then
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "G00([0-9]{1;})"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = True
.Execute
If .Found = True Then
Doc.SaveAs2 = Fold & "" & Selection.Text & "*.doc"
Doc.Close
Exit For
End If
End With
End If
Next Shp
Next i
End Sub
17 Ответ от Noodle 10.07.2012 08:49:12
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Вот предварительный макрос в котором вы выбираете файлы которые надо пересохранить, выбираете папку куда сохранить, цикл автоматически открывает файлы, ищет в них комбинацию G00 и последущее число неразрывных чисел, сохранят в указанную папку и закрывает документ
Спасибо за ваше рвение помочь. Но увы это не много не то, что мне нужно.. Я экспортирую файлы из программы в word, по одному. Экспортируются они с одинаковым именем «xxx.doc», и предварительно сохраняются в папке Temp, под тем же именем(xxx.doc). При экспорте следующего документа в Word (имя опять же xxx.doc), предыдущий удаляется и на его место сохраняется только что экспортированный документ. Поэтому смысл должен быть таков: Я вручную экспортирую документ из программы — применяю макрос — макрос должен найти номер накладной (например по параметру «G00») — потом макрос сохраняет этот файл в папку( указанную мной в макросе(напр. «C:UsersuserDesktop1»)), с именем, которое будет идентичным номеру накладной.
18 Ответ от Noodle 10.07.2012 10:17:43
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Public Sub Test()
Dim FD As String
Dim FName As String
Dim Path As String
FName = Trim(Selection.Text)
FD = [здесь указывается папка сохранения]
Path = FD & «» & FName & «.doc»
ActiveDocument.SaveAs2 Path
End Sub
Где выделено жирным указывается путь папки сохранения и автоматически туда будут сохраняться документы
Этот макрос работает, его надо только чуток доработать, добавив в него поиск и выделение номера накладной, по тому же параметру «G00». И я думаю все будет работать, если это выполнимо конечно.. Заранее спасибо.
19 Ответ от aap77 10.07.2012 14:38:09
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Попробуйте так
Public Sub Test()
Dim FD As String
Dim FName As String
Dim Path As String
Dim Shp As Shape
Set Doc = ActiveDocument
FD = [здесь указывается папка сохранения]
For Each Shp In Doc.Shapes
Shp.Select
If Shp.Type = msoTextBox Then
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "G00([0-9]{1;})"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = True
.Execute
If .Found = True Then
FName = Selection
Path = FD & "" & FName & ".doc"
Doc.SaveAs2 Path
Doc.Close
Exit Sub
End If
End With
End If
Next Shp
End Sub
Отредактировано aap77 (11.07.2012 09:49:24)
20 Ответ от Noodle 11.07.2012 08:31:01
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Попробуйте так
Спасибо преогромнейшее. Несказанно рад, но макрос выдает ошибку:
Compile error:
For without Next
Скрин прикладываю.
Post’s attachments
ScreenShot.JPG 60.92 Кб, 1 скачиваний с 2012-07-11
You don’t have the permssions to download the attachments of this post.
21 Ответ от aap77 11.07.2012 08:59:12
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Перед End Sub надо поставить Next Shp
22 Ответ от Noodle 11.07.2012 09:10:37
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Перед End Sub надо поставить Next Shp
«Ошибка команды»
При нажатии кнопки «Debug», выскакивает окно Visual Basic с выделенной строкой :
Doc.SaveAs2 Path
Скрин прикладываю.
Post’s attachments
Screen.JPG 53.93 Кб, 1 скачиваний с 2012-07-11
You don’t have the permssions to download the attachments of this post.
23 Ответ от Noodle 11.07.2012 09:25:11
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
Команду закрытия документа после сохранения — желательно..
24 Ответ от aap77 11.07.2012 09:50:31
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Теперь должно работать
Public Sub Test()
Dim FD As String
Dim FName As String
Dim Path As String
Dim Shp As Shape
Set Doc = ActiveDocument
FD = [здесь указывается папка сохранения]
For Each Shp In Doc.Shapes
Shp.Select
If Shp.Type = msoTextBox Then
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "G00([0-9]{1;})"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = True
.Execute
If .Found = True Then
FName = Selection
Path = FD & "" & FName & ".doc"
Doc.SaveAs2 Path
Doc.Close
Exit Sub
End If
End With
End If
Next Shp
End Sub
25 Ответ от Noodle 11.07.2012 09:57:52
- Noodle
- сержант
- Неактивен
- Зарегистрирован: 09.07.2012
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
Ох спасибо вам огромное!! Заработало! не перевелись еще добрые люди в этом проклятом мире.. Спасибо Вам еще раз!
26 Ответ от aap77 11.07.2012 10:12:39
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
- За сообщение: 1
Re: Сохранение Word-файла с именем из текста
Всегда пожалуйста!
27 Ответ от can_do 21.09.2012 16:04:32
- can_do
- рядовой
- Неактивен
- Зарегистрирован: 21.09.2012
- Сообщений: 1
Re: Сохранение Word-файла с именем из текста
А есть продолжение?
Как работает этот поиск?
.Text = «G00 ([0-9]{1;})»
Или как сделать поиск по №, чтобы он включал все цифры после символа ‘№’ в будущее имя файла.
28 Ответ от rbgjdew 20.02.2017 13:32:51
- rbgjdew
- сержант
- Неактивен
- Зарегистрирован: 08.02.2017
- Сообщений: 16
Re: Сохранение Word-файла с именем из текста
aap77 пишет:
Public Sub Test()
Dim FD As String
Dim FName As String
Dim Path As String
FName = Trim(Selection.Text)
FD = [здесь указывается папка сохранения]
Path = FD & «» & FName & «.doc»
ActiveDocument.SaveAs2 Path
End Sub
Где выделено жирным указывается путь папки сохранения и автоматически туда будут сохраняться документы
Если я правильно понял, это макрос сохранения файла с именем из текста и в определённую папку?
Скопировал этот макрос, в редакторе кода в Normal дважды ЛКМ на ThisDocument, в (General) вставил код, ввёл путь к папке в двойных кавычках, сохранил документ. Открываю новый документ, ввожу текст, запускаю макрос — не работает. Выдаёт сообщение см. приложенный файл. Что я не правильно делаю или сделал?
Post’s attachments
Скрин.jpg 33.52 Кб, файл не был скачан.
You don’t have the permssions to download the attachments of this post.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Группа: Пользователи Ранг: Прохожий Сообщений: 5
Замечаний: |
Спасибо большое, SLAVICK. Все работает как надо.
Вопрос ещё такой:
1. Можно ли эти кнопки скрыть при распечатки документа или разместить их в другом месте, чтобы при печати документа их небыло?
2. При нажатие кнопки Сохранить. Содаеться документ с датой, но при повторном нажатие, содаеться документ с добавлением ещё текущей даты и так бесконца. Может, если документ уже сохранен, то не позволять его ещё раз сохранять. А выдовать сообщение об этом. А если пользователь захочит ещё раз сохранить документ, то он может просто воспользоваться стандартной кнопкой ms word))
Или может название файла с текущей датой, который будет сохраняться при нажатие кнопки прописать в самом коде, тогда будет проще проверить сохранен он уже с таким названием или нет. И тогда если даже пользователь переименует название файла шаблона, то при нажатие кнопки ему будет предложено сохранить с нужным названием)))