Добавить буквы в Текст
Лучше ткните в хороший електронный ресурс на русс.язе (подчеркнуто) по 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?
Одни вопросы вообщем.
Кто хочет стать проводником?
Текст в ворде (выглядит примерно так)
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-ресурсы - море, но не думаю, что их упоминание будет корректным по отношению к данному форуму, воспользуйся поисковой системой, но, для начала, попробуй получить ответ здесь ;)
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
и т.д
Помоему задача четко определена.
по второму: ресурс ищу! ответа жду!
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
Я дам алгоритм и отмечу интересующие пункты
1)цикл с начала до последней строчки
2)текущую строку закинуть в переменную
3)Разобрать строчку
4)Расставить знаки
5)конец цикла
Интересует:
1) Как организовать цикл (для Екселя я умею, - с вордом :( )
2) На всякий случай
5) На всякий случай
Остальное как-нить сами или спросим :)
Давай-те так!
Я дам алгоритм и отмечу интересующие пункты
1)цикл с начала до последней строчки
2)текущую строку закинуть в переменную
3)Разобрать строчку
4)Расставить знаки
5)конец цикла
Интересует:
1) Как организовать цикл (для Екселя я умею, - с вордом :( )
2) На всякий случай
5) На всякий случай
Остальное как-нить сами или спросим :)
'перебираем все строки первой страницы
'при смене страницы меняем значение Pages(1)
.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)
'перебираем все строки первой страницы
'при смене страницы меняем значение Pages(1)
.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)
что-то не работоспособный кодик, уважаемый!
Мне нужен код: что бы он работал так:
цикл(такой-то) условие выхода(отсутствие данных в строке) и т.д.
что-то не работоспособный кодик, уважаемый!
Мне нужен код: что бы он работал так:
цикл(такой-то) условие выхода(отсутствие данных в строке) и т.д.
А кодик рабочий, обрабатывающий все строки и
деформируюший их до неузнаваемости подходит?
Ставка символов определена неоднозначно.
Нужно ставить в конкретную фикс позицию?
В первой строке '$' ставится в позицию N. Во-второй строке из-за того, что 5й столбец содержит на 2 символа больше, '$' ставится в позицию N+2.
Т.е. фикс позиция или признак какой-то. Напр. после 6-го пробела ставится '$'?
А кодик рабочий, обрабатывающий все строки и
деформируюший их до неузнаваемости подходит?
Ставка символов определена неоднозначно.
Нужно ставить в конкретную фикс позицию?
В первой строке '$' ставится в позицию N. Во-второй строке из-за того, что 5й столбец содержит на 2 символа больше, '$' ставится в позицию N+2.
Т.е. фикс позиция или признак какой-то. Напр. после 6-го пробела ставится '$'?
первые три символа ставятся в четко определенные места, те первый символ в начало строки, второй через N символов, третий еще через M символов, а вот четвертый символ, тут сложнее: после запятой и перед первой БУКВОЙ.
Но мне сам готовый кодик не надо, мне помочь разобраться надо! Вот!
ЗЫ вопрос тот же как сделать цикл который мне нужен
первые три символа ставятся в четко определенные места, те первый символ в начало строки, второй через N символов, третий еще через M символов, а вот четвертый символ, тут сложнее: после запятой и перед первой БУКВОЙ.
Но мне сам готовый кодик не надо, мне помочь разобраться надо! Вот!ЗЫ вопрос тот же как сделать цикл который мне нужен
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!"
Он проверяет все строки документа.
Но если длина тек. строки <=26, или в ней нет запятой после 26й позиции, или после этой запятой нет буквы, тогда выход из текущей секции.
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!"
Он проверяет все строки документа.
Но если длина тек. строки <=26, или в ней нет запятой после 26й позиции, или после этой запятой нет буквы, тогда выход из текущей секции.
Для начала: спасибо, но хотелось самой поучится, но все равно спасибо.
Теперь вопросы
на
1)Pages
2)Rectangles
3)Lines
ругается
Method or data member not found (Error 461)
еть чего значит?
Для начала: спасибо, но хотелось самой поучится, но все равно спасибо.
Теперь вопросы
на
1)Pages
2)Rectangles
3)Lines
ругается
Method or data member not found (Error 461)
еть чего значит?
Word ругается? Я же писал, это не прога, а макрос.
2.
также неплохо бы внимательно прочесть вышеуказанные посты и убедиться в наличии соотв. версии MS OFFICE
3. если MS OFFICE версии 2000/ХР - как вариант, могу предложить сконвертировать текст в таблицу (ConvertToTable) и работать по аналогии с EXCEL
4. удачи! :)