Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2010, 16:51   #1
neprofi
Новичок
Джуниор
 
Регистрация: 26.04.2010
Сообщений: 13
По умолчанию Как разбить процедуру (ту лардж)? Вопрос от чайника ...

Просьба помочь советом. Я не программист.
Написалась вот такая штука (пример):

Private Sub CommandButton1_Click()
Dim oDoc As Document
Set oDoc = Application.Documents.Add("C:\Мои документы\Проба.dot")

oDoc.Bookmarks("a1").Range.Text = TextBox1.Value
oDoc.Bookmarks("b1").Range.Text = TextBox2.Value
oDoc.Bookmarks("с1").Range.Text = TextBox3.Value - и т. д.


Проба.Hide
oDoc.Activate

End Sub

В реале конечно же больше (пишет Procedure too large).
Необходимо разбить на несколько процедур.

Спасибо.

Последний раз редактировалось neprofi; 26.04.2010 в 17:55.
neprofi вне форума Ответить с цитированием
Старый 26.04.2010, 20:10   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Не понятен принцип именования и выбора закладок. Приведите пример окончания кода.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 26.04.2010, 22:51   #3
neprofi
Новичок
Джуниор
 
Регистрация: 26.04.2010
Сообщений: 13
По умолчанию

в данном примере наименования закладок взяты "от балды"
они могут быть любыми
суть вопроса заключается в том, что создана форма, в примере она называется "Проба"
на форме есть кнопки (CommandButton1 и CommandButton2 соответственно)
кроме кнопок есть некоторое количество текстовых полей (в примере их три, в реале - много)
нажатие кнопки CommandButton1 должно привести к тому, что содержимое текстовых полей должно быть перенесено в места, обозначенные закладками во вновь созданном документе Ворд на основании шаблона с названием "Проба" (опять же это касается примера).
Соответственно нажатие кнопки CommandButton2 просто закрывает форму.
Я вижу проблему в том, что в реальном коде у меня получилось несколько сотен вариантов перенесения содержимого текстовых полей в закладки.
На мой взгляд в примере это видно, т. к. после букв и т. д. можно сколь угодно много ставить "... oDoc.Bookmarks("d1 ..., е1...., и так далее ").Range.Text = TextBox4 .... 5.... 6.... и так далее.Value ...".

Окончание кода процедуры в примере указано полностью:

Проба.Hide
oDoc.Activate

End Sub

, ничего другого нет.
Как эту процедуру разбить на части - не понимаю....

Если поможете - спасибо.

Последний раз редактировалось neprofi; 26.04.2010 в 22:54.
neprofi вне форума Ответить с цитированием
Старый 27.04.2010, 06:18   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Я вижу проблему в том, что в реальном коде у меня получилось несколько сотен вариантов
А вот мы не видим проблемы - поскольку она скрывается в файле, который вы не хотите показывать.

Прикрепив к сообщению файл с неурезанным кодом, вы значительно увеличите свои шансы на помочь в решении проблемы.
EducatedFool вне форума Ответить с цитированием
Старый 27.04.2010, 09:22   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Если проблема только в том, что в каждую закладку нужно записать значение из определённого поля ввода, то это можно решить, связав закладку с сооветствующим полем. Например, имя закладки можно указать в свойстве Tag или даже имя текстового поля сделать таким же как и имя закладки. Тогда весь процесс присваивания сведётся к такому циклу
Код:
Dim oFormControl As Object
For Each oFormControl In Me.Controls
  If TypeName(oFormControl) = "TextBox" Then
    If oDoc.Bookmarks.Exists(oFormControl.Tag) Then
      Call UpdateBookmarks(oDoc, oFormControl.Tag, oFormControl.Value)
    End If
  End If
Next

'процедура для обновления закладок
Sub UpdateBookmarks(ByVal Doc As Document, ByVal NameOfBookmark As String, ByVal ContentOfBookmark As Variant)
    Dim rng As Range
    Dim bm As Bookmarks
    Set bm = Doc.Bookmarks
    Set rng = bm(NameOfBookmark).Range
    rng.Text = ContentOfBookmark
    bm.Add NameOfBookmark, rng
