IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   длинна строки в переменных макросов Word (http://www.imho.ws/showthread.php?t=92996)

vuk 22.09.2005 14:55

длинна строки в переменных макросов Word
 
Начал копаться в visual basic для макросов MS Word, с грехом пополам накатал такой макрос:
после запуска выводится формочка

sub macros
Load forma
forma.show
end sub

форма заполняется, и на кнопке "ОК" висит такая функция

Private Sub Start_Click()

txtopf = "какой-то текст"

With Selection.Find
.Text = "!заменяемый!"
.Replacement.Text = txtopf + " """ + company + """"
' где company переменная с содержимым поля формы (= имя поля)
End With
Selection.Find.Execute Replace:=wdReplaceAll
' и штук шесть таких операций проходит с разными переменнными

forma.Hide
End Sub

т.е. скрипт ищет в документе заранее помеченный текст и заменяет его на содержимое переменных.
Так вот если в поле company ввести длинный текст (или в переменную opf загнать длинный текст) то при исполнении он мне выдает "Run-time Error 5854 слишком длинный строковый параметр."
каким образом энто дело обойти можно?

З.Ы.: звиняйте что код не выделен - админ яву отрубил.

SapeR 22.09.2005 19:40

сам определяй что текст слишком длинный
и ищи его по частям :)

vuk 23.09.2005 11:00

длиннный не искомый/заменяемый текст, а текст содержащийся в переменной...

dyr_farot 23.09.2005 13:05

есть несколько способов...
один -- вставить текст для замены в буффер обмена и затем присвоить
.Replacement.Text = "^c"
можно просто найти текст ( без замены ) а потом вставить текст замены в это место...

vuk 23.09.2005 14:10

вариантны интересные, но не совсем подходят, т.к. идея макроса в автоматизации а ctrl+c можно и ручками делать.
Вообще я думал что есть в ВБ разные типы переменных, и по дефолту объявляются те в которых длинна строки не может превышать определенное кол-во символов, но если это не так, то остается второй вариант, только автоматический, т.е. скрипт ищет заменяемый текст, меняет его на пустое место, перемещает туда курсор и вставляет переменную с первой частью, потом второй ... потом n-ой...
хм, только так? :( каким методом это делается?

dyr_farot 23.09.2005 14:16

в смысле?
.Replacement.Text = "^c" заставит макрос вставить текст из буффера ( вручную нажимать ничего не придется )
длина Replacement.Text ограничена 255 символами...

а чем не нравится второй вариант?

vuk 23.09.2005 14:41

vuk писал: "и штук шесть таких операций проходит с разными переменнными"
поэтому ctrl+c не подходит в буфере то только содержание одной переменной может находиться :(
второй вариант просто не очень красивый какой-то 9-), но видимо придётся использовать его, дык какой коммандой сначала переместить курсор к нужному месту, и какой вставить текст из переменной на место курсора?

dyr_farot 23.09.2005 14:51

так в txtopf + " """ + company + """" тоже содержимое только одной переменной может храниться. в чем проблема то?

искать точно также, только .Replacement.Text = ""
и после поиска Selection.Text = ...
потом поиск повторить ( если возможны повторные вхождения )

vuk 23.09.2005 15:14

1. vuk писал "выводится формочка", т.е. в форму вбивается (отмечается галочкой, выбирается из выпадающего меню) нужное значение, полей в форме не одно и как минимум 2 из них (содержащих разные данные) длиннее чем разрешил Билли ("640Кб должно быть достаточно для всего" ох уж мне эти пророчества %) )а в буфер скопировать можно только значение....
2. вот, в споре рождается истина - форум заставляет серое вещество шевелиться, тогда делаем реплейс не просто текста переменной а имя_переменной + "!заменяемый!" (маркер места замены) повторяем операцию скока надо потом просто удаляем маркер, во как! 9-)
ещё один масенький вопросик - какая функция считает количество символов в строковой переменной, какая разбивает переменные (хоть на две разные хоть в массив преобразует)?

dyr_farot 23.09.2005 15:27

я что-то так и не понял проблемы...
у тебя есть текст, который нужно заменить в файле. у тебя есть текст на который нужно заменить ( он формируется из нескольких строковых переменных путем их сложения ). так?


длина строки -- Len()
подстроки -- Right$(откуда, сколько символов)/Left$()/Mid()

vuk 23.09.2005 16:27

не совсем, текст который нужно заменить указан в документе "маркерами" типа "!заменяемый!" "!заменяемый1!" и т.п. текст которым нужно заменить для каждого маркера свой, иногда он умещается в одну переменную, иногда складываются две...

dyr_farot 23.09.2005 16:41

сути это не меняет: есть текст, есть заменяющий текст. все.

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


Часовой пояс GMT +4, время: 23:54.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.