Vba word выделенный текст в переменную

Как передать выделенный текст документа в строковую переменную?

Автор tvitaly1, 11 марта 2012, 14:55

0 Пользователи и 1 гость просматривают эту тему.

Microsoft Word VBA делаю так:
Dim s as string

s:=selection.text

В результате в переменную s заносится текст выделенного фрагмента.

А как это сделать  Basic Write?


Можно так:

REM  *****  BASIC  *****

Sub Main
Dim s As String
Dim selection As Object
selection = ThisComponent.CurrentSelection
if  selection.count = 1 then
   s = selection.getByIndex(0).String
   msgbox s
else
   for i=1 to selection.count1
      s = s + selection.getByIndex(i).String + chr(13)
   next
   msgbox s
endif
End Sub


Цитата: Клио от 11 марта 2012, 18:01
Можно так:

REM  *****  BASIC  *****

Sub Main
Dim s As String
Dim selection As Object
selection = ThisComponent.CurrentSelection
if  selection.count = 1 then
   s = selection.getByIndex(0).String
   msgbox s
else
   for i=1 to selection.count1
      s = s + selection.getByIndex(i).String + chr(13)
   next
   msgbox s
endif
End Sub

Спасибо, Клио!
Вот функция, для модуля Selection :)

Function Text As String
Dim selection As Object
selection = ThisComponent.CurrentSelection
if  selection.count = 1 then
  Text = selection.getByIndex(0).String
else
   Text=»»
  for i=1 to selection.count — 1
     Text = Text + selection.getByIndex(i).String + chr(13)
  next
end if

end Function


К стати о птичках, конец абзаца в Write кодируется двумя символами — chr(13)+chr(10)!



Цитата: Клио от 17 марта 2012, 11:32
На Windows. На Linux только chr(13).

А почему так?
Я решил программно устранить эту вещь. :) Вот код программы удаляющий повторяющиеся пробелы в выделенном текстею

ЦитироватьSub Main
dim s as string, s1 as string, i as long
  s1=TextCopy
  ‘Удалим повторяющиеся пробелы в выделеных фрагментах
  s=»»
  s1=»@»+s1
  For i=2 to len(s1)
   if not( mid(s1,i-1,1)=» » and mid(s1,i,1)=» » ) then
    s = s+mid(s1,i,1)
   end if
  next i   
   TextPaste s 

End Sub

Function TextCopy As string
dim i as long
    TextCopy=»»
  with ThisComponent.CurrentSelection 
   for i=0 to .Count — 1
      if i>0 then
      TextCopy = TextCopy + chr(13)+»&»
      end if
      TextCopy = TextCopy + .getByIndex(i).String
   next
  end with
end Function

sub TextPaste(s as string) As string
dim i as long, j as long
   j = 0   
   with ThisComponent.CurrentSelection 
   s = s+» «
   s1=»»
   for i=1 to len(s)-1
    if mid(s,i,1)<>chr(13) then
      s1=s1+mid(s,i,1)
    elseIf mid(s,i+1,1)=chr(10) then
      s1=s1+mid(s,i,1)
      i=i+1
    ‘новый фрагмент
    elseIf mid(s,i+1,1)=»&» then
      .getByIndex(j).String=s1
      s1=»»
      j=j+1
      i=i+1
    end if     
   next
     .getByIndex(j).String=s1

      end with

  end su


  • Форум поддержки пользователей LibreOffice, Apache OpenOffice

  • Главная категория

  • Basic

  • Как передать выделенный текст документа в строковую переменную?

title keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Selection object (Word)

vbawd10.chm2421

vbawd10.chm2421

word

Word.Selection

7b574a91-c33e-ecfd-6783-6b7528b2ed8f

05/23/2019

high

Selection object (Word)

Represents the current selection in a window or pane. A selection represents either a selected (or highlighted) area in the document, or it represents the insertion point if nothing in the document is selected. There can be only one Selection object per document window pane, and only one Selection object in the entire application can be active.

[!IMPORTANT]
This method has changed. Using VBA Selection commands like Selection.BoldRun on user selection with Comments no longer applies bold formatting on user-selected text or Selection.TypeTxt command or on user selection with Comments no longer inserts text.

Remarks

Use the Selection property to return the Selection object. If no object qualifier is used with the Selection property, Microsoft Word returns the selection from the active pane of the active document window. The following example copies the current selection from the active document.

The following example deletes the selection from the third document in the Documents collection. The document does not have to be active to access its current selection.

Documents(3).ActiveWindow.Selection.Cut

The following example copies the selection from the first pane of the active document and pastes it into the second pane.

ActiveDocument.ActiveWindow.Panes(1).Selection.Copy 
ActiveDocument.ActiveWindow.Panes(2).Selection.Paste

The Text property is the default property of the Selection object. Use this property to set or return the text in the current selection. The following example assigns the text in the current selection to the variable strTemp, removing the last character if it is a paragraph mark.

Dim strTemp as String 
 
strTemp = Selection.Text 
If Right(strTemp, 1) = vbCr Then _ 
 strTemp = Left(strTemp, Len(strTemp) - 1)

