Макрос для сохранения документа word

Уважаемые форумчане, вынужден обратиться с вопросом следующего характера:
С Вашей же помощью мне удалось из кусочков составить код, который при запуске осуществляет копирование данных с листа 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 – как в ворде сохранить документ

сохранение в word документа

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

сохранение файла в Word

Программный код на языке 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


Студворк — интернет-сервис помощи студентам

Доброго всем!
Такая у меня трудность: Необходимо сохранять документ ворда, созданный макросом.Он создается, для него вызывается диалоговое окно сохранения, решение о сохранении под тем или иным именем принимает пользователь.Все устраивает, кроме: имя по умолчанию в диалоговом окне стандартное (документ1 или что-то там еще…). Надо предложить свое (чтобы система была в названии, а то, блин, загаживается всякой фигней, чем попало называют файлы). не могу найти такого свойства. Может,кто знает? Не хочу жестко все сохранять. Иногда того не стоит



0



3895 / 898 / 122

Регистрация: 16.04.2009

Сообщений: 1,824

27.03.2010, 11:28

2

покажите код



0



Busine2009

Заблокирован

27.03.2010, 11:29

3

Artemo,
т. е. надо, чтобы в диалоговом окне «Сохранение документа» в поле «Имя файла» по умолчанию было определённое название?



0



20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

27.03.2010, 11:31

 [ТС]

4

2 BUSINE2009
В точности так. Именно этого хотелось бы
а код вот этот
wd.Dialogs(wdDialogFileSaveAs).Show
где wd это объект ворд. Документ из экселя делается. Там все данные



0



Busine2009

Заблокирован

27.03.2010, 11:42

5

Artemo,
вот что второе пришло в голову (первое было — в реестре что-нибудь изменить):

Visual Basic
1
2
3
4
5
6
Sub m_1()
With Dialogs(wdDialogFileSaveAs)
    .Name = "Моё сохранение"
    .Show
End With
End Sub

Этот макрос надо поместить в меню Файл вместо «Сохранить» и «Сохранить как…» и на Стандартную панель инструментов, вместо кнопки «Сохранить».



0



20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

27.03.2010, 12:04

 [ТС]

6

Не знаю, как это сделать. Просто запустить-он не работает



0



Busine2009

Заблокирован

27.03.2010, 12:20

7

Artemo,
ясное дело, что он не будет работать в Exel (wdDialogFileSaveAs).
Вот для Exel.

Visual Basic
1
2
3
Sub m_1()
Application.Dialogs(xlDialogSaveAs).Show ("Моё сохранение")
End Sub

Может в твоём случае не надо вызывать Диалоговое окно «Сохранение документа», а надо как-то автоматизировать Сохранение.



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

Цитата
Сообщение от Artemo
Посмотреть сообщение

не могу найти такого свойства.

Visual Basic
1
Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "c:хорошее имя.txt"

для любого приложения с 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

добрый день, Буду очень благодарен если у вас есть какие нибудь мысли.
Вопрос- Можно ли в макрос вставить не константное имя файла? Например копируем шапку файла, и «сохранить как» «вставить»

Visual Basic
1
2
3
4
5
6
Sub m_1()
With Dialogs(wdDialogFileSaveAs)
    .Name = "ctrl+v предыдущей копии"
    .Show
End With
End Sub



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

19.02.2016, 14:26

12

ctac1412,

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub m_1()
Dim s
  On Error Resume Next
  With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 'DataObject
    .GetFromClipboard
    s = .GetText
  End With
  On Error GoTo 0
  With Dialogs(wdDialogFileSaveAs)
    .Name = s
    .Show
  End With
End Sub



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, так Вы не вручную копируете? Если это будет часть макроса, буфер обмена вообще не надо задействовать

Visual Basic
1
2
.Name = Selection.Text 'выделенный текст
.Name = ActiveDocument.Words(1).Text 'первое слово документа

и т.п.



0



ctac1412

18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

20.02.2016, 16:51

15

