Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 11
1

"работа с выделением Selection объекта word.Bookmarks и .shapes через excel"

18.12.2015, 16:03. Показов 3494. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток. Возникла проблема: Суть
имеется 2 макроса оба запускаются из excel
1-ый выбираем файлы word, создаем таблицу Имя Индекс Путь
2-ой заменяет колонтитулы в этих файлах
Проблема:
В каждом из файлов word имеется надпись к которой привязана закладка
Необходимо в данной надписи через Shapes или же через саму закладку Bookmark выполнить обычные преобразования через Selection.Find т.е заменить текст на какой-либо

Сами макросы:
Sub tablefiles() ' задает таблицу из имен выбранных файлов с полями Имя файла Индекс Путь файла
Dim oFD As Object
Dim lf As Long
Dim x, y As String
Dim pos, name As String
Dim count, countItems As Long
With ActiveWorkbook.ActiveSheet
.Cells.Clear
End With
Cells(1, 1) = "Имя файла"
Cells(1, 2) = "Номер учетника"
Cells(1, 3) = "Путь к файлу"
count = 1
Set oFD = Application.FileDialog(msoFileDialogFilePicker)
With oFD
.AllowMultiSelect = True
'.Title = "
'.Filters.Clear '
.Filters.Add "word files", "*.doc;*.docx", 1 '
'.Filters.Add "Text files", "*.txt", 2 '
'.FilterIndex = 2 '
.InitialFileName = "C:\Users\Павел\Desktop\Макросы" 'Указать папку с файлами
.InitialView = msoFileDialogViewDetails '
If oFD.Show = 0 Then Exit Sub '
For lf = 1 To .SelectedItems.count
countItems = .SelectedItems.count
x = .SelectedItems(lf)
pos = InStrRev(x, "")
name = Right(x, Len(x) - pos)
y = name
Cells(1 + count, 3) = x
Cells(1 + count, 1) = y
count = count + 1
Next
End With
End Sub

Первый макрос работает корректно

Sub Openfiles() ' после добавления нового столбца в таблицу задает нижние колонтитулы файлам
With ActiveWorkbook.ActiveSheet
Dim way, kolon As String
Dim x, r1, r2 As range
Dim i, j, z As Long
Dim word As Object
Dim doc As Object
z = 1
Set x = range("C2:C20")
End With
For k = 2 To 50
If Not Cells(k, 3).Text = "" Then
way = Cells(k, 3)
kolon = Cells(k, 2) '.HorizontalAlignment = xlCenter
' расставляем колонтитулы в файле
Set word = CreateObject("Word.Application")
Set doc = word.Documents.Open(way)
With word.Selection
.PageSetup.DifferentFirstPageHeaderFooter = True
End With
word.ActiveWindow.ActivePane.View.SeekView = 5
With word.Selection
.Wholestory
.TypeText Text:="Уч. № "
.TypeText Text:=kolon
.ParagraphFormat.Alignment = 1 ' по центру
End With
word.Browser.Next
word.ActiveWindow.ActivePane.View.SeekView = 0
word.ActiveWindow.ActivePane.View.SeekView = 10
With word.Selection
.Wholestory
.TypeText Text:="Уч. № "
.TypeText Text:=kolon
.ParagraphFormat.Alignment = 1
End With
word.ActiveWindow.ActivePane.View.SeekView = 0
word.Visible = True 'скрытый word
'_________________________Здесь проблема

'For i = 1 To word.ActiveDocument.bookmarks.count
'with word.ActiveDocument.bookmarks(i).Select
Selection.Find.Text = "123"
Selection.Find.Replacement.Text = "3333"
Selection.Find.Execute Replace:=wdReplaceAll
' End With
' Next i
'________________________________________
'doc.Save
'doc.Close
'конец расстановки
Else
Exit For
End If
Next k
'End With
End Sub


Собственно проблема в части кода

For i = 1 To word.ActiveDocument.bookmarks.count
'with word.ActiveDocument.bookmarks(i).Select
Selection.Find.Text = "123"
Selection.Find.Replacement.Text = "3333"
Selection.Find.Execute Replace:=wdReplaceAll
' End With
' Next i
Не работает
пробовал разные варианты:

For i = 1 To word.ActiveDocument.bookmarks.count
'with word.ActiveDocument.bookmarks(i).Select
word.Selection.Find.Text = "123"
word.Selection.Find.Replacement.Text = "3333"
word.Selection.Find.Execute Replace:=wdReplaceAll
' End With
' Next i
Ничего не делает

Помогите разобраться
Приложил 2 файла
Excel с макросами
Word для теста
Вложения
Тип файла: docx one.docx (23.8 Кб, 6 просмотров)
Тип файла: xlsx Макросы.xlsx (7.4 Кб, 7 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2015, 16:03
Ответы с готовыми решениями:

Работа метода Word.Selection.Find при поиске в документе Word
Дорого времени суток! никак не могу разобраться в механизме работы range.find Запускаю: ...

Как ускорить замену текста в Shapes через Microsoft.Office.Interrop.Word
Добрый день! Есть способ замены текста в фигурах с надписями документа Word: private void...

Как работать с объектом selection ячейки таблицы word из приложения Excel в ВБА
Как обращаться к объекту selection ячейки таблицы word из приложения Excel, так как при обычном...

Работа в Word через WBA в Excel
Нужна простенька программа, которая будет открывать документ word вставлять туда данные из excel и...

3
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
18.12.2015, 16:47 2
Если говорить только о закладках, то :

Замена текста в одной закладке

Visual Basic
1
2
3
4
5
With doc.Bookmarks("yyy").Range.Find 'doc.Bookmarks(1)
     .Text = "123"
     .Replacement.Text = "3333"
     .Execute Replace:=2 'wdReplaceAll
End With
Во всех закладках документа

Visual Basic
1
2
3
4
5
6
7
8
Dim objBM As Object
For Each objBM In doc.Bookmarks
    With objBM.Range.Find
         .Text = "123"
         .Replacement.Text = "3333"
         .Execute Replace:=2 'wdReplaceAll
    End With
Next
или

Visual Basic
1
2
3
4
5
Dim objBM As Object
For Each objBM In doc.Bookmarks
    objBM.Range.Find.Execute _
    FindText:="123", ReplaceWith:="3333", Replace:=2 'wdReplaceAll
Next
0
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 11
18.12.2015, 23:10  [ТС] 3
Благодарю, с закладками разобрался, но как все таки быть если имеется обычная надпись, на которую не поставлена закладка?

Добавлено через 11 минут
Разобрался, спасибо, тема закрыта.
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.12.2015, 09:30 4
Давайте не будем эгоистами и подскажем всем, у кого возникла аналогичная задача, что заменить текст в обычных надписях (которые не "скрываются" в колонтитулах и т.п.) можно, например, так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim objShape As Shape
For Each objShape In doc.Shapes
    If objShape.Type = msoTextBox Then
       With objShape.TextFrame.TextRange.Find
            .Text = "123"
            .Replacement.Text = "3333"
            .Execute Replace:=2 'wdReplaceAll
       End With
    End If
Next
Если же в документе нет других об'ектов, кроме надписей и нас не интересует сохранение исходного форматирования, то :

Visual Basic
1
2
3
4
5
6
Dim objShape As Shape
For Each objShape In doc.Shapes
    With objShape.TextFrame.TextRange
         .Text = Replace(.Text, "123", "3333")
    End With
Next
Добавлено через 9 часов 9 минут
P.S. При использовании позднего связывания - As Shape нужно заменить на As Object 'Variant
0
19.12.2015, 09:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2015, 09:30
Помогаю со студенческими работами здесь

Работа с word через excel (передача строки)
Здравствуйте, возникла следующая проблемка, а точнее вопрос: Есть файл excel, который при...

Работа с Word/Excel через Ole/иные способы
Добрый день, товарищи. Да, много читал всего интересного в Интернет по этому вопросу - и тут, и...

Activeqt+word+bookmarks
Необходимо вставить данные из кода программы в закладки в шаблоне документа, не могу информацию как...

Word 2016 Bookmarks ошибка com
И снова здравствуйте. Есть файл .docx, в нем есть текстовые поля, они же Bookmarks. Нужно писать...

Word - Как вывести закладки (Bookmarks) в ComboBox
Подскажите как сделать возможным вывод всех Закладок (Bookmarks) в ComboBox.

Вставка закладок (Bookmarks) с текстом в закладке| MS Word
Здравствуйте Коллеги! Прошу помощи в следующем вопросе. Написал код вставки закладок, закладки...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru