2016-01-28 4 views
0

У меня есть макрос VBA, который порой требует от меня создания нового слайда с новой встроенной электронной таблицей Excel, а затем отредактируйте эту электронную таблицу. Упрощенная версия этого кода:Создание и доступ к OLEObject

Dim sld As Slide 
Dim shp As shape 
Dim pptWorkbook As Object 

Set sld = ActivePresentation.slides.add(ActivePresentation.slides.Count + 1, ppLayoutBlank) 
Set shp = sld.Shapes.AddOLEObject(100, 100, 100, 100, "Excel.Sheet") 
DoEvents 
If shp.Type = msoEmbeddedOLEObject Then 
    'Error thrown here 
    Set pptWorkbook = shp.OLEFormat.Object 
    pptWorkbook.Sheets(1).Cells(1, 1).value = "Stuff" 
End If 

Около половины времени работы этого кода приводит к ошибке:

Method object of object OLEFormat failed

Это происходит при вызове shp.OLEFormat.Object, я считаю, что это из-за «AddOLEObject», не создающего объект excel во времени, чтобы обеспечить доступ к свойству (но это всего лишь гипотеза). Я пробовал различные способы обойти это с помощью функций обработки ошибок и спящего режима, но до сих пор мне не удалось создать новый объект excel и изменить его содержимое в пределах одной и той же функции без возникновения некоторой ошибки.

Итак, мой вопрос: как вы, с VBA, добавили новую встроенную электронную таблицу Excel в документ PowerPoint и отредактировали ее содержимое в пределах одной и той же функции/суб?

Update 1

Я успешно запустить этот код на других машинах, так что этот вопрос может быть экологическим, связанным с моей системой, а не проблема с моей методологией. Это также может быть связано с разрешением, аналогично This Post.

Update 2

Я переустановил Office, перезапущен, запустите PowerPoint в качестве администратора, и добавил логику для учета выпуска, описанный в This post. По-прежнему нет прогресса, интересно, может ли кто-нибудь повторить ошибку, которую я получаю?

+0

Могу ли я спросить, почему вы добавили объект .Object в конце этой строки? – Kathara

+0

Большой вопрос @ Kathara, я должен уточнить, я добавил .Object, чтобы я мог получить доступ к вновь созданному «Excel.Sheet» и редактировать связанные с ним листы, это поведение описано здесь: https://msdn.microsoft.com/ en-us/library/office/aa213932% 28v = office.11% 29.aspx –

+0

Хорошо, интересно. Еще один: вы работаете над окнами, не так ли? – Kathara

ответ

0

Я установил вопрос, сбросив все мои настройки офиса, удаляя все связанные с ним ключи в реестре (As Detailed Here):

HKEY_CURRENT_USER\Software\Microsoft\Office

После дальнейшего расследования выяснилось, причиной я получаю сообщение об ошибке, потому что я установил «OLAP PivotTable Extensions» (link) добавить в excel, по какой-то причине это противоречило методу «AddOLEObject». Поэтому простое удаление ключа реестра для расширения эффективно удаляло расширение из excel и исправляло мою проблему. Тот же эффект наблюдался и при полном удалении расширения.

HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\OlapPivotTableExtensions2016

 Смежные вопросы

  • Нет связанных вопросов^_^