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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2010, 22:39   #1
vfayans
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 13
Вопрос Уничтожение пробелов в Word в VBA

1. При копировании вручную строки " (q" во другую начальный пробел не копируется.
2. При попытке уничтожить начальные пробелы в выделенном тексте оператором Selection.Range.Characters.First.De lete в простейшей процедурке TEST_First происходит следующее: если начальных пробелов – 2, оба изничтожаются за одну итерацию, а если – 1, то он не изничтожается вовсе, если следующий после пробела символ - открывающая скобка (есть ли ещё «нехорошие» символы, я не знаю, специально не искал).
3. Не работает уничтожение единичного пробела в конце выделенного текста оператором Selection.Range.Characters(n - 1). n - длина строки, включая концевик. Процедурка TEST_Last демонстрирует это, если выделить всю строку, включая символ её конца, а TEST_Last_1 с оператором Selection.Range.Characters.Last.Del ete– если выделить всё, кроме концевика. Самое поганое, что обе процедуры прекрасно уничтожают все концевые пробелы, кроме последнего, а на нём начинают циклить ! Увы мне, не смог присоединить коротенький тестовый файл с тестовыми процедурками !
vfayans вне форума Ответить с цитированием
Старый 29.08.2010, 22:56   #2
CyberMen
Заблокирован
 
Регистрация: 08.08.2010
Сообщений: 41
По умолчанию

vfayans
очень много написано. Напишите поменьше.
CyberMen вне форума Ответить с цитированием
Старый 30.08.2010, 09:47   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Не совсем понятна задача. Но вообще убрать граничные пробелы в выделении, можно переместив начало и конец выделения:
Код:
Selection.MoveStartWhile (" ", wdForward) 'Смещение начала выделения, пока есть пробел
Selection.MoveEndWhile (" ", wdBackward) 'Смещение конца выделения
В обоих случаях функции вернут количество символов, на которое произошло смещение, т.е. количество пробелов.
А если пробелы всё-таки нужно удалить, то это можно сделать функцией Trim
Код:
Selection.Text = Trim(Selection.Text)
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 30.08.2010 в 09:50.
viter.alex вне форума Ответить с цитированием
Старый 30.08.2010, 15:42   #4
vfayans
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 13
Радость Уничтожение пробелов в Word в VBA

Спасибо за TRIM (LTrim, RTrim). Это решает проблему удаления начальных пробелов в начале строки сразу, а конечных - после отделения текста строки от концевика. Остаётся проблема некорректной работы некоторых методов VBA. Кстати, хорошо бы иметь раздельчик на форуме, посвящённый "пенкам" VBA (и не только).
vfayans вне форума Ответить с цитированием
Старый 31.08.2010, 12:12   #5
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию

vfayans, не знаю правильно понял ли вопрос но наверное это можно решить и finde+change
1. Удалить лишние пробелы finde "^w" change " "
2. Удалить пробел в начале абзаца finde "^p^w" change "^p"
chugo вне форума Ответить с цитированием
Старый 31.08.2010, 12:55   #6
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от vfayans Посмотреть сообщение
1. При копировании вручную строки " (q" во другую начальный пробел не копируется
Все, что MS Word делает сам по себе (автоматически) лечится настройками.
В этом случае: MS Word 2010 > вкладка «Файл» > кнопка «Параметры» > вкладка «Дополнительно» > в разделе «Вырезание, копирование, вставка» снимаем флаг «Учитывать пробелы»
Цитата:
Сообщение от vfayans Посмотреть сообщение
2. При попытке уничтожить начальные пробелы в выделенном тексте...
См. первый совет или пиши так:
Код:
    With Selection.Range
        .Collapse Direction:=Word.wdCollapseStart
        .Delete Unit:=wdCharacter, Count:=1
    End With
Цитата:
Сообщение от vfayans Посмотреть сообщение
3. Не работает уничтожение единичного пробела в конце выделенного текста...
См. первый совет или пиши так:
Код:
    With Selection.Range
        .Collapse Direction:=Word.wdCollapseEnd
        .Move Unit:=wdCharacter, Count:=-1
        .Delete Unit:=wdCharacter, Count:=-1
    End With
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
VBA в Word jilik Microsoft Office Word 4 06.04.2010 18:27
word vba Alexsey1991 Помощь студентам 0 25.12.2009 21:08
Задача по VBA в Word оксаночка Помощь студентам 3 07.05.2009 14:03
Отображение пробелов в редакторе VBA AVTS Microsoft Office Excel 4 30.04.2009 02:58