The Selection object has various methods and properties with which you can collapse, expand, or otherwise change the current selection. The following example moves the insertion point to the end of the document and selects the last three lines.

Selection.EndOf Unit:=wdStory, Extend:=wdMove 
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend 
Selection.MoveUp Unit:=wdLine, Count:=2, Extend:=wdExtend

The Selection object has various methods and properties with which you can edit selected text in a document. The following example selects the first sentence in the active document and replaces it with a new paragraph.

Options.ReplaceSelection = True 
ActiveDocument.Sentences(1).Select 
Selection.TypeText "Material below is confidential." 
Selection.TypeParagraph

The following example deletes the last paragraph of the first document in the Documents collection and pastes it at the beginning of the second document.

With Documents(1) 
 .Paragraphs.Last.Range.Select 
 .ActiveWindow.Selection.Cut 
End With 
 
With Documents(2).ActiveWindow.Selection 
 .StartOf Unit:=wdStory, Extend:=wdMove 
 .Paste 
End With

The Selection object has various methods and properties with which you can change the formatting of the current selection. The following example changes the font of the current selection from Times New Roman to Tahoma.

If Selection.Font.Name = "Times New Roman" Then _ 
 Selection.Font.Name = "Tahoma"

Use properties like Flags, Information, and Type to return information about the current selection. Use the following example in a procedure to determine whether there is anything selected in the active document; if there is not, the rest of the procedure is skipped.

If Selection.Type = wdSelectionIP Then 
 MsgBox Prompt:="You have not selected any text! Exiting procedure..." 
 Exit Sub 
End If

Even when a selection is collapsed to an insertion point, it is not necessarily empty. For example, the Text property will still return the character to the right of the insertion point; this character also appears in the Characters collection of the Selection object. However, calling methods like Cut or Copy from a collapsed selection causes an error.

It is possible for the user to select a region in a document that does not represent contiguous text (for example, when using the Alt key with the mouse). Because the behavior of such a selection can be unpredictable, you may want to include a step in your code that checks the Type property of a selection before performing any operations on it (Selection.Type = wdSelectionBlock).

Similarly, selections that include table cells can also lead to unpredictable behavior. The Information property will tell you if a selection is inside a table (Selection.Information(wdWithinTable) = True). The following example determines if a selection is normal (for example, it is not a row or column in a table, it is not a vertical block of text); you could use it to test the current selection before performing any operations on it.

If Selection.Type <> wdSelectionNormal Then 
 MsgBox Prompt:="Not a valid selection! Exiting procedure..." 
 Exit Sub 
End If

Because Range objects share many of the same methods and properties as Selection objects, using Range objects is preferable for manipulating a document when there is not a reason to physically change the current selection. For more information about Selection and Range objects, see Working with the Selection object and Working with Range objects.

Methods

  • BoldRun
  • Calculate
  • ClearCharacterAllFormatting
  • ClearCharacterDirectFormatting
  • ClearCharacterStyle
  • ClearFormatting
  • ClearParagraphAllFormatting
  • ClearParagraphDirectFormatting
  • ClearParagraphStyle
  • Collapse
  • ConvertToTable
  • Copy
  • CopyAsPicture
  • CopyFormat
  • CreateAutoTextEntry
  • CreateTextbox
  • Cut
  • Delete
  • DetectLanguage
  • EndKey
  • EndOf
  • EscapeKey
  • Expand
  • ExportAsFixedFormat
  • ExportAsFixedFormat2
  • Extend
  • GoTo
  • GoToEditableRange
  • GoToNext
  • GoToPrevious
  • HomeKey
  • InRange
  • InsertAfter
  • InsertBefore
  • InsertBreak
  • InsertCaption
  • InsertCells
  • InsertColumns
  • InsertColumnsRight
  • InsertCrossReference
  • InsertDateTime
  • InsertFile
  • InsertFormula
  • InsertNewPage
  • InsertParagraph
  • InsertParagraphAfter
  • InsertParagraphBefore
  • InsertRows
  • InsertRowsAbove
  • InsertRowsBelow
  • InsertStyleSeparator
  • InsertSymbol
  • InsertXML
  • InStory
  • IsEqual
  • ItalicRun
  • LtrPara
  • LtrRun
  • Move
  • MoveDown
  • MoveEnd
  • MoveEndUntil
  • MoveEndWhile
  • MoveLeft
  • MoveRight
  • MoveStart
  • MoveStartUntil
  • MoveStartWhile
  • MoveUntil
  • MoveUp
  • MoveWhile
  • Next
  • NextField
  • NextRevision
  • NextSubdocument
  • Paste
  • PasteAndFormat
  • PasteAppendTable
  • PasteAsNestedTable
  • PasteExcelTable
  • PasteFormat
  • PasteSpecial
  • Previous
  • PreviousField
  • PreviousRevision
  • PreviousSubdocument
  • ReadingModeGrowFont
  • ReadingModeShrinkFont
  • RtlPara
  • RtlRun
  • Select
  • SelectCell
  • SelectColumn
  • SelectCurrentAlignment
  • SelectCurrentColor
  • SelectCurrentFont
  • SelectCurrentIndent
  • SelectCurrentSpacing
  • SelectCurrentTabs
  • SelectRow
  • SetRange
  • Shrink
  • ShrinkDiscontiguousSelection
  • Sort
  • SortAscending
  • SortByHeadings
  • SortDescending
  • SplitTable
  • StartOf
  • ToggleCharacterCode
  • TypeBackspace
  • TypeParagraph
  • TypeText
  • WholeStory

Properties

  • Active
  • Application
  • BookmarkID
  • Bookmarks
  • Borders
  • Cells
  • Characters
  • ChildShapeRange
  • Columns
  • ColumnSelectMode
  • Comments
  • Creator
  • Document
  • Editors
  • End
  • EndnoteOptions
  • Endnotes
  • EnhMetaFileBits
  • ExtendMode
  • Fields
  • Find
  • FitTextWidth
  • Flags
  • Font
  • FootnoteOptions
  • Footnotes
  • FormattedText
  • FormFields
  • Frames
  • HasChildShapeRange
  • HeaderFooter
  • HTMLDivisions
  • Hyperlinks
  • Information
  • InlineShapes
  • IPAtEndOfLine
  • IsEndOfRowMark
  • LanguageDetected
  • LanguageID
  • LanguageIDFarEast
  • LanguageIDOther
  • NoProofing
  • OMaths
  • Orientation
  • PageSetup
  • ParagraphFormat
  • Paragraphs
  • Parent
  • PreviousBookmarkID
  • Range
  • Rows
  • Sections
  • Sentences
  • Shading
  • ShapeRange
  • Start
  • StartIsActive
  • StoryLength
  • StoryType
  • Style
  • Tables
  • Text
  • TopLevelTables
  • Type
  • WordOpenXML
  • Words
  • XML

See also

  • Word Object Model Reference

[!includeSupport and feedback]

Sub Макрос()

    Dim rng As Range
    Dim var

        ‘1. Ищем в основном тексте (т.е. не в колонтитулах и ещё где-нибудь) файла текст.
    With ActiveDocument.Range.Find

            ‘1) Искомый текст.
        .Text = «Привет Билл»

                ‘2) Если не найдено, то выходим из макроса.
        If .Execute = False Then
            Exit Sub
        End If

                ‘3) Присваиваем имя «rng» найденному фрагменту.
        Set rng = .Parent.Duplicate

            End With

        ‘2. Смещаемся вправо от найденного.
        ‘ По сути устанавливаем точку вставки справа от найденного фрагмента.
        ‘ Точки вставки — это своего рода мигающий курсор.
    rng.Collapse Direction:=wdCollapseEnd

        ‘3. Включаем в «rng» фрагмент от текущей позиции до конца абзаца.
    rng.MoveEnd Unit:=wdParagraph

        ‘4. Убираем с конца знак абзаца.
    rng.MoveEnd Unit:=wdCharacter, Count:=-1

        ‘5. Записываем фрагмент в переменную.
    var = rng.Text

    End Sub

[свернуть]

0 / 0 / 0

Регистрация: 21.12.2018

Сообщений: 20

1

Выделить строку целиком

06.08.2021, 20:54. Показов 2607. Ответов 6


Студворк — интернет-сервис помощи студентам

Добрый вечер, подскажите, возможно ли в word выделить строку целиком и поместить в переменную? Необходимо для сравнения строк файла.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

06.08.2021, 20:54

6

Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

07.08.2021, 07:46

2

demonbond, странный вопрос! Конечно!

Visual Basic
1
2
3
    Text$ = ThisDocument.Range.Text  '::: весь текст документа
    k% = InStr(Text$, Chr(13))           '::: поз. первого перехода на новую строку
    Lin$ = Left$(Text$, k% - 1)          '::: первая строка



0



Punkt5

малоболт

1143 / 442 / 193

Регистрация: 30.01.2020

Сообщений: 1,095

07.08.2021, 08:37

3

Лучший ответ Сообщение было отмечено demonbond как решение

Решение

demonbond, Word оперирует не со строками, а с ПАРАГРАФАМИ, которые он сам разбивает на строки в соответсвии с установленными границами, отступами, табуляциями, обтеканием картинок и прочих вставленных элементов и т.п. Так что говорить о строках в нём бессмысленно — имеет смысл говорить о параграфах. Для перебора параграфов можно использовать Paragraphs(i), перебирая счётчик от 1 до Paragraphs.Count. Например:

Visual Basic
1
2
3
4
5
6
With ActiveDocument.Paragraphs
 For ii = 1 To .Count Step 1
   xStr = .Item(ii).Range.Text 'получили ii-ый параграф в переменную xStr
      'дальше делаете с xStr то что нужно
 Next
End With



0



shanemac51

Модератор

Эксперт MS Access

11341 / 4660 / 748

Регистрация: 07.08.2010

Сообщений: 13,497

Записей в блоге: 4

07.08.2021, 10:22

4

Цитата
Сообщение от demonbond
Посмотреть сообщение

word выделить строку целиком и поместить в переменную? Необходимо для сравнения строк файла.

можно, только подстрока параграфа не постоянная величина — зависит от множества причин
на рисунке выделена 3-я подстрока 1-го параграфа

основано на:

Используйте свойство Lines, чтобы вернуть коллекцию строк для указанного прямоугольника. В следующем примере можно получить доступ к строкам первого прямоугольника на первой странице активного документа.

Visual Basic
1
2
Dim objLines As Lines 
Set objLines = ActiveDocument.ActiveWindow.Panes(1).Pages(1).Rectangles(1).Lines

Используйте свойство RectangleType указанного объекта прямоугольника, чтобы определить, имеет ли объект Прямоугольник тип wdTextRectangle.

Цитата
Сообщение от Punkt5
Посмотреть сообщение

с ПАРАГРАФАМИ, которые он сам разбивает на строки в соответствии с установленными границами, отступами, табуляциями, обтеканием картинок и прочих вставленных элементов и т.п. Так что говорить о строках в нём бессмысленно — имеет смысл говорить о параграфах.

параграф же величина постоянная — при любом сочетании шрифтов и прочего состоит из одного и того же количества символов

Миниатюры

Выделить строку целиком
 



0



0 / 0 / 0

Регистрация: 21.12.2018

Сообщений: 20

08.08.2021, 21:13

 [ТС]

5

Что-то у меня ругается на это неправильное количество аргументов

Цитата
Сообщение от shanemac51
Посмотреть сообщение

Dim objLines As Lines
Set objLines = ActiveDocument.ActiveWindow.Panes(1).Pages(1).Rect angles(1).Lines

А можно код, который вы на скриншоте показываете ?



0



0 / 0 / 0

Регистрация: 21.12.2018

Сообщений: 20

09.08.2021, 11:10

 [ТС]

6

Это не очень похоже на тот текст из скриншота, для выделения подстроки параграфа.

Добавлено через 10 минут
И возможно ли из подстроки параграфа сделать отдельный праграф?



0



shanemac51

Модератор

Эксперт MS Access

11341 / 4660 / 748

Регистрация: 07.08.2010

Сообщений: 13,497

Записей в блоге: 4

09.08.2021, 12:13

7

Цитата
Сообщение от demonbond
Посмотреть сообщение

И возможно ли из подстроки параграфа сделать отдельный параграф?

не знаю — не пробовала

скрин показывает, что выделена 3-я подстрока 1-го параграфа
выделенный текст показан в msgbox на фоне выделения

Добавлено через 22 минуты
demonbond,
вот нужный макрос

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub mm210809_lines()
Dim orest As Rectangle
Dim oline As line
Dim opane As Pane
Dim opage As Page
Dim odoc As Document
Set odoc = Word.ActiveDocument
''можно добавить перебор панелей, страниц, линий
''
For Each orest In odoc.ActiveWindow.Panes(1).Pages(1).Rectangles
If orest.RectangleType = wdTextRectangle Then
If orest.Lines.Count > 2 Then
orest.Lines(3).Range.Select
MsgBox orest.Lines(3).Range.Text
End If
End If
 
 
Next orest
End Sub



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

09.08.2021, 12:13

Помогаю со студенческими работами здесь

Прочитать из файла строку целиком
char s1,s2,s3,s4; //Переменная будет считывать строку
ifstream in (&quot;D:\1.txt&quot;); //Открываем…

Как в строку вставить текст целиком?
Подскажите плиз, как сделать чтобы слово ‘test’ из константы l2 вставлялось в строку s ? Сейчас…

Перенести целиком выделенную строку из первой таблицы во вторую
Помогите пожалуйста решить задачу:
Есть 2 таблицы с одинаковыми столбцами. Нужно перенести целиком…

