|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.04.2010, 16:51 | #1 |
Новичок
Джуниор
Регистрация: 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. |
26.04.2010, 20:10 | #2 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Не понятен принцип именования и выбора закладок. Приведите пример окончания кода.
Лучше день потерять — потом за пять минут долететь!©
|
26.04.2010, 22:51 | #3 |
Новичок
Джуниор
Регистрация: 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. |
27.04.2010, 06:18 | #4 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
Прикрепив к сообщению файл с неурезанным кодом, вы значительно увеличите свои шансы на помочь в решении проблемы. |
|
27.04.2010, 09:22 | #5 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Если проблема только в том, что в каждую закладку нужно записать значение из определённого поля ввода, то это можно решить, связав закладку с сооветствующим полем. Например, имя закладки можно указать в свойстве Tag или даже имя текстового поля сделать таким же как и имя закладки. Тогда весь процесс присваивания сведётся к такому циклу
Код:
Лучше день потерять — потом за пять минут долететь!©
|
27.04.2010, 11:00 | #6 |
Новичок
Джуниор
Регистрация: 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. |
27.04.2010, 12:13 | #7 | |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Цитата:
Естественно, не работает. Зачем вызывать процедуру UpdateBookmarks в конце процедуры да ещё и без аргументов? Эта процедура нужна для обновления содержимого указанной закладки на указанный текст в указанном документе и вызывается она в цикле. Не понятно, почему у вас не получается задать имя закладки в свойстве Tag. При чём здесь ссылка на документ? Пример в приложенном файле
Лучше день потерять — потом за пять минут долететь!©
|
|
27.04.2010, 14:42 | #8 |
Новичок
Джуниор
Регистрация: 26.04.2010
Сообщений: 13
|
viter.alex
спасибо. ваш код работает. попробую адаптировать его под свою задачу |
28.04.2010, 11:04 | #9 |
Новичок
Джуниор
Регистрация: 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 может есть какой-то более простой/универсальный способ? спасибо ... |
28.04.2010, 11:24 | #10 |
Новичок
Джуниор
Регистрация: 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. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как разбить число на цифрыКак разбить число на цифры: 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 |