powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Редактирование внедренного объекта
14 сообщений из 14, страница 1 из 1
Редактирование внедренного объекта
    #37628878
RED32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
С VBA тесно не работал. Благодаря поиску по форуму много интересного почерпнул, но решения проблемы найти не удалось. В хелпе по VBA по OLE объектам тоже оч мало. Инета (кроме sql.ru) и соответствующих книг под рукой нет

Имеется книга Excel и внедренный в нее документ Word
Нужно во внедренном документе программно макросом Excel заменить текст на другой

Пока только через запись макроса дополз до выделения объекта для редактирования
Код: sql
1.
2.
Sheets("Лист1").Shapes("Объект 1").Select
    Selection.Verb Verb:=xlPrimary


А как дальше перейти от ексельного объекта к вордовскому, чтобы там произвести необходимые действия и затем вернуться обратно? То бишь чтобы внедренный объект стал активным и я мог использовать Selection.Find.Replacement .....
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37628882
RED32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не приложился документ почему-то. Для ясности
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37629525
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub test()
    Dim WDDoc As Object
    Set WDDoc = ThisWorkbook.Sheets("Лист1").OLEObjects("Object 1").Object
    With WDDoc.Content
        .Find.ClearFormatting
        .Find.Replacement.ClearFormatting
        With .Find
            .Text = "Текст"
            .Replacement.Text = "Замена"
        End With
        .Find.Execute Replace:=2
    End With
    Set WDDoc = Nothing
End Sub
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37629564
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужен IntelliSense, то можно установить ссылку на библиотеку "Microsoft Word #.# Object Library" и объявить переменную эксплицитно:


Код: vbnet
1.
Dim WDDoc As Word.Document
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37630168
RED32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL),

общая идея ясна. Библиотеку подключил вордовую - подсказки появились.
И все равно не заводится - у OleObjects нет Object
матерится здесь
Код: sql
1.
Set WDDoc = ThisWorkbook.Sheets("Лист1").OLEObjects("Объект 1").Object


error '1004'; Невозможно получиться свойство Object класса OLEObject
Уровень безопасности Низкий. Для записи все открыто вроде как. Word 2003 - может в настройках или версии чтот не так? или дело только в руках )
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37630221
RED32,

...Object.Object
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37630230
в смысле,
Код: vbnet
1.
Set WDDoc = ActiveWorkbook.Worksheets(1).Shapes(1).OLEFormat.Object.Object
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37630240
RED32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталRED32,

...Object.Object
Не понятно. Понятно то, что свойство Object есть у OLEObject, но не у OLEObjects, хотя OLEObjects("Object 1") должна бы возвращать именно его.
Конструкции
Set WDDoc = ThisWorkbook.Sheets("Лист1").OLEObjects("Object 1").Object
Set WDDoc = ThisWorkbook.Sheets("Лист1").OLEObject("Object 1").Object
Set WDDoc = ThisWorkbook.Sheets("Лист1").OLEObjects("Object 1").Object.Object
и прочие выдают одно и тоже (( где я туплю?
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37630251
RED32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й кварталв смысле,
Код: vbnet
1.
Set WDDoc = ActiveWorkbook.Worksheets(1).Shapes(1).OLEFormat.Object.Object


Ясн. Но пока ошибка та же. Ща попробую переделать с нуля, может с индексами или именами объекта и листов чтот не то ...
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37630258
RED32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я чтот не понял из-за чего, но первоначальный код заработал. Видимо гдет с именами косячнул ...

Спасибо всем за помощь!
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37630282
RED32,

заработал, потому что OLEObject сначала должен побывать в активном состоянии.
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37631708
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, похоже без мигания не обойдешься.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Sub test()
    Dim OLEObj As OLEObject
    Dim ws As Worksheet
    Dim WDDoc As Object
    Application.ScreenUpdating = False

    Set ws = ThisWorkbook.Sheets("Лист1")
    Set OLEObj = ws.OLEObjects("Object 1")
    OLEObj.Activate 
    Set WDDoc = OLEObj.Object
    With WDDoc.Content
        .Find.ClearFormatting
        .Find.Replacement.ClearFormatting
        With .Find
            .Text = "Текст"
            .Replacement.Text = "Замена"
        End With
        .Find.Execute Replace:=2
    End With
    ws.Cells(1,1).Activate

    Application.ScreenUpdating = True
    Set OLEObj = Nothing
    Set ws = Nothing
    Set WDDoc = Nothing
End Sub


Интересно, что с внедренным Excel объектом из-под PowerPoint у меня таких проблем не возникало :)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub Test()
    Dim XLObj As Excel.Workbook
    Set XLObj = ActivePresentation.Slides(1).Shapes("Table").OLEFormat.Object
    Dim i As Long
    With XLObj.Worksheets(1)
        For i = 1 To 10
            .Cells(i,1) = i
        Next i
    End With
    Set XLObj = Nothing
End Sub
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37631797
RED32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL),

обошлось без мигания. Просто у тебя активируется Оле каждый раз, а я один раз активирую при открытии документа и сразу сбрасываю. Потом переключение на Оле без активации производится и поиск/замена без мигания работают оч хорошо. Получилось то, что надо. ScreenUpdating кстати тоже не нужен получается, если не делать Active, то происходит все в фоне и не заметно.
И еще раз спасибо
...
Рейтинг: 0 / 0
Редактирование внедренного объекта
    #37631856
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RED32KL (XL),

обошлось без мигания. Просто у тебя активируется Оле каждый раз, а я один раз активирую при открытии документа и сразу сбрасываю. Потом переключение на Оле без активации производится и поиск/замена без мигания работают оч хорошо. Получилось то, что надо. ScreenUpdating кстати тоже не нужен получается, если не делать Active, то происходит все в фоне и не заметно.
И еще раз спасибо
Не за что. Но все равно хоть одноразовая активация при открытии книги и лучше, чем постоянная активация, все же это как-то малоэлегантно. Надо будет поискать еще способы на досуге.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Редактирование внедренного объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]