Прочитать строку файла, не загружая его целиком в память
Есть текстовый файл file.txt 1 гб. Как из него прочесть 123-ю строку не загружая в память(массив,…

Есть ли функция, читающая файл целиком и записывающая его в одну строку?
Подскажите есть ли функция читающая файл целиком и записывающая его в одну стрингу и чтобы все…

Как проверить строку на то, что она не пустая и целиком не состоит из пробелов?
Как осуществить проверку строки на то, что она не является пустой строкой и строкой, состоящей…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

7

Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим методы объекта Word Selection, которые позволяют очистить материал от форматирования, преобразовать в таблицу, а также производить копирование, вставку и так далее. Помним, что данный класс отвечает за выделение текста в Word.

Содержание

  1. Методы класса Word.Selection – выделение текста в Word
  2. Примера на языке VBScript – выделение текста в редакторе Word
  3. Примера на языке JScript – выделение текста в редакторе Word

Методы класса Word.Selection – выделение текста в Word

Я приведу по два примера программного кода на языках JScript, VBScript и VBA. Хотя по сути, код под макрос (VBA) и сценарий VBScript особо не отличается. Для тех, кто забыл: для создания макроса в документе Microsoft Office нужно вызвать редактор Visual Basic for Application (комбинация клавиш Alt + F11), далее, добавить в проект новый модуль (макрос).

Методы с префиксом Clear… позволяют очистить выделенный материал от форматирования (абзацы, стили, символы и так далее):

ClearCharacterAllFormatting() — Все форматирование.

ClearCharacterDirectFormatting() — Форматирование знаков.

ClearCharacterStyle() — Форматирование знаков, применяемых через стили.

ClearFormatting() – Все форматирования (параграфы, стили и так далее).

ClearParagraphAllFormatting() — Форматирование абзаца.

ClearParagraphDirectFormatting() — Форматирование абзацев, применяемых вручную.

ClearParagraphStyle() — Форматирование абзацев, применяемых через стили.

Collapse(Direction) – Позволяет убрать выделение текста Word и переместить указатель в начало или конец. VBA Selection. Если параметры отсутствуют, то просто убирается выделение. Параметр Direction содержит значение константы WdCollapseDirection:

  • wdCollapseEnd — 0 – Указатель вконец
  • wdCollapseStart — 1 – Указатель вначале

ConvertToTable(Separator, NumRows, NumColumns, InitialColumnWidth, Format, ApplyBorders, ApplyShading, ApplyFont, ApplyColor, ApplyHeadingRows, ApplyLastRow, ApplyFirstColumn, ApplyLastColumn, AutoFit, AutoFitBehavior, DefaultTableBehavior) – Довольно мощный метод, который позволяет преобразовать выделенный Word текст в таблицу.

Separator — Символ-разделитель, может быть знаком или значением константы WdTableFieldSeparator:

  • wdSeparateByParagraphs — 0 — абзаца.
  • wdSeparateByTabs — 1 — табуляции.
  • wdSeparateByCommas — 2 — запятая.
  • wdSeparateByDefaultListSeparator — 3 — разделитель списка по умолчанию.

NumRows— Количество строк.

NumColumns— Количество столбиков.

InitialColumnWidth— Начальная ширина каждого столбца, в пунктах.

Format– Определяет формат таблицы и содержит значение константы WdTableFormat.

ApplyBorders— TRUE — применять границы.

ApplyShading— TRUE — применить затенение.

ApplyFont— TRUE применять свойства шрифтов.

ApplyColor— TRUE применять цветовые свойства.

ApplyHeadingRows— TRUE — применить свойства заголовок-строка.

ApplyLastRow— TRUE — применить свойства последней строке.

ApplyFirstColumn— TRUE — применить свойства первого столбцов.

ApplyLastColumn— TRUE — применить свойства последнего столбца.

AutoFit— TRUE — уменьшить ширину столбцов таблицы как можно больше.

AutoFitBehavior — Устанавливает правила авто-подбора (если DefaultTableBehavior содержит значение wdWord8TableBehavior, то этот аргумент игнорируется, VBA Selection), содержит значения константы WdAutoFitBehavior:

  • wdAutoFitContent — 1 — автоматически размер
  • wdAutoFitFixed — 0 — фиксированный размер
  • wdAutoFitWindow — 2 — автоматический размер по ширине активного окна

DefaultTableBehavior— Значение, указывающее, следует ли автоматически изменять размер ячеек таблицы по содержимому. Selection VBA. Содержит значение константы WdDefaultTableBehavior:

  • wdWord8TableBehavior — 0 — отключает Авто-подбор (по умолчанию)
  • wdWord9TableBehavior — 1 — включить Авто-подбор

Выделение блока текста в Word, VBA Selection

Хорошо, с теоретической частью мы закончили, теперь можно приступить к программированию.

Примера на языке VBScript – выделение текста в редакторе Word

' ----------------------------------------------------------------------------
' Объект Selection - выделение текста в Word
' Преобразование в таблицу - язык VBScript
' VBA_Selection_Table.vbs
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord, oDoc, oSel, i
 
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents
oDoc.Add()
Set oSel = oWord.Selection
oWord.Visible = True
 
For i = 0 To 10
With oSel
.InsertBreak 6
.InsertBefore "один, два, три, четыре, пять, шесть, selection word vba"
.EndOf
.InsertBreak 6
End With
Next
 
oWord.Documents(1).Select()
oSel.ConvertToTable ",", 31,,,18

В данном примере в цикле For (смотрите статью «Урок 6 по VBScript: Циклы for…next и for each…next«), который выполняется шесть раз, происходит вставка перевода на новую строку, вставка текстовой фразы и перемещаем курсов к конец строки. С помощью оператора with мы можем экономить размер программного кода – не нужно лишний раз писать имя класса. Вконце происходит выделение текста Word и преобразование его в таблицу.

Примера на языке JScript – выделение текста в редакторе Word

// ----------------------------------------------------------------------------
// Объект Selection - выделение текста в Word
// Преобразование в таблицу - язык JScript
// VBA_Selection_Table.js
// ----------------------------------------------------------------------------
 
var oWord1, oDoc1, oSel1, i;
 
oWord1 = WScript.CreateObject("Word.Application");
oDoc1 = oWord1.Documents;
oDoc1.Add();
oSel1 = oWord1.Selection;
oWord1.Visible = true;
 
for (i=0; i<=10;i++){
with(oSel1){
InsertBreak(6);
InsertBefore("один, два, три, четыре, пять, шесть, selection word vba");
EndOf();
InsertBreak(6);
}
}
 
oWord1.Documents(1).Select();
oSel1.ConvertToTable(",", 31,"","",18);

Логика работы данного программного кода аналогичны предыдущему примеру, тут мы уже использовали цикл for языка JS, читайте в статье «Урок 9 по JScript — оператор цикла for«. Тут тоже использовался оператор with, обратите внимание, что имена переменных изменились, а в конце каждой строки кода прописана точка с запятой.

Примера на языке Visual Basic for Application – выделение текста в редакторе Word

'VBA
Dim oWord2 As Object, oDoc2 As Object, oSel2 As Object, i
 
Set oWord2 = CreateObject("Word.Application")
Set oDoc2 = oWord2.Documents
oDoc2.Add
Set oSel2 = oWord2.Selection
oWord2.Visible = True
 
For i = 0 To 10
With oSel2
.InsertBreak 6: .InsertBefore "один, два, три, четыре, пять, шесть, selection word vba"
.EndOf: .InsertBreak 6
End With
Next
 
oWord2.Documents(1).Select
oSel2.ConvertToTable Separator:=",", NumRows:=31, Format:=18

Хорошо, давайте продолжим рассматривать методы класса Selection.

выделение текста в редакторе Word, Selection VBA

EndOf() – Перемещает курсор в конец выделения.

StartOf() – Перемещает курсор в начало выделения.

SetRange(start, end) – Позволяет задать начальное и конечное значение для выделения текста Word.

TypeText() – Выполняет ту же функцию, что и свойство Text – ввод информации.

TypeParagraph() — Метод вставляет параграф.

Copy(), Cut(), Paste(), Delete() – Копирует, вырезает, вставляет и удаляет выделенный текст в Word.

CopyAsPicture() – Копирует выбранный материал как изображение.

И так, теперь рассмотрим программный код с данными методами.

' ----------------------------------------------------------------------------
' Класс Selection - выделение текста в Word
' Копирование и вставка - язык VBScript
' VBA_Selection_Copy_Paste.vbs
' ----------------------------------------------------------------------------
Option Explicit
 
dim oWord3, oDoc3, oSel3, i
 
Set oWord3 = CreateObject("Word.Application")
Set oDoc3 = oWord3.Documents
oDoc3.Add()
Set oSel3 = oWord3.Selection
oWord3.Visible = True
 
' Вводим информацию в документ сто раз
For i=0 to 100
  oSel3.TypeText "Пример ввода данных - selection word vba. "
Next
 
With oSel3
  ' Выделяем, копируем и вставляем
  .SetRange 100, 300
  .Copy
  .MoveDown
  .Paste
 
  ' Выбираем материал и копируем ее как изображение
  .SetRange 100, 300
  .CopyAsPicture
End With

По сути, данный программный код практически аналогичен предыдущим. Тут в цикле происходит вставка данных несколько раз, а далее следуют операции выделения текста в документе Word, его копирование и вставка.

// ----------------------------------------------------------------------------
// Класс Selection - выделение текста в Word
// Копирование и вставка - язык JScript
// VBA_Selection_Copy_Paste.js
// ----------------------------------------------------------------------------
 
var oWord5, oDoc5, oSel5, i;
 
oWord5 = WScript.CreateObject("Word.Application");
oDoc5 = oWord5.Documents;
oDoc5.Add();
oSel5 = oWord5.Selection;
oWord5.Visible = true;
 
// Вводим данные в документ сто раз
for(i=0; i<=100; i++){
  oSel5.TypeText("Пример ввода информации - selection word vba. ");
}
 
with(oSel5){
  // Выделяем, копируем и вставляем
  SetRange(100, 300);
  Copy();
  MoveDown();
  Paste();
 
  // Выделяем и копируем как изображение
  SetRange(100, 300);
  CopyAsPicture();
}

Ну и в заключение, привожу программный код для макроса:

' VBA
Dim oWord6 As Object, oDoc6 As Object, oSel6 As Object, i
 
Set oWord6 = CreateObject("Word.Application")
Set oDoc6 = oWord6.Documents
oDoc6.Add
Set oSel6 = oWord6.Selection
oWord6.Visible = True
 
For i = 0 To 100
  oSel6.TypeText "Пример ввода информации - selection word vba. "
Next
 
With oSel6
  .SetRange 100, 300: .Copy: .MoveDown: .Paste
  .SetRange 100, 300: .CopyAsPicture
End With

Хорошо, на этом можно закончить данную статью. Параллельно, информацию по работе с классом Selection можете рассмотреть еще две публикации, в которых я рассмотрел остальные методы и свойства класса Selection.

I’m trying to use VBA to extract sentences in one Word document and put it into another Word document.
So for example, if we need to find the title of the organization, we follow the algorithm:

Search for «Title»
Do (Take) each character after «Title» and (stop) until «Address»

Martijn Pieters's user avatar

asked Jun 7, 2013 at 23:59

Lisa Qing's user avatar

0

The following works but there may be a more efficient way of doing this:

Sub FindIt()
    Dim blnFound As Boolean
    Dim rng1 As Range
    Dim rng2 As Range
    Dim rngFound As Range
    Dim strTheText As String

    Application.ScreenUpdating = False
    Selection.HomeKey wdStory
    Selection.Find.Text = "Title"
    blnFound = Selection.Find.Execute
    If blnFound Then
        Selection.MoveRight wdWord
        Set rng1 = Selection.Range
        Selection.Find.Text = "Address"
        blnFound = Selection.Find.Execute
        If blnFound Then
            Set rng2 = Selection.Range
            Set rngFound = ActiveDocument.Range(rng1.Start, rng2.Start)
            strTheText = rngFound.Text
            MsgBox strTheText
        End If
    End If
    'move back to beginning
    Selection.HomeKey wdStory
    Application.ScreenUpdating = True
End Sub

You can switch between documents using Activate, preferably using object variables.

Microsoft MVP Jay Freedman kindly revised this for me to work without the Selection object, making it much neater.

Sub RevisedFindIt()
' Purpose: display the text between (but not including)
' the words "Title" and "Address" if they both appear.
    Dim rng1 As Range
    Dim rng2 As Range
    Dim strTheText As String

    Set rng1 = ActiveDocument.Range
    If rng1.Find.Execute(FindText:="Title") Then
        Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End)
        If rng2.Find.Execute(FindText:="Address") Then
            strTheText = ActiveDocument.Range(rng1.End, rng2.Start).Text
            MsgBox strTheText
        End If
    End If
