Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Редактирование внедренного объекта / 14 сообщений из 14, страница 1 из 1
24.01.2012, 14:34
    #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
24.01.2012, 14:35
    #37628882
RED32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование внедренного объекта
Не приложился документ почему-то. Для ясности
...
Рейтинг: 0 / 0
24.01.2012, 18:14
    #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
24.01.2012, 18:31
    #37629564
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование внедренного объекта
Если нужен IntelliSense, то можно установить ссылку на библиотеку "Microsoft Word #.# Object Library" и объявить переменную эксплицитно:


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

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


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

...Object.Object
...
Рейтинг: 0 / 0
25.01.2012, 10:44
    #37630230
Редактирование внедренного объекта
в смысле,
Код: vbnet
1.
Set WDDoc = ActiveWorkbook.Worksheets(1).Shapes(1).OLEFormat.Object.Object
...
Рейтинг: 0 / 0
25.01.2012, 10:49
    #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
25.01.2012, 10:54
    #37630251
RED32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование внедренного объекта
13-й кварталв смысле,
Код: vbnet
1.
Set WDDoc = ActiveWorkbook.Worksheets(1).Shapes(1).OLEFormat.Object.Object


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

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

заработал, потому что OLEObject сначала должен побывать в активном состоянии.
...
Рейтинг: 0 / 0
25.01.2012, 21:22
    #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
25.01.2012, 23:02
    #37631797
RED32
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование внедренного объекта
KL (XL),

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

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


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