Здравствуйте. Помогите, пожалуйста, решить такую задачу. Есть файл word с некоторым количеством диаграмм. Связи с источниками разорваны, но если выбрать команду "Редактировать данные" из контекстного меню диаграммы, ексель отображает данные из нее в таблице. Вопрос: как добраться до этих данных с помощью макроса?
Здравствуйте. Помогите, пожалуйста, решить такую задачу. Есть файл word с некоторым количеством диаграмм. Связи с источниками разорваны, но если выбрать команду "Редактировать данные" из контекстного меню диаграммы, ексель отображает данные из нее в таблице. Вопрос: как добраться до этих данных с помощью макроса?DeadMoroz
Manyasha, в принципе, я перебираю вордовские файлы из екселя. [vba]
Код
Set obj = CreateObject("Word.Application") With obj .documents.Open (folderPath & fName) ...
[/vba]
Насчет связанного файла может слегка приврал - сейчас попробовал сделать с нуля диаграмму в екселе, скопировал ее в ворд, ексель удалил. "Изменить данные" в ворде больше не работает. В приложении кусок реального файла, с редактируемой диаграммой.
Manyasha, в принципе, я перебираю вордовские файлы из екселя. [vba]
Код
Set obj = CreateObject("Word.Application") With obj .documents.Open (folderPath & fName) ...
[/vba]
Насчет связанного файла может слегка приврал - сейчас попробовал сделать с нуля диаграмму в екселе, скопировал ее в ворд, ексель удалил. "Изменить данные" в ворде больше не работает. В приложении кусок реального файла, с редактируемой диаграммой.DeadMoroz
Set obj = CreateObject("Word.Application") Set WD = obj.documents.Open (folderPath & fName) With WD ' так можно проверить, является ли объект диаграммой Excel 'If .InlineShapes(1).OLEFormat.ClassType = "Excel.Chart.8" Then
' а так, получить доступ к данным Set MyRange = .InlineShapes(1).Chart.ChartData.Workbook.Worksheets(1).UsedRange
... End With
[/vba]
[vba]
Код
Set obj = CreateObject("Word.Application") Set WD = obj.documents.Open (folderPath & fName) With WD ' так можно проверить, является ли объект диаграммой Excel 'If .InlineShapes(1).OLEFormat.ClassType = "Excel.Chart.8" Then
' а так, получить доступ к данным Set MyRange = .InlineShapes(1).Chart.ChartData.Workbook.Worksheets(1).UsedRange
Set obj = CreateObject("Word.Application") Set WD = obj.documents.Open(folderPath & fName) With WD If .InlineShapes(1).OLEFormat.ClassType = "Excel.Chart.8" Then Set myRange = .InlineShapes(1).Chart.ChartData.Workbook.Worksheets(1).UsedRange Stop End If End With
[/vba]
1. Ругается вот здесь: If .InlineShapes(1).OLEFormat.ClassType = "Excel.Chart.8" Then..., говорит, "Object variable or with block variable is not set" 2. Когда насильно протаскиваю дальше, ругается здесь: Set myRange = .InlineShapes(1).Chart.ChartData.Workbook.Worksheets(1).UsedRange, говорит, "Method Workbook of object ChartData failed"
KSV, сделал такой тест: [vba]
Код
Set obj = CreateObject("Word.Application") Set WD = obj.documents.Open(folderPath & fName) With WD If .InlineShapes(1).OLEFormat.ClassType = "Excel.Chart.8" Then Set myRange = .InlineShapes(1).Chart.ChartData.Workbook.Worksheets(1).UsedRange Stop End If End With
[/vba]
1. Ругается вот здесь: If .InlineShapes(1).OLEFormat.ClassType = "Excel.Chart.8" Then..., говорит, "Object variable or with block variable is not set" 2. Когда насильно протаскиваю дальше, ругается здесь: Set myRange = .InlineShapes(1).Chart.ChartData.Workbook.Worksheets(1).UsedRange, говорит, "Method Workbook of object ChartData failed"DeadMoroz
Сообщение отредактировал Pelena - Воскресенье, 24.05.2015, 18:38
1. Ругается вот здесь: If .InlineShapes(1).OLEFormat.ClassType
Проверил. Действительно объект OLEFormat возвращается только в проекте документа Word, а извне не виден... Ну, в принципе, вам достаточно просто получить объект .InlineShapes(1).Chart Я его без проблем получаю по предоставленному выше коду, открывая ваш файл-пример. (распакуйте оба файла в одну папку и откройте Книга3.xlsm)
1. Ругается вот здесь: If .InlineShapes(1).OLEFormat.ClassType
Проверил. Действительно объект OLEFormat возвращается только в проекте документа Word, а извне не виден... Ну, в принципе, вам достаточно просто получить объект .InlineShapes(1).Chart Я его без проблем получаю по предоставленному выше коду, открывая ваш файл-пример. (распакуйте оба файла в одну папку и откройте Книга3.xlsm)KSV
KSV, простите, что-то не получается никак. Распаковал все в одну папку, открыл ексель, жму на кнопку. Система выдает "Неопознанную ошибку" с каким-то многозначным номером. В приведенном выше коде убрал условие. По-прежнему ругается, как в п. 2. Причем, не важно, пытаюсь я зайти через ексель или прямо в ворде.
KSV, простите, что-то не получается никак. Распаковал все в одну папку, открыл ексель, жму на кнопку. Система выдает "Неопознанную ошибку" с каким-то многозначным номером. В приведенном выше коде убрал условие. По-прежнему ругается, как в п. 2. Причем, не важно, пытаюсь я зайти через ексель или прямо в ворде.DeadMoroz
Не видя вашу ошибку, можно строить сколько угодно предположений, но не факт, что "попадешь"... Если хотите, можете написать мне на почту (внизу, в подписи) УИН и пароль для подключения TeamViewer'ом - я подключусь, посмотрю. Или сами посмотрите в дебагере, какой именно объект он не может получить...
Не видя вашу ошибку, можно строить сколько угодно предположений, но не факт, что "попадешь"... Если хотите, можете написать мне на почту (внизу, в подписи) УИН и пароль для подключения TeamViewer'ом - я подключусь, посмотрю. Или сами посмотрите в дебагере, какой именно объект он не может получить...KSV
KSV, сработало, когда я начал обращаться к конкретным ячейкам типа .InlineShapes(1).Chart.ChartData.Workbook.Worksheets(1).Cells(1, 2).Value Спасибо за наводку!
KSV, сработало, когда я начал обращаться к конкретным ячейкам типа .InlineShapes(1).Chart.ChartData.Workbook.Worksheets(1).Cells(1, 2).Value Спасибо за наводку!DeadMoroz