End Sub

The only remaining requirement is to get this text into the other document. Something like:

Documents(2).Range.Text = strTheText

answered Jun 8, 2013 at 0:20

Andy G's user avatar

Andy GAndy G

19.1k5 gold badges49 silver badges69 bronze badges

2

This code will write to external file:

Sub RevisedFindIt_savetofile2 () 
' Purpose: display the text between (but not including)
' the words "Title" and "Address" if they both appear.
'This file will search current document only, the data in open word document.
Dim rng1 As Range
Dim rng2 As Range
Dim strTheText As String
Dim DestFileNum As Long
Dim sDestFile As String

sDestFile = "C:test-folderf12.txt" 'Location of external file
DestFileNum = FreeFile()
'A valid file number in the range 1 to 511,
'inclusive. Use the FreeFile function to obtain the next available file number.

Open sDestFile For Output As DestFileNum 'This opens new file with name DestFileNum
Set rng1 = ActiveDocument.Range
If rng1.Find.Execute(FindText:="Title") Then
    Set rng2 = ActiveDocument.Range(rng1.End, ActiveDocument.Range.End)
    If rng2.Find.Execute(FindText:="Address") Then
        strTheText = ActiveDocument.Range(rng1.End, rng2.Start).Text
        MsgBox strTheText 'writes string to a message box
        Print #DestFileNum, strTheText 'Print # will write to external file with the text strTheText
    End If