End Sub
А вообще, покажите весь код. И напишите в чём вы программируете.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 27.04.2010, 11:00   #6
neprofi
Новичок
Джуниор
 
Регистрация: 26.04.2010
Сообщений: 13
По умолчанию

viter.alex, спасибо,
я пытаюсь программировать в VBA
только в связи с тем что я совсем не программист, я не знаю как правильно указать имя закладки в свойстве таг (нужна какая-то ссылка на шаблон, или путь к нему?), потому как если указать просто а1, или b1 - не работает.

Если я правильно понял вот это выражение из Вашего кода
If oDoc.Bookmarks.Exists(oFormControl. Tag) Then
для формы также нужно указать ссылку на документ в свойстве таг.
как это корректно сделать?

весь документ не выкладываю поскольку он содержит конфиденциальную информацию. И потом если Вы и EducatedFool напишете за меня весь код, я ничего в нем не пойму, и ничему не научусь.
хочется покопаться самому...
если заняты - можете не отвечать, все равно спасибо .

да..., и еще я не знаю как запустить указанную Вами процедуру ....

Public Sub UpdateBookmarks(ByVal Doc As Document, ByVal NameOfBookmark As String, ByVal ContentOfBookmark As Variant)
Dim rng As Range
Dim bm As Bookmarks
Set bm = Doc.Bookmarks
Set rng = bm(NameOfBookmark).Range
rng.Text = ContentOfBookmark
bm.Add NameOfBookmark, rng
End Sub

Private Sub CommandButton1_Click()Dim oDoc As Document
Set oDoc = Application.Documents.Add("C:\Мои документы\Проба.dot")

Dim oFormControl As Object
For Each oFormControl In Me.Controls
If TypeName(oFormControl) = "TextBox" Then
If oDoc.Bookmarks.Exists(oFormControl. Tag) Then
Call UpdateBookmarks(oDoc, oFormControl.Tag, oFormControl.Value)
End If
End If
Next

Проба.Hide
oDoc.Activate
UpdateBookmarks

End Sub

не работает

Последний раз редактировалось neprofi; 27.04.2010 в 11:24.
neprofi вне форума Ответить с цитированием
Старый 27.04.2010, 12:13   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от neprofi Посмотреть сообщение
…Если я правильно понял вот это выражение из Вашего кода
If oDoc.Bookmarks.Exists(oFormControl. Tag) Then
для формы также нужно указать ссылку на документ в свойстве таг.
как это корректно сделать?…
Неправильно поняли. Эта строка проверяет существование в документе закладки с именем, указанным в свойстве Tag
Цитата:
Сообщение от neprofi Посмотреть сообщение
Код:
Проба.Hide
oDoc.Activate
UpdateBookmarks

End Sub
не работает
Естественно, не работает. Зачем вызывать процедуру UpdateBookmarks в конце процедуры да ещё и без аргументов? Эта процедура нужна для обновления содержимого указанной закладки на указанный текст в указанном документе и вызывается она в цикле.

Не понятно, почему у вас не получается задать имя закладки в свойстве Tag. При чём здесь ссылка на документ? Пример в приложенном файле
Вложения
Тип файла: doc Обновление закладок из текстовых полей.doc (37.0 Кб, 12 просмотров)
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 27.04.2010, 14:42   #8
neprofi
Новичок
Джуниор
 
Регистрация: 26.04.2010
Сообщений: 13
По умолчанию

viter.alex

спасибо. ваш код работает.
попробую адаптировать его под свою задачу
neprofi вне форума Ответить с цитированием
Старый 28.04.2010, 11:04   #9
neprofi
Новичок
Джуниор
 
Регистрация: 26.04.2010
Сообщений: 13
По умолчанию

