
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Сообщ.
#1
,
|
|
|
Есть необходимость от найденного в "Вордовском" тексте символа спуститься на строку ниже и вставить содержимое TextBox'а
Пытался делать так (спускаться): ![]() ![]() Dim a as String * 10 a = TextBox1.Text Selection.Find.ClearFormatting With Selection.Find .Text = "#1" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Selection.MoveDown Unit:=wdLine, Count:=1 Selection.Text = a Это не работает . Вставляется в зависимости от положения курсора в Word'е. Надо чтобы начало нижней строки (на которую пререхожу) должно быть четко под началом найденных символов |
Сообщ.
#2
,
|
|
|
Я так понял строкой ниже может быть всё что угодно: более короткая строка, более длинная, вообще пусто....
Тут макрос должен "думать", как-то примерно так наверное: ![]() ![]() Sub add_text (find_text as string, textbox As String) Dim line As Long Dim x As Double With Selection .Find.Execute find_text .MoveLeft 'запоминаем строку line = .Information(wdFirstCharacterLineNumber) 'запоминаем расстояние в мм от левого края до курсора x = .Information(wdHorizontalPositionRelativeToPage) 'пытаемся двигаться вниз .MoveDown If line = .Information(wdFirstCharacterLineNumber) Then 'не сдвинулись - пусто внизу 'добавляем строку .EndKey .TypeParagraph 'табуляция .ParagraphFormat.TabStops.Add x .TypeText Text:=vbTab + textbox Else 'удалось сдвинуться, внизу есть строка If Abs(x - .Information(wdHorizontalPositionRelativeToPage)) < 4 Then '4 - примерно половина ширины самого широкого символа ("ж") 12 шрифтом (вообще тута надо-б наверное что-то получше придумать) 'примерно попали под символ (ширина символов разная, длины в мм точно совпадать не должны я думаю) 'внизу более длинная строка .TypeText Text:=textbox Else 'более короткая, и тогда мы уже в её конце 'добавляем метку табуляции .ParagraphFormat.TabStops.Add x .TypeText Text:=vbTab + textbox End If End If End With End Sub ![]() Осталось поместить курсор в начало и вызвать ![]() ![]() add_text "#1", TextBox1.Text |
Сообщ.
#3
,
|
|
|
Цитата SV() @ Я так понял строкой ниже может быть всё что угодно: более короткая строка, более длинная, вообще пусто.... Точнее - в определенный участок строки ниже строки с найденным символом должно вставляться некоторое количество символов. Короче, это программка для вставки обоснований в смету. Если интересно, приведу кусок текста 8 #1 Светильники с люминисцентным 6.000 372.59 2236 .... и лампами для общественных п шт. --------- --------- омещений, потолочный с рассе .... ивателем цельным из оргстекл 9 #1 Щитки распределительные встр 1.000 1623.40 1623 .... аиваемые УОЩВ-6 с автоматиче шт. --------- --------- .... скими выключателями .... Мне нужно вставить вместо #1 14 символов, под #1 14 символов, можно бы использовать еще одну строку. Саму програмку я вообще-то уже сделал, но в 14 символов много не вкатаешь, сметчицы просят еще добавить Да... Посмотрел в предпросмотре, все "лишние" пробелы удалились.... Но смысл, наверное, понятен. Смета состоит из "столбцов" (без ячеек и знаков табуляции), первый столбец (где "8 #1")где-то 22 символа, второй - 30 и т.п |
Сообщ.
#4
,
|
|
|
По моему здесь явно нужен Excel, а не Word
![]() |
Сообщ.
#5
,
|
|
|
Цитата SV() @ По моему здесь явно нужен Excel, а не Word ![]() Согласен. Но это выдают сметные программы - Барс в частности, поэтому приходиться приспосабливаться. Ваш вариант еще не пробовал, пытался передвижением влево MoveLeft'ом на следующую строку перебраться от найденного символа - то же ![]() |
Сообщ.
#6
,
|
|
|
Цитата bi-lya @ Ни в коем случае! приходиться приспосабливаться ![]() Легче потратить день, два и написать конвертер из формата Барс в Excel и обратно, и забыть о проблеме, работая в Excel’e, чем каждый раз городить огород при возникновении любых, даже самых простых задач (в итоге потеряете гораздо больше времени). З.Ы. Глядя на приведенный пример записи мне вообще кажется, что написанный за пару часиков простенький макрос в Excel, который откроет там файл, и перегруппирует ячейки и будет конвертор. ![]() |
Сообщ.
#7
,
|
|
|
Легче потратить день, два и написать конвертер из формата Барс в Excel и обратно
... написанный за пару часиков простенький макрос в Excel... Конвертер - для меня это недостижимо ![]() А про макрос в экселе - не думаю, что там будет проще разобраться для меня - как я говорил, табуляции нет, поэтому даже не представляю, как можно это сделать Я сейчас пытаюсь разобраться с Range - сначала нахожу заданную группу символов с подстановочными знаками, потом область выделенния (естественно без текста) пытаюсь переместить на строку ниже и уже туда вставить нужное. И ничего пока не получается!!! ![]() |
Сообщ.
#8
,
|
|
|
Ну в общем еще могу добавить, что ваша задача со смешениями сильно нестандартна, и простого решения в word'e не имеет.
![]() В любом случае удачи! ![]() |
Сообщ.
#9
,
|
|
|
Должен с удовлетворением заявить, что все получилось. Использовал метод Range.Move & wdCharakter & Left c Right'ом. Спасибо всем принявшим участие!!!
![]() |