End If
Close #DestFileNum 'Close the destination file
End Sub

answered May 10, 2016 at 13:20

equalizer's user avatar

equalizerequalizer

1442 silver badges10 bronze badges

Both Excel and Word have a Range object. Because you are in Excel VBA but are trying to reference the Word Range object you need to qualify the variable declaration so that Excel knows you are using a Word Range object.

Dim rng1 As Word.Range
Dim rng2 As Word.Range

Credit to ChipsLetten for spotting this

answered Jul 30, 2015 at 12:28

Swifty's user avatar

You could (preferably) use the name of the other document, rather than the index (2):

Documents("OtherName").Range.Text = strTheText

However, this will change the text for the entire document, so you need to navigate to where you wish to insert the text.

It is far better, if possible, that there are pre-existing Bookmarks in the document (or template) that you can refer to:

Documents("OtherName").Bookmarks("bkSome").Range.Text = strTheText

Good luck.

answered Jun 8, 2013 at 21:00

Andy G's user avatar

Andy GAndy G

19.1k5 gold badges49 silver badges69 bronze badges

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщений [ 5 ]

1 18.02.2010 21:38:46

  • Денис
  • майор
  • Неактивен
  • Зарегистрирован: 10.01.2010
  • Сообщений: 63

Тема: Как записать в переменную range слово под курсивом

Здравствуйте!
Задача:
1. Ищется слово/часть слова по определенному признаку. (например, форматирование курсив-полужирный)
2. Нужно записать в переменную типа range слово на которое попал курсор.
Делаю так:

With Selection.Find
    .Font.Bold = True
    .Font.Italic = True
    .Text = ""
    .Execute

Скажем, нашлось: Красивое чучело
что делать далее:
   

If .Found Then
        Set rngWord = Selection.Words.First  - возвращает меня к началу текстового куска - "Красивое"
    End If
End With

В общем заклинило. Заранее спасибо.

Модератор:
Пользуйтесь тегом [сode][/сode] для оформления кода

Отредактировано Денис (18.02.2010 21:42:17)

2 Ответ от viter.alex 19.02.2010 07:49:10

  • Как записать в переменную range слово под курсивом
  • viter.alex
  • Модератор
  • Неактивен
  • Откуда: Харьков, Украина
  • Зарегистрирован: 21.12.2009
  • Сообщений: 884
  • Поблагодарили: 140

Re: Как записать в переменную range слово под курсивом

Значит, в слове «красивое», тоже есть символы, оформленные таким же образом. Перед присваиванием поставьте строку:

    If .Found Then
        MsgBox(Selection.Text)
        Set rngWord = Selection.Words.First  - возвращает меня к началу текстового куска - "Красивое"
    End If

чтобы посмотреть, какое выражение нашлось.
В остальном всё правильно.

Лучше день потерять — потом за пять минут долететь!

3 Ответ от Денис 19.02.2010 12:42:55

  • Денис
  • майор
  • Неактивен
  • Зарегистрирован: 10.01.2010
  • Сообщений: 63

Re: Как записать в переменную range слово под курсивом

viter.alex пишет:

Значит, в слове «красивое»

Прошу прощения, неточно выразил мысль: мне как раз не нужно переходить на слово «красивое», мне нужно запомнить слово «чучело». «Чучело» было найдено поиском, вернее часть его, выделенная курсивом и полужирным, а мне нужно занести в переменную это слово целиком. Я рассуждал так: объект Selection начинается там, где начинается выделение, — но в моем случае он начинается в начале предложения…

4 Ответ от viter.alex 19.02.2010 13:06:30

  • Как записать в переменную range слово под курсивом
  • viter.alex
  • Модератор
  • Неактивен
  • Откуда: Харьков, Украина
  • Зарегистрирован: 21.12.2009
  • Сообщений: 884
  • Поблагодарили: 140

Re: Как записать в переменную range слово под курсивом

Денис пишет:

но в моем случае он начинается в начале предложения…

Вот об этом я и говорю. Почему он начинается в начале предложения? Нужно разобраться.
Создайте новый файл, введите в него два слова Красивое чучело и запустите макрос. Должен отработать правильно. Если не получится, то приложите файл, в котором не получается.

Лучше день потерять — потом за пять минут долететь!

5 Ответ от Денис 20.02.2010 10:34:37

  • Денис
  • майор
  • Неактивен
  • Зарегистрирован: 10.01.2010
  • Сообщений: 63

Re: Как записать в переменную range слово под курсивом

viter.alex пишет:

Вот об этом я и говорю. Почему он начинается в начале предложения? Нужно разобраться.

Мистика! Сегодня все корректно работает на том же материале. Видимо, ворд нужно периодически перезапускать после работы VBA. Однозначно где-то накапливаются ошибки. Спасибо.

Сообщений [ 5 ]

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Похожие темы

  • Как заменить каждое n-ное слово на другое слово?
  • Перекрёстная ссылка: как записать её строчными буквами?
  • Поиск слов, выделенных курсивом
  • Выделение курсивом определенных фрагментов
  • Макрос или автозамена, выделяющая даты курсивом
  • Range.Find VBA
  • Как работает .Range.Find.Execute?
  • Методы модификации диапазона Range в Word

Как записать в переменную range слово под курсивом

Если вы владеете персональным компьютером или же вы счастливый обладатель ноутбука, работаете с документами много, либо время от времени, то, вероятнее всего, вы пользуетесь таким мощным редактором текста, как Microsoft Word. На портале о Microsoft Office Word вы узнаете про: знак одна третья для ворд 2003.
Возможно, у вас новейшая 10 версия, возможно, вы привыкли к троечке и не хотите менять. Но в любом случае 80 % пользователей используют лишь 20 % этой замечательной, колоссальной программы. Наш сайт о Microsoft Office Word даст ответ про: случайно нажала на клавиатуре.

А где познакомиться со всеми нюансами? Где узнать, как еще более оптимизировать работу? Приглашаем вас на форум сайта Ворд Эксперт, посвященный   приложению Word целиком. На портале о Microsoft Office Word вы узнаете про: как текст вставить в pdf.
Вы можете зарегистрироваться на нашем портале и узнать много нового о такой, казалось бы, общеизвестной теме. Наш сайт о Microsoft Office Word даст ответ про: разделение цифр на разряды в microsoft word.

Пользователю форума будет предложена литература по всем интересующим его вопросам, а наиболее часто задаваемые вопросы будут вынесены в отдельный раздел. Наш сайт о Microsoft Office Word даст ответ про: антоним к слову защищать.
Здесь вы научитесь автоматизировать свою работу и форматировать тексты, с помощью макросов.

Возможно, ваша проблема не нова и на нее найдется уже готовое решение, которое описано в соответствующем подразделе. Наш сайт о Microsoft Office Word даст ответ про: как удалить повторяющиеся ошибки.
А если вы не нашли ответа, то можете оставить заявку в другом разделе, зубры «макросостроения» и акулы Ворда обязательно найдут решение вашей проблемы. На портале о Microsoft Office Word вы узнаете про: как слить печать и подпись в ворде.

Понравилась статья? Поделить с друзьями:
  • Vba word if text not found
  • Vba word if exists
  • Vba word if else if
  • Vba word find wrap
  • Vba word find highlight