Казанский, Большое спасибо что тратите на меня время. Хоть и тп мне не ясно, потому что я не знаю разнообразия всех методов и мои макросы наверное такие тупые и нагруженые, а спецы делали бы это все в пару строк)) Если не сложно, не подскажете, как указать в макросе путь куда сохранять и что бы не выскакивало окно выбора пути?

Добавлено через 15 минут
Казанский, Кстати, если не сложно ответться, что делают 2-8 строки? Я их удалил, и без них работало.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub m_1()
Dim s
  On Error Resume Next
  With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 'DataObject
    .GetFromClipboard
    s = .GetText
  End With
  On Error GoTo 0
  With Dialogs(wdDialogFileSaveAs)
    .Name = s
    .Show
  End With
End Sub

Добавлено через 9 минут
И есть ли все таки способ сделать имя из буфера? Например я макросом копирую заявление 11/11/16-1 ( далее в прога не читает такое название) у меня копируется номер заявления, вставляется в свободную строку, «/» меняются на «.» и дописывается .doc (11.11.16-1.doc) и удаляется из строки( а запись оставалась в буфере). Файл закрывается с сохранением. Потом я нажимал f2 жмакал ctrl+v и все. Нельзя «сохранить как», потому что работа с доком идет из temp папки и он положит файл в другое место. А я начинал работу с скачанным файлом и мне нужно именно ему поменять имя а не создать новый.

То есть я скачиваю ворду, перетаскиваю из мозилы в месанджер и менял имя внутри месенджера

Добавлено через 20 часов 11 минут
Я понял как можно указать папку, куда устанавливать. Но как можно сделать так, что бы не спрашивали подтверждение????

Visual Basic
1
2
3
4
5
6
ChangeFileOpenDirectory "C:UsersСтасDesktopПРОБНЫЙпробные"
    With Dialogs(wdDialogFileSaveAs)
    .Name = Selection.Text
    .Show
  End With
End Sub



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

20.02.2016, 17:19

16

Цитата
Сообщение от ctac1412
Посмотреть сообщение

я не полный ноль, но по 10 бальной шкале я 1

Тогда ваш первый инструмент — «запись макроса». Включаете запись, производите какие-то действия, (останавливаете запись), смотрите полученный код и т.д.
В частности, если записать команды «сохранить как», «закрыть файл» и убрать лишнее, получится следующее:

Visual Basic
1
2
ActiveDocument.SaveAs "C:UsersСтасDesktopПРОБНЫЙпробные" & Selection.Text
ActiveDocument.Close 0

Мне непонятно, текст 11/11/16-1 для формирования имени Вы вручную находите, или макросом? И нет ли этой информации в Свойствах документа?
Если макросом, то можно автоматизировать весь процесс с помощью скрипта VBS, который даже можно встроить в оболочку Проводника: Вы выделяете файл, правый клик — команда, например, Перенести — и файл переносится в другую папку с новым именем



1



ctac1412

18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

20.02.2016, 17:56

17

Огромное спасибо. Именно через запись я и учусь. Но не все мои действия он прописывает. С тем же сохранить как. Я сам уже написал для себя 7 макросов, мне кажется они настолько ****ты, и что есть намного проще решения)) Но как есть, черновой вариант все же лучше чем ничего))

Тест я нахожу макросом и переделываю в формат 11_11_16-1. А вообще это все просто конец одного большого макроса с манипуляциями с текстами. Просто хочется что бы макрос логически заканчивался Не подскажете полезную литературу?) Где можно найти описанный вами вариант? Очень сложно уже благодарить всех на этом сайте.

Добавлено через 11 минут
Вот например моя голова ничего неможет придумать, что бы файлы сохранялись в док формате, кроме как к выделенному тексту дописать».doc». но тогда структура файла измениться. Произвел сохранение файла в доке вот что пишет бэйсик

Visual Basic
1
2
3
4
5
ActiveDocument.SaveAs FileName:="врТС-МО07.01196.doc", FileFormat:= _
        wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False

Видимо здесь он указывает что док в строчке имени файла, но ведь нам не подходит этот вариант. Что можно сделать?

Добавлено через 4 минуты
нашел решение)) можете порадоваться за юного падавана)

