Как передать выделенный текст документа в строковую переменную?
Автор 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.count — 1
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.count — 1
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 sEnd 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 Functionsub 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=s1end 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 likeSelection.BoldRun
on user selection with Comments no longer applies bold formatting on user-selected text orSelection.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 Модератор 34706 / 19227 / 4039 Регистрация: 12.02.2012 Сообщений: 32,183 Записей в блоге: 13 |
||||
07.08.2021, 07:46 |
2 |
|||
demonbond, странный вопрос! Конечно!
0 |
Punkt5 малоболт 1143 / 442 / 193 Регистрация: 30.01.2020 Сообщений: 1,095 |
||||
07.08.2021, 08:37 |
3 |
|||
Сообщение было отмечено demonbond как решение Решениеdemonbond, Word оперирует не со строками, а с ПАРАГРАФАМИ, которые он сам разбивает на строки в соответсвии с установленными границами, отступами, табуляциями, обтеканием картинок и прочих вставленных элементов и т.п. Так что говорить о строках в нём бессмысленно — имеет смысл говорить о параграфах. Для перебора параграфов можно использовать Paragraphs(i), перебирая счётчик от 1 до Paragraphs.Count. Например:
0 |
shanemac51 Модератор 11341 / 4660 / 748 Регистрация: 07.08.2010 Сообщений: 13,497 Записей в блоге: 4 |
||||
07.08.2021, 10:22 |
4 |
|||
word выделить строку целиком и поместить в переменную? Необходимо для сравнения строк файла. можно, только подстрока параграфа не постоянная величина — зависит от множества причин основано на: Используйте свойство Lines, чтобы вернуть коллекцию строк для указанного прямоугольника. В следующем примере можно получить доступ к строкам первого прямоугольника на первой странице активного документа.
Используйте свойство RectangleType указанного объекта прямоугольника, чтобы определить, имеет ли объект Прямоугольник тип wdTextRectangle.
с ПАРАГРАФАМИ, которые он сам разбивает на строки в соответствии с установленными границами, отступами, табуляциями, обтеканием картинок и прочих вставленных элементов и т.п. Так что говорить о строках в нём бессмысленно — имеет смысл говорить о параграфах. параграф же величина постоянная — при любом сочетании шрифтов и прочего состоит из одного и того же количества символов Миниатюры
0 |
0 / 0 / 0 Регистрация: 21.12.2018 Сообщений: 20 |
|
08.08.2021, 21:13 [ТС] |
5 |
Что-то у меня ругается на это неправильное количество аргументов
Dim objLines As Lines А можно код, который вы на скриншоте показываете ?
0 |
0 / 0 / 0 Регистрация: 21.12.2018 Сообщений: 20 |
|
09.08.2021, 11:10 [ТС] |
6 |
Это не очень похоже на тот текст из скриншота, для выделения подстроки параграфа. Добавлено через 10 минут
0 |
shanemac51 Модератор 11341 / 4660 / 748 Регистрация: 07.08.2010 Сообщений: 13,497 Записей в блоге: 4 |
||||
09.08.2021, 12:13 |
7 |
|||
И возможно ли из подстроки параграфа сделать отдельный параграф? не знаю — не пробовала скрин показывает, что выделена 3-я подстрока 1-го параграфа Добавлено через 22 минуты
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
09.08.2021, 12:13 |
Помогаю со студенческими работами здесь Прочитать из файла строку целиком Как в строку вставить текст целиком? Перенести целиком выделенную строку из первой таблицы во вторую Прочитать строку файла, не загружая его целиком в память Есть ли функция, читающая файл целиком и записывающая его в одну строку? Как проверить строку на то, что она не пустая и целиком не состоит из пробелов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 7 |
Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим методы объекта Word Selection, которые позволяют очистить материал от форматирования, преобразовать в таблицу, а также производить копирование, вставку и так далее. Помним, что данный класс отвечает за выделение текста в Word.
Содержание
- Методы класса Word.Selection – выделение текста в Word
- Примера на языке VBScript – выделение текста в редакторе Word
- Примера на языке 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 — включить Авто-подбор
Хорошо, с теоретической частью мы закончили, теперь можно приступить к программированию.
Примера на языке 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.
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»
asked Jun 7, 2013 at 23:59
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 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
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
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 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
- 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
- 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 вы узнаете про: как слить печать и подпись в ворде.