Консультация № 140204
18.07.2008, 14:49
0.00 руб.
0 3 2
Доброго дня.
Суть программы такая. Есть шаблон документа. В опр.местах установлены закладки. Через форму с textbox`ми водятся данные. и кнопка "Сохранить".
Дальше в идеале программа должна выглядеть следующий образом, Создаётся файл в нужной папке/номер_договора.doc. При этом есть функция редактирование файла
То есть грубо говоря, если я хочу что то поменять, не лезть в сам файл, а открыть форму, где мне видно, что было вставлено в закладки. И иметь возможность изменить это.


Приложение:
Private Sub CommandButton1_Click()Const Path_RVK = "C:\1.doc"Dim x As Word.Document Set x = Word.Documents.Add(Template:=Path_RVK, NewTemplate:=False, DocumentType:=0) Call PrintToBookmark("ФИО", TextBox1.Value, x) Set x = Nothing Set WS = NothingEnd SubSub PrintToBookmark(Bkmrk As String, Stroka As Variant, x As Word.Document) With x.ActiveWindow.Selection .GoTo What:=wdGoToBookmark, Name:=Bkmrk .TypeText Text:=Stroka End WithEnd Sub

Обсуждение

Неизвестный
18.07.2008, 15:48
общий
это ответ
Здравствуйте, Соколов В.В.!
Во первых за основу лучше брать не документ 1.doc, а шаблон 1.dot. Для этого документ сохраняется как шаблон.
Далее после расстановки данных по закладкам можно программным способом сохранить файл в любом месте:
x.SaveAs Filename:="c:\Path" + "Имя файла"& ".doc"
Самое интересное, чтобы редактировать данные используя форму, нужно откуда то загружать данные в форму. Брать из документа - недобно или сложно (не знаю как). Я для этих целей предлагаю хранить данные в свойствах документа !!
Если посмотреть Файл\Свойства\Прочие там можно сохранить различные данные, в том числе программным способом.
Не буду томить ожиданием кода, вот он.
В normal.dot создана форма с двумя полями (фамилия, имя) и двумя кнопками Вставить и Заменить.
Если вызвать форму, заполнить её и нажать заполнить: создастся документ на основе Документ.dot (в котором стоят закладки fam и name) заполняется данными из формы, сохраняется под именем "Фамилия.doc" в опред каталоге (C:\1\) и закрывается.
Если снова открыть этот файл и вызвать форму данные загрузятся в форму сами. По необходимости меняете данные и жмете Обновить.
Дерзайте

Приложение:
Option ExplicitDim x As Word.DocumentConst Path_saveRVK = "C:\1"Const Path_RVK = "Документ.dot"Dim PutFile As StringPrivate Sub CommandButton1_Click() Set x = Word.Documents.Add(Template:=Path_RVK, NewTemplate:=False, DocumentType:=0) With x.ActiveWindow.Selection .GoTo What:=wdGoToBookmark, Name:="name" .TypeText Text:=TextBox2.Value rename_comment "name", TextBox2.Value .GoTo What:=wdGoToBookmark, Name:="fam" .TypeText Text:=TextBox1.Value rename_comment "name", TextBox2.Value End With PutFile = Path_saveRVK + TextBox1.Value & ".doc" x.SaveAs FileName:=PutFile x.Close Set x = Nothing Unload Me End SubPrivate Sub rename_comment(pole As String, znach As String) Dim prop, priz As Boolean priz = FalseFor Each prop In x.CustomDocumentProperties If prop.Name = pole Then prop.Value = znach priz = True End IfNextIf Not priz Then x.CustomDocumentProperties.Add Name:=pole, LinkToContent:=False, Value:=znach, Type:=msoPropertyTypeStringEnd SubPrivate Sub CommandButton2_Click()Set x = ActiveDocument With x.ActiveWindow.Selection .GoTo What:=wdGoToBookmark, Name:="name" Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend Selection.Delete .TypeText Text:=TextBox2.Value & " " rename_comment "name", TextBox2.Value .GoTo What:=wdGoToBookmark, Name:="fam" Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend .TypeText Text:=TextBox1.Value & " " rename_comment "fam", TextBox1.Value End WithEnd SubPrivate Sub UserForm_Initialize()Dim propFor Each prop In ActiveDocument.CustomDocumentProperties Select Case prop.Name Case "fam" TextBox1.Value = prop.Value Case "name" TextBox2.Value = prop.Value End SelectNextEnd Sub
Неизвестный
22.07.2008, 01:13
общий
У меня таких закладок от l1 до lxx, и соответсвенно полей в форме тоже много. Есть ли способ, заполнить в этом варианте в цикле? Я попробовал, но что то не очень вышло..
Неизвестный
22.07.2008, 17:18
общий
это ответ
Здравствуйте, Соколов В.В.!
Если Вы воспользуетесь рекомендацией которую я давал на минифоруме вопроса 140086, по поводу "последовательного наименования" меток документа и полей формы, код в приложении поможет Вам заполнить поля формы содержимым меток, с помощью цикла.

Евгений.

Приложение:
Sub fromLblToForm()
Dim Lbl
For Each Lbl In ActiveDocument.Bookmarks
Me("Text" & Right(Lbl.Name, 2)).Text = Lbl
Next
End Sub
Форма ответа