Visual Basic
1
2
3
ActiveDocument.SaveAs "C:UsersСтасDesktopПРОБНЫЙпробные" & Selection.Text, FileFormat:= _
wdFormatDocument
ActiveDocument.Close 0



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

21.02.2016, 00:47

18

Цитата
Сообщение от ctac1412
Посмотреть сообщение

Не подскажете полезную литературу?

Учебники, справочники, самоучители

Цитата
Сообщение от ctac1412
Посмотреть сообщение

Тест я нахожу макросом и переделываю в формат 11_11_16-1
… к выделенному тексту дописать».doc»

Есть подозрение, что Вы делаете это в документе. Но в VBA есть много функций и операторов для работы со строками!
Например, можно написать свою функцию для замены символов, которые недопустимо использовать в имени файла, на «_», за исключением «/», который менять на точку:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Function ValidFileName(s As String) As String
Dim i As Long
  ValidFileName = s
  For i = 1 To Len(s)
    If Mid$(s, i, 1) = "/" Then
      Mid$(ValidFileName, i, 1) = "."
    ElseIf InStr("/:*?""<>|", Mid$(s, i, 1)) Then
      Mid$(ValidFileName, i, 1) = "_"
    End If
  Next
End Function

Тогда записать документ в другую папку с именем, взятым из выделенного диапазона, можно так:

Visual Basic
1
2
ActiveDocument.SaveAs "C:UsersСтасDesktopПРОБНЫЙпробные" & ValidFileName(Selection.Text) & ".doc", _
  FileFormat:=ActiveDocument.SaveFormat

То есть если перед этой командой выделить текст 11/11/16-1 , то файл будет сохранен в
C:UsersСтасDesktopПРОБНЫЙпробные11.11.16-1.doc
и с тем же форматом файла (формат не зависит от расширения!)



1



ctac1412

18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

21.02.2016, 01:23

19

вроде разобрался, даже через пол часа понял как вставить функцию))) Котелок не варит уже… нельзя наверное так быстро пытаться понимать?)
А что, если сохранение активного окна это не конец макроса? Функция все равно сработает? ( я ее прописал ниже макроса) НО у меня на странице до 10 макросов бывает. Или я не верно их оформляю?)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub QQQ()
ActiveDocument.SaveAs "C:UsersСтасDesktopпробные" & ValidFileName(Selection.Text) & ".doc", _
  FileFormat:=ActiveDocument.SaveFormat
End Sub
 
Function ValidFileName(s As String) As String
Dim i As Long
  ValidFileName = s
  For i = 1 To Len(s)
    If Mid$(s, i, 1) = "/" Then
      Mid$(ValidFileName, i, 1) = "."
    ElseIf InStr("/:*?""<>|", Mid$(s, i, 1)) Then
      Mid$(ValidFileName, i, 1) = "_"
    End If
  Next
End Function



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

Show hidden 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

  • Сохранение Word-файла с именем из текста
  • 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


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Спасибо большое, SLAVICK. Все работает как надо.

Вопрос ещё такой:
1. Можно ли эти кнопки скрыть при распечатки документа или разместить их в другом месте, чтобы при печати документа их небыло?
2. При нажатие кнопки Сохранить. Содаеться документ с датой, но при повторном нажатие, содаеться документ с добавлением ещё текущей даты и так бесконца. Может, если документ уже сохранен, то не позволять его ещё раз сохранять. А выдовать сообщение об этом. А если пользователь захочит ещё раз сохранить документ, то он может просто воспользоваться стандартной кнопкой ms word))
Или может название файла с текущей датой, который будет сохраняться при нажатие кнопки прописать в самом коде, тогда будет проще проверить сохранен он уже с таким названием или нет. И тогда если даже пользователь переименует название файла шаблона, то при нажатие кнопки ему будет предложено сохранить с нужным названием)))

Понравилась статья? Поделить с друзьями:
  • Макрос на vba для word
  • Макрос на vba for excel
  • Макрос на vba excel формируем документы по шаблону
  • Макрос миф excel это
  • Макрос календаря для excel