Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Добавить буквы в Текст

269
03 ноября 2005 года
Greenering
892 / / 04.02.2003
Прошу сразу не пинать! :)
Лучше ткните в хороший електронный ресурс на русс.язе (подчеркнуто) по VBA.
Итак сама задача
Текст в ворде (выглядит примерно так)
fgh-11111 rty-1111 00 00 fghfjgh, 5 ghghgh
fgh-11231 rty-1231 03 0f ffdgdjgh, 5 fgfgf

и т.д.

я хочу получить
!fgh-11111 @rty-1111 00 00 #fghfjgh, 5 $ghghgh
!fgh-11231 @rty-1231 03 0f $ffdgdjgh, 5 $fgfgf
и т.д.
Как видите добавить надо один символ
Если с первыми двумя понятно (начальные буквы одинаковы), то потом мне не понятно по какому критерю обрабатывать. И вообще как правильно организовать цикл в Word-e?
Одни вопросы вообщем.
Кто хочет стать проводником?
7.1K
03 ноября 2005 года
likhobory
87 / / 18.05.2005
Цитата:

Текст в ворде (выглядит примерно так)
fgh-11111 rty-1111 00 00 fghfjgh, 5 ghghgh
fgh-11231 rty-1231 03 0f ffdgdjgh, 5 fgfgf

и т.д.

я хочу получить
!fgh-11111 @rty-1111 00 00 #fghfjgh, 5 $ghghgh
!fgh-11231 @rty-1231 03 0f $ffdgdjgh, 5 $fgfgf
и т.д.

1.насколько я понимаю, добавляется явно не ОДИН символ, так что для правильного ответа опиши задачу подробнее
2.ссылок на VBA-ресурсы - море, но не думаю, что их упоминание будет корректным по отношению к данному форуму, воспользуйся поисковой системой, но, для начала, попробуй получить ответ здесь ;)

269
03 ноября 2005 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by likhobory
1.насколько я понимаю, добавляется явно не ОДИН символ, так что для правильного ответа опиши задачу подробнее
2.ссылок на VBA-ресурсы - море, но не думаю, что их упоминание будет корректным по отношению к данному форуму, воспользуйся поисковой системой, но, для начала, попробуй получить ответ здесь ;)


по первому пункту:
Текст в ворде (выглядит примерно так)
fgh-11111 rty-1111 00 00 fghfjgh, 5 ghghgh
fgh-11231 rty-1231 03 0f ffdgdjgh, 5 fgfgf

и т.д.

я хочу получить
[COLOR=red]![/COLOR]fgh-11111 [COLOR=red]@[/COLOR]rty-1111 00 00 [COLOR=red]#[/COLOR]fghfjgh, 5 [COLOR=red]$[/COLOR]ghghgh
[COLOR=red]![/COLOR]fgh-11231 [COLOR=red]@[/COLOR]rty-1231 03 0f [COLOR=red]#[/COLOR]ffdgdjgh, 5 [COLOR=red]$[/COLOR]fgfgf
и т.д
Помоему задача четко определена.

по второму: ресурс ищу! ответа жду!

7.1K
03 ноября 2005 года
likhobory
87 / / 18.05.2005
если хочешь добавить опред. символ в зависимости от позиции слова в строке, то можешь воспользоваться вариантом (для WORD2003и выше)
 
Код:
'работаем с первой страницей
For Each ll In ActiveDocument.ActiveWindow _
    .Panes(1).Pages(1).Rectangles(1).Lines
 With ll.Range.Words
 .Item(1).text = "!" & .Item(1).text
 .Item(5).text = "@" & .Item(5).text
 '''''''''''''''''
 End With
Next
269
03 ноября 2005 года
Greenering
892 / / 04.02.2003
Давай-те так!
Я дам алгоритм и отмечу интересующие пункты

1)цикл с начала до последней строчки
2)текущую строку закинуть в переменную
3)Разобрать строчку
4)Расставить знаки
5)конец цикла

Интересует:
1) Как организовать цикл (для Екселя я умею, - с вордом :( )
2) На всякий случай
5) На всякий случай
Остальное как-нить сами или спросим :)
7.1K
03 ноября 2005 года
likhobory
87 / / 18.05.2005
Цитата:
Originally posted by Greenering
Давай-те так!
Я дам алгоритм и отмечу интересующие пункты

1)цикл с начала до последней строчки
2)текущую строку закинуть в переменную
3)Разобрать строчку
4)Расставить знаки
5)конец цикла

Интересует:
1) Как организовать цикл (для Екселя я умею, - с вордом :( )
2) На всякий случай
5) На всякий случай
Остальное как-нить сами или спросим :)


'перебираем все строки первой страницы
'при смене страницы меняем значение Pages(1)

 
Код:
For Each ll In ActiveDocument.ActiveWindow _
    .Panes(1).Pages(1).Rectangles(1).Lines'(1)
 With ll.Range.Words '(3+4)
 .Item(1).text = "!" & .Item(1).text '(3+4)
 .Item(5).text = "@" & .Item(5).text '(3+4)
 '''''''''''''''''
 End With
