Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема VBA в Excel, Удаление ненужных пробелов 
:(
    Опции темы
andMegaM
Дата 20.10.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



У меня следующая загвоздка.
Есть код:

Columns("d:d").Select
Selection.Replace What:="  ", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Т.е. я заменяю в колонке "D"  два пробела на один (если где встречается).
Это очень не удобно, т.к. если пробелов стоит 10, то и 10 раз нужно запускать макрос.
Хотелось чтобы при запуске макроса я сам задавал с какой колонкой это нужно проделать и не 

10 раз, а один.

Т.е. типа следующего:

Dim d As String
 
d = InputBox("В какой колонке Вы хотите удалить пробелы?")
Columns("d:d").Select
Selection.Replace What:="  ", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Так ничего не получается. Может вообще каким-то другим образом это можно осуществить?
Прошу помощи...
PM MAIL   Вверх
Aloha
Дата 20.10.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



andMegaM

Код
v_ColNumber = CLng(InputBox("Введите номер столбца"))
Columns(v_ColNumber).Replace What:="  ", _
                     Replacement:=" ", _
                     SearchOrder:=xlByColumns


PM   Вверх
andMegaM
Дата 20.10.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



БОЛЬШОЕ СПАСИБО работает. А если просто убрать все пробелы за один раз - это возможно?
PM MAIL   Вверх
Aloha
Дата 20.10.2006, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



andMegaM

Код
Cells.Replace What:="  ", _
              Replacement:=" "


PM   Вверх
andMegaM
Дата 20.10.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Спасибо это класно. Наверо не совсем понятно задал вопрос, но мне хотелось бы немного другое.
Если есть какая нибудь фраза и между словами стоит 10 пробелов, то после обработки макроса (один раз) все 10 пробелов заменились на один пробел. 
Я думаю сели не заменой "  " на " " а как нибудь в цикле пока не станет один пробел или может специальная функция есть.
P. S.
В VBA я новичок.

PM MAIL   Вверх
Aloha
Дата 20.10.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



andMegaM
Цитата
Наверо не совсем понятно задал вопрос, но мне хотелось бы немного другое.

Да нет, это я невнимательно читал.

Код
Application.ScreenUpdating = False
Do Until Cells.Find(What:="  ") Is Nothing
  Cells.Replace What:="  ", _
                Replacement:=" "
Loop
Application.ScreenUpdating = True

PM   Вверх
andMegaM
Дата 20.10.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Отлично!!! То что надо.  Большое спасибо. Тему считаю закрытой. Но если кому-нибудь пригодится, то мне подсказали еще один вариант.

Dim rng As Range, rng2 As Range
    On Error Resume Next
    Set rng = Application.InputBox( _
      Prompt:="Ãäå Âû õîòèòå óäàëèòü ïðîáåëû?", _
      Title:="Âûáîð", Type:=8, Left:=200, Top:=-65)
    If Not rng Is Nothing Then
        For Each rng2 In rng
            If rng2.Value <> "" Then rng2.Value = Application.WorksheetFunction.TRIM(rng2.Value)
        Next
    End If

Добавлено @ 17:20 
Код

Dim rng As Range, rng2 As Range
    On Error Resume Next
    Set rng = Application.InputBox( _
      Prompt:="Ãäå Âû õîòèòå óäàëèòü ïðîáåëû?", _
      Title:="Âûáîð", Type:=8, Left:=200, Top:=-65)
    If Not rng Is Nothing Then
        For Each rng2 In rng
            If rng2.Value <> "" Then rng2.Value = Application.WorksheetFunction.TRIM(rng2.Value)
        Next
    End If


Добавлено @ 17:23 
Блин не увидел что за шрифт
Код

Dim rng As Range, rng2 As Range
    On Error Resume Next
    Set rng = Application.InputBox( _
      Prompt:="Где Вы хотите удалить пробелы?", _
      Title:="Выбор", Type:=8, Left:=200, Top:=-65)
    If Not rng Is Nothing Then
        For Each rng2 In rng
            If rng2.Value <> "" Then rng2.Value = Application.WorksheetFunction.TRIM(rng2.Value)
        Next
    End If

PM MAIL   Вверх
RockClimber
Дата 20.10.2006, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Обязательно было это делать макросом? Если нет, то в Excel есть функция СЖПРОБЕЛЫ (или типа того, в текстовых), которая удаляет все лишние пробелы, оставляет по одному после каждого слова.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0974 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.