подскажите пожалуйста, как сделать так, чтобы текст из одного TextBox автоматически переносился не в одну закладку в документе, а сразу в несколько.

пока приходится делать так:

Private Sub CommandButton1_Click()
Dim oDoc As Document

Set oDoc = Application.Documents.Add("C:\Мои документы\Проба.dot")

oDoc.Bookmarks("a1").Range.Text = TextBox1.Value
oDoc.Bookmarks("a2").Range.Text = TextBox1.Value
oDoc.Bookmarks("a3").Range.Text = TextBox1.Value
- и так далее

Form3.Hide
oDoc.Activate
End Sub

может есть какой-то более простой/универсальный способ?
спасибо ...
neprofi вне форума Ответить с цитированием
Старый 28.04.2010, 11:24   #10
neprofi
Новичок
Джуниор
 
Регистрация: 26.04.2010
Сообщений: 13
По умолчанию

И еще в догонку:

очень много места в коде занимают вот такие конструкции:

If ComboBox4 = "ООО" Then oDoc.Bookmarks("b1").Range.Text = "общества с ограниченной ответственностью "
If ComboBox4 = "ОАО" Then oDoc.Bookmarks("b1").Range.Text = "открытого акционерного общества "
If ComboBox4 = "ЗАО" Then oDoc.Bookmarks("b1").Range.Text = "закрытого акционерного общества "
If ComboBox4 = "ГУ" Then oDoc.Bookmarks("b1").Range.Text = "государственного учреждения "
If ComboBox4 = "МУП" Then oDoc.Bookmarks("b1").Range.Text = "муниципального унитарного предприятия "
If ComboBox4 = "СХПК" Then oDoc.Bookmarks("b1").Range.Text = "сельскохозяйственного производственного кооператива "
If ComboBox4 = "НП" Then oDoc.Bookmarks("b1").Range.Text = "некоммерческого партнерства "
If ComboBox4 = "ИП" Then oDoc.Bookmarks("b1").Range.Text = "индивидуального предпринимателя "
If ComboBox4 = "ПК" Then oDoc.Bookmarks("b1").Range.Text = "потребительского кооператива "
If ComboBox4 = "ПрК" Then oDoc.Bookmarks("b1").Range.Text = "производственного кооператива "
If ComboBox4 = "ГП" Then oDoc.Bookmarks("b1").Range.Text = "государственного предприятия "
If ComboBox4 = "ГПВО" Then oDoc.Bookmarks("b1").Range.Text = "государственного предприятия ____ской области "
If ComboBox4 = "КУИ" Then oDoc.Bookmarks("b1").Range.Text = "Комитета по управлению имуществом "
If ComboBox4 = "ДЗО" Then oDoc.Bookmarks("b1").Range.Text = "Департамента земельных отношений "
If ComboBox4 = "ДИО" Then oDoc.Bookmarks("b1").Range.Text = "Департамента имущественных отношений "
If ComboBox4 = "ТУФАУГИ" Then oDoc.Bookmarks("b1").Range.Text = "Территориального управления Федерального агентства по управлению государственным имуществом в "
If ComboBox4 = "Росреестр" Then oDoc.Bookmarks("b1").Range.Text = "Управления Федеральной службы государственной регистрации, кадастра и картографии по "
If ComboBox4 = "Администрация" Then oDoc.Bookmarks("b1").Range.Text = "Администрации "

наверняка должен быть способ сократить ...
спасибо ...

Последний раз редактировалось neprofi; 28.04.2010 в 11:34.
neprofi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разбить число на цифрыКак разбить число на цифры: 3241 => 3,2,4,1 (Pascal) Banderas123 Помощь студентам 3 07.12.2009 18:26
Как разбить массив PARTOS Microsoft Office Excel 3 20.11.2009 12:03
Вопрос по excel от чайника rjavaya Microsoft Office Excel 5 08.07.2009 16:46
Вопрос чайника по фромам rh- Microsoft Office Access 1 10.11.2008 04:43