Next' (5)
269
06 ноября 2005 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by likhobory
'перебираем все строки первой страницы
'при смене страницы меняем значение Pages(1)

 
Код:
For Each ll In ActiveDocument.ActiveWindow _
    .Panes(1).Pages(1).Rectangles(1).Lines'(1)
 With ll.Range.Words '(3+4)
 .Item(1).text = "!" & .Item(1).text '(3+4)
 .Item(5).text = "@" & .Item(5).text '(3+4)
 '''''''''''''''''
 End With
Next' (5)


что-то не работоспособный кодик, уважаемый!
Мне нужен код: что бы он работал так:

цикл(такой-то) условие выхода(отсутствие данных в строке) и т.д.

488
06 ноября 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by Greenering
что-то не работоспособный кодик, уважаемый!
Мне нужен код: что бы он работал так:
цикл(такой-то) условие выхода(отсутствие данных в строке) и т.д.

А кодик рабочий, обрабатывающий все строки и
деформируюший их до неузнаваемости подходит?

Ставка символов определена неоднозначно.

Нужно ставить в конкретную фикс позицию?
В первой строке '$' ставится в позицию N. Во-второй строке из-за того, что 5й столбец содержит на 2 символа больше, '$' ставится в позицию N+2.

Т.е. фикс позиция или признак какой-то. Напр. после 6-го пробела ставится '$'?

269
06 ноября 2005 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Mоngооsе
А кодик рабочий, обрабатывающий все строки и
деформируюший их до неузнаваемости подходит?

Ставка символов определена неоднозначно.

Нужно ставить в конкретную фикс позицию?
В первой строке '$' ставится в позицию N. Во-второй строке из-за того, что 5й столбец содержит на 2 символа больше, '$' ставится в позицию N+2.

Т.е. фикс позиция или признак какой-то. Напр. после 6-го пробела ставится '$'?


первые три символа ставятся в четко определенные места, те первый символ в начало строки, второй через N символов, третий еще через M символов, а вот четвертый символ, тут сложнее: после запятой и перед первой БУКВОЙ.
Но мне сам готовый кодик не надо, мне помочь разобраться надо! Вот!
ЗЫ вопрос тот же как сделать цикл который мне нужен

488
06 ноября 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by Greenering
первые три символа ставятся в четко определенные места, те первый символ в начало строки, второй через N символов, третий еще через M символов, а вот четвертый символ, тут сложнее: после запятой и перед первой БУКВОЙ.
Но мне сам готовый кодик не надо, мне помочь разобраться надо! Вот!ЗЫ вопрос тот же как сделать цикл который мне нужен

Код:
Dim str, buf As String
  Dim i, j, jPos, chPos, n, m As Integer
  Dim code As Integer
  Dim pageCount, rectCount, pageNdx, rectNdx As Integer
 
  pageCount = ActiveDocument.ActiveWindow.Panes(1).Pages.Count
  For pageNdx = 1 To pageCount
    rectCount = ActiveDocument.ActiveWindow.Panes(1).Pages(pageNdx).Rectangles.Count
    For rectNdx = 1 To rectCount
      For Each ll In ActiveDocument.ActiveWindow.Panes(1).Pages(pageNdx).Rectangles(rectNdx).Lines
        n = Len(ll.Range)
        If n <= 26 Then
          Exit For
        End If
        jPos = InStr(27, ll.Range, ",")
        If jPos = 0 Then
          Exit For
        End If
        chPos = 0
        For i = jPos + 1 To n
          c = Asc(UCase(Mid(ll.Range, i, 1)))
          If (c >= 65 And c <= 90) Or (c >= 128 And c <= 159) Then
            chPos = i
            Exit For
          End If
        Next
        If chPos = 0 Then
          Exit For
        End If
        str = "!" + Left(ll.Range, 10) + "@" + Mid(ll.Range, 11, 15) + _
                "#" + Mid(ll.Range, 26, chPos - 26) + "$" + Mid(ll.Range, chPos)
        ll.Range = str
      Next ll
    Next rectNdx
  Next pageNdx
  MsgBox "Ok!"
Это не прога, а макрос. Чтоб проверить как работает, нужно определить какой-то макрос в Word. Заменить текст, на то, что выше и вызвать макрос.

Он проверяет все строки документа.
Но если длина тек. строки <=26, или в ней нет запятой после 26й позиции, или после этой запятой нет буквы, тогда выход из текущей секции.
269
06 ноября 2005 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Mоngооsе
Код:
Dim str, buf As String
  Dim i, j, jPos, chPos, n, m As Integer
  Dim code As Integer
  Dim pageCount, rectCount, pageNdx, rectNdx As Integer
 
  pageCount = ActiveDocument.ActiveWindow.Panes(1).Pages.Count
  For pageNdx = 1 To pageCount
    rectCount = ActiveDocument.ActiveWindow.Panes(1).Pages(pageNdx).Rectangles.Count
    For rectNdx = 1 To rectCount
      For Each ll In ActiveDocument.ActiveWindow.Panes(1).Pages(pageNdx).Rectangles(rectNdx).Lines
        n = Len(ll.Range)
        If n <= 26 Then
          Exit For
        End If
        jPos = InStr(27, ll.Range, ",")
        If jPos = 0 Then
          Exit For
        End If
        chPos = 0
        For i = jPos + 1 To n
          c = Asc(UCase(Mid(ll.Range, i, 1)))
          If (c >= 65 And c <= 90) Or (c >= 128 And c <= 159) Then
            chPos = i
            Exit For
          End If
        Next
        If chPos = 0 Then
          Exit For
        End If
        str = "!" + Left(ll.Range, 10) + "@" + Mid(ll.Range, 11, 15) + _
                "#" + Mid(ll.Range, 26, chPos - 26) + "$" + Mid(ll.Range, chPos)
        ll.Range = str
      Next ll
    Next rectNdx
  Next pageNdx
  MsgBox "Ok!"
Это не прога, а макрос. Чтоб проверить как работает, нужно определить какой-то макрос в Word. Заменить текст, на то, что выше и вызвать макрос.

Он проверяет все строки документа.
Но если длина тек. строки <=26, или в ней нет запятой после 26й позиции, или после этой запятой нет буквы, тогда выход из текущей секции.


Для начала: спасибо, но хотелось самой поучится, но все равно спасибо.
Теперь вопросы
на
1)Pages
2)Rectangles
3)Lines
ругается
Method or data member not found (Error 461)
еть чего значит?

488
06 ноября 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by Greenering
Для начала: спасибо, но хотелось самой поучится, но все равно спасибо.
Теперь вопросы
на
1)Pages
2)Rectangles
3)Lines
ругается
Method or data member not found (Error 461)
еть чего значит?

Word ругается? Я же писал, это не прога, а макрос.

7.1K
07 ноября 2005 года
likhobory
87 / / 18.05.2005
1. для того чтоб усе работало, неплохо бы четко формулировать задачу в первом посте, а не в середине дискусии, поскольку штатные телепаты на данном форуме почти отсутствуют ;)
2.
Цитата:
(для WORD2003 и выше)


также неплохо бы внимательно прочесть вышеуказанные посты и убедиться в наличии соотв. версии MS OFFICE
3. если MS OFFICE версии 2000/ХР - как вариант, могу предложить сконвертировать текст в таблицу (ConvertToTable) и работать по аналогии с EXCEL
4. удачи! :)

269
11 ноября 2005 года
Greenering
892 / / 04.02.2003
Всем кто участвовал - спасибо! после некоторых доработок и небольшого изучения VBA все получилось
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог