Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2010, 14:04   #11
sam00
Пользователь
 
Аватар для sam00
 
Регистрация: 22.09.2010
Сообщений: 21
По умолчанию

Код:
Sub DivideLettersBySpaces()
  Dim oRng As Range, i&, IsEnd As Boolean
  Dim iStart& 'Переменная для ограничения нижней границы поиска
  Do While Not IsEnd 'Продолжаем поиск пока флаг установлен
    With ActiveDocument.Range(iStart, ActiveDocument.Range.End).Find
      'Ищем слово, которое может состоять только из латинских или кириллических букв
      .Text = "<[A-za-zА-ЯЁа-яё]@>"
      .MatchWildcards = True
      .Execute
      If .Found Then 'слово найдено
        Set oRng = .Parent
        'Перед каждым символом в слове, кроме первого, вставляем пробел
        For i = oRng.Characters.Count To 2 Step -1
          oRng.Characters(i).InsertBefore " "
        Next
        'Нижнюю границу поиска переносим в конец слова уже с учетом добавленных пробелов
        iStart = oRng.End
        'В слове, разделенном пробелами делаем величину шрифта для пробелов равной 1
        With oRng.Find
          .Text = " "
          .Replacement.Font.Size = 1
          .Execute Replace:=wdReplaceAll
        End With
      Else: IsEnd = True 'Если слово не было найдено, выходим из цикла
      End If
    End With
  Loop
End Sub

А можно ли такое же, но чтобы текст обрабатывался лишь в одной ячейке в Excel? Например, для А1...

Последний раз редактировалось sam00; 25.09.2010 в 14:06.
sam00 вне форума Ответить с цитированием
Старый 25.09.2010, 15:09   #12
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А при чём здесь Excel? А вообще, можно. Если не заморачиваться с пробелами и знаками препинания, то вот так:
Код:
Sub test()
  Dim s As String, s1 As String
  Dim i As Integer
  
  s = [a1].Value
  For i = 1 To Len(s)
    s1 = s1 & Mid(s, i, 1) & " "
  Next
  [a1].Value = s1
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 25.09.2010, 15:14   #13
sam00
Пользователь
 
Аватар для sam00
 
Регистрация: 22.09.2010
Сообщений: 21
По умолчанию

Благодарю, именно такое и нужно
sam00 вне форума Ответить с цитированием
Старый 25.09.2010, 22:40   #14
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Вместо пробелов проще использовать спецсимволы нулевой длины. Таких символов в наборе Unicode предостаточно. Минус в том, что не все шрифты их поддерживают. Например, ChrW(&H200B) - неразрывный пробел нулевой длины, или другие из интервала &H200C-&H200F.
В MS Word вся операция сводится к одной замене:
Код:
    With ActiveDocument.Range
        .Collapse
        With .Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Wrap = wdFindContinue
            .MatchWildcards = True
            .Text = "([A-Za-zА-ЯЁа-яё])([A-Za-zА-ЯЁа-яё])"
            .Replacement.Text = "\1" & ChrW$(&H200E) & "\2"
            .Execute Replace:=Word.wdReplaceAll
            End With
    End With
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 27.09.2010, 10:20   #15
garik64
Форумчанин
 
Регистрация: 09.07.2009
Сообщений: 111
По умолчанию

Вообще не понимаю, зачем тут макрос. Найти "([А-Яа-я])([А-Яа-я])" с подстановочными знаками, заменить на "\1 \2" и прогнать эту операцию два раза.
garik64 вне форума Ответить с цитированием
Старый 27.09.2010, 11:47   #16
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от garik64 Посмотреть сообщение
Вообще не понимаю, зачем тут макрос. Найти "([А-Яа-я])([А-Яа-я])" с подстановочными знаками, заменить на "\1 \2" и прогнать эту операцию два раза.
Затем, что пробел должен быть не того же кегля, что и текст, а 1 пт
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 27.09.2010, 11:59   #17
garik64
Форумчанин
 
Регистрация: 09.07.2009
Сообщений: 111
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Затем, что пробел должен быть не того же кегля, что и текст, а 1 пт
Бог ты мой! На одну операцию больше. "([А-Яа-я])([А-Яа-я])" менять на \1#\2, а потом # на "пробел, 1 пт".
garik64 вне форума Ответить с цитированием
Старый 27.09.2010, 12:02   #18
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Не то ли самое я предложил с самого начала?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 27.09.2010, 12:12   #19
garik64
Форумчанин
 
Регистрация: 09.07.2009
Сообщений: 111
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Не то ли самое я предложил с самого начала?
Упс! Действительно, проглядел. Прошу пардону.
garik64 вне форума Ответить с цитированием
Старый 08.05.2014, 23:06   #20
julle
Новичок
Джуниор
 
Регистрация: 08.05.2014
Сообщений: 1
По умолчанию

Подскажите, как можно сделать так, что бы при обработке макросом ворд не подчеркивал красным?
julle вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простенькая программа для ворда. Возможен заказ shadowbat Фриланс 7 24.03.2009 06:27
Простенькая программа для ворда. Возможен заказ shadowbat Microsoft Office Word 2 16.03.2009 13:01
Скрипт для голосования Gopius PHP 11 11.01.2009 15:57
Скрипт для показа баннеров phonograph PHP 1 18.08.2008 17:54