Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выделение нескольких фрагментов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Выделение нескольких фрагментов
Revengencer Дата: Суббота, 30.04.2016, 20:19 | Сообщение № 1
Группа: Проверенные
Ранг: Новичок
Сообщений: 34
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте.

В Word мы можем выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?

При таком коде копируется только второй фрагмент (между "р2" и "р3")

[vba]
Код
Sub Выписка()
Dim r
Set r = ActiveDocument.Range
With r.Find
    .ClearFormatting
    .Text = "ОАО*р1"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    If .Execute Then
        ActiveDocument.Range(r.Start + 0, r.End - 2).Select
        Selection.Copy
    Else
        MsgBox "Текст не найден!", vbExclamation
    End If
End With

With r.Find
    .ClearFormatting
    .Text = "р2*р3"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    If .Execute Then
        ActiveDocument.Range(r.Start + 3, r.End - 3).Select
        Selection.Copy
    Else
        MsgBox "Текст не найден!", vbExclamation
    End If
End With

Documents.Add
Selection.Paste
Selection.TypeBackspace
ChangeFileOpenDirectory "D:\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="Выписка_" & DocNum & ".doc"
ActiveDocument.Close

End Sub
[/vba]
К сообщению приложен файл: Protocol2.docm (20.7 Kb)


Сообщение отредактировал Revengencer - Суббота, 30.04.2016, 20:19
 
Ответить
СообщениеЗдравствуйте.

В Word мы можем выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?

При таком коде копируется только второй фрагмент (между "р2" и "р3")

[vba]
Код
Sub Выписка()
Dim r
Set r = ActiveDocument.Range
With r.Find
    .ClearFormatting
    .Text = "ОАО*р1"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    If .Execute Then
        ActiveDocument.Range(r.Start + 0, r.End - 2).Select
        Selection.Copy
    Else
        MsgBox "Текст не найден!", vbExclamation
    End If
End With

With r.Find
    .ClearFormatting
    .Text = "р2*р3"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    If .Execute Then
        ActiveDocument.Range(r.Start + 3, r.End - 3).Select
        Selection.Copy
    Else
        MsgBox "Текст не найден!", vbExclamation
    End If
End With

Documents.Add
Selection.Paste
Selection.TypeBackspace
ChangeFileOpenDirectory "D:\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="Выписка_" & DocNum & ".doc"
ActiveDocument.Close

End Sub
[/vba]

Автор - Revengencer
Дата добавления - 30.04.2016 в 20:19
Gustav Дата: Воскресенье, 01.05.2016, 10:01 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
В Word мы можем
выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?


К сожалению, никак :( существуют ограничения на доступ к несмежным выделениям при помощи VBA: https://support.microsoft.com/ru-ru/kb/288424

В частности, как раз нельзя программно выделить несколько диапазонов, только через пользовательский интерфейс и только при помощи мышки и Ctrl (только одной клавиатурой тоже нельзя). При этом диапазон Selection.Range будет ссылаться только на один последний выделенный фрагмент. С самим же Selection, выделенным заранее вручную, можно программно выполнить ряд привычных действий: изменение шрифта, копирование, поиск и т.п.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
В Word мы можем
выделить один фрагмент текста, зажать Ctrl, выделить другой и дальше делать с ними что-нибудь (раскрасить или скопировать-вставить).
А как сделать то же самое в коде макроса?


К сожалению, никак :( существуют ограничения на доступ к несмежным выделениям при помощи VBA: https://support.microsoft.com/ru-ru/kb/288424

В частности, как раз нельзя программно выделить несколько диапазонов, только через пользовательский интерфейс и только при помощи мышки и Ctrl (только одной клавиатурой тоже нельзя). При этом диапазон Selection.Range будет ссылаться только на один последний выделенный фрагмент. С самим же Selection, выделенным заранее вручную, можно программно выполнить ряд привычных действий: изменение шрифта, копирование, поиск и т.п.

Автор - Gustav
Дата добавления - 01.05.2016 в 10:01
Revengencer Дата: Воскресенье, 01.05.2016, 15:56 | Сообщение № 3
Группа: Проверенные
Ранг: Новичок
Сообщений: 34
Репутация: 13 ±
Замечаний: 0% ±

Excel 2016
К сожалению, никак

Что ж, ладно) Спасибо за информацию. Буду копировать-вставлять по отдельности.
 
Ответить
Сообщение
К сожалению, никак

Что ж, ладно) Спасибо за информацию. Буду копировать-вставлять по отдельности.

Автор - Revengencer
Дата добавления - 01.05.2016 в 15:56
krosav4ig Дата: Понедельник, 02.05.2016, 03:23 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
если нужно копировать, то можно (имхо) не копировать нужное, а удалять ненужное, например, заменой с подстановочными знаками: в поле заменить
Цитата
(ОАО*)р1*р2(*)р3*пр>(*)
в поле заменить на
Цитата
\1\2\3


[vba]
Код
ActiveDocument.Range.Find.Execute "(ОАО*)р1*р2(*)р3*пр>(*)", , , 1, , , , , , "\1\2\3", 1
[/vba]
К сообщению приложен файл: 7967128.gif (39.5 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеесли нужно копировать, то можно (имхо) не копировать нужное, а удалять ненужное, например, заменой с подстановочными знаками: в поле заменить
Цитата
(ОАО*)р1*р2(*)р3*пр>(*)
в поле заменить на
Цитата
\1\2\3


[vba]
Код
ActiveDocument.Range.Find.Execute "(ОАО*)р1*р2(*)р3*пр>(*)", , , 1, , , , , , "\1\2\3", 1
[/vba]

Автор - krosav4ig
Дата добавления - 02.05.2016 в 03:23
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!