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

изменение текста в объекте SmartArt

11.02.2013, 10:19. Показов 6885. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Столкнулась с такой проблемой, очень нужна любая помощь. Есть презентация в PowerPoint, в ней на слайде есть куча разных объектов, в том числе и SmartArt. В программе вычисляются некие данные и нужно их значение отобразить в SmartArt'е. Не могу найти внятной информации по работе с этим объектом
Во вложениях прилагаю файл,чтобы суть изменений продемонстрировать(для наглядности),но он в Excel. Заранее спасибо!
Вложения
Тип файла: xlsx 1.xlsx (24.2 Кб, 16 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2013, 10:19
Ответы с готовыми решениями:

Изменение данных в объекте массива
Добрый день! Задача такова: есть массив. Необходимо создать функцию с параметрами index и arg1 (где index - индекс массива, а arg1 -...

Замена текста в объекте
Как заменить текст по условию: $(document).ready(function() { var stringA = $(".old").text(); if (stringA ===...

Создание префаба и изменение в его дочернем объекте компонента
При нажатии пользователем кнопки должно создаться определенное количество объектов. Каждый объект представляет из себя блок, на котором...

20
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
11.02.2013, 12:05
Здравствуйте, Esperanza,
Поэкспериментировав немного с объектами SmartArt, пришел к выводу, что самые главные свойства у них - это свойство Layout, с помощью которого задается или уточняется шаблон объекта, и свойство AllNodes, с помощью которого можно получить все узлы объекта SmartArt.

В итоге у меня получился следующий код:

Visual Basic
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
Sub SmartArtAddNodes()
   Dim sli As Slide, shp As Shape, node As SmartArtNode, n As Integer
   For Each sli In Application.ActivePresentation.Slides
      For Each shp In sli.Shapes
         If shp.HasSmartArt Then 'Проверка, что фигура является объектом SmartArt.
' Раскомментируйте строку ниже, если узлы нужно добавить только в SmartArt типа Vertical Box List.
'           If shp.SmartArt.Layout.Name = "Vertical Box List" Then
            n = 0
            For Each node In shp.SmartArt.AllNodes
               If node.Level = 1 Then
                  n = n + 1
                  'Добавляем узел в объект SmartArt.
                  Set node = node.AddNode(msoSmartArtNodeAfter)
                  'Здесь вместо ["Данные" & n] можно подставить ваши данные.
                  node.TextFrame2.TextRange.Text = "Данные" & n
                  'Понижаем узел в ранге до подчиненного предыдущему узлу.
                  node.Demote
               End If
            Next node
' Раскомментируйте строку ниже, если узлы нужно добавить только в SmartArt типа Vertical Box List.
'           End If
         End If
      Next shp
   Next sli
End Sub
С уважением,
Aksima
1
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
12.02.2013, 13:09  [ТС]
Цитата Сообщение от Aksima Посмотреть сообщение
Здравствуйте, Esperanza,
Поэкспериментировав немного с объектами SmartArt, пришел к выводу, что самые главные свойства у них - это свойство Layout, с помощью которого задается или уточняется шаблон объекта, и свойство AllNodes, с помощью которого можно получить все узлы объекта SmartArt.

С уважением,
Aksima
Спасибо за помощь! Но при попытке запустить код мне выдается ошибка на объявление "node As SmartArtNode" : Used-defined type not defined. Может нужно какие-нибудь библиотеки дополнительно подцепить? Или в чем может быть причина?
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
12.02.2013, 13:54
Esperanza, у меня стоит версия Microsoft Office 2010. Если версия офиса - 2007, то простого пути решения данной проблемы не существует. Можно попробовать работать с объектом SmartArt через коллекцию GroupShapes:

Visual Basic
1
2
3
4
5
6
7
8
9
...
Dim shp As Shape, shp_node As Shape
Dim gsh As GroupShapes
...
Set gsh = shp.GroupItems
For each shp_node in gsh
...
Next shp_node
...
Если у меня будет доступ к Офису 2007, то попробую написать полный код для такого случая.

С уважением,
Aksima
1
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
13.02.2013, 11:57  [ТС]
Да, у меня 2007 офис... Спасибо за отзывчивость

Добавлено через 21 час 29 минут

Добавлено через 1 минуту
Может быть еще у кого-нибудь есть идеи?
0
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
15.03.2013, 12:33  [ТС]
Aksima, снова возвращаясь к этому вопросу. Не смогла побороть ту ошибку в 2007 версии, поставила в итоге 2010 версию, но и там на определение Dim sli As Slide, shp As Shape, node As SmartArtNode идет ошибка Used-defined type not defined. Что у меня может быть не так,как думаете?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.03.2013, 13:20
У меня получилось так:
Visual Basic
1
2
3
4
5
6
7
8
9
Sub QWERT()
Dim Q As Object
Set Q = ActivePresentation.Slides.Item(1).Shapes(1)
    With Q
        For i = 2 To .GroupItems.Count
        .GroupItems(i).TextFrame.TextRange.Text = i
        Next
    End With
End Sub
Добавлено через 1 минуту
Пирамидальный список был в работе
1
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
15.03.2013, 13:33  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
У меня получилось так:
Спасибо, но проблема заключается в том, что у меня не распознаются такие типы как,например, Slide...да и даже на такое объявление Dim PPApp As PowerPoint.Application выдается та же ошибка, что тип не определен... Может я что-то в корне не правильное делаю?
ЗЫ Презентацию я открываю через Excel и все макросы пишу в Excel.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.03.2013, 13:43
Если внимательно посмотреть на мой код, то там типы не объявлены

Добавлено через 2 минуты
В моём случае можно заменить на
Visual Basic
1
Dim Q As Shape
Добавлено через 4 минуты
Или вообще без объектов
Visual Basic
1
2
3
4
5
Sub QWERT()
    For i = 2 To ActivePresentation.Slides.Item(1).Shapes(1).GroupItems.Count
        ActivePresentation.Slides.Item(1).Shapes(1).GroupItems(i).TextFrame.TextRange.Text = i * 10
    Next
End Sub
Добавлено через 1 минуту
Visual Basic
1
Item(1).Shapes(1).GroupItems(i)
здесь вставлять свои нужные индексы для обращения к нужному объекту и полю на нём
1
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
15.03.2013, 13:53  [ТС]
Alex77755, про объявление типов я написала, потому, что у меня сложилась такая ситуация после установки офиса 2010 - на все объявления(в моей процедуре), начиная с Dim PPApp As PowerPoint.Application выдается Used-defined type not defined, хотя в 2007 офисе эта часть работала...вот я и пытаюсы выяснить, что не так. Для начала, мне нужно в макросе в Excel открыть презентацию, а у меня сейчас даже это не работает.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.03.2013, 13:57
Ну вот! теперь ещё и ексел всплыл!
А зачем такая сложная пирамида? Если в еселе делаешь, так гораздо проще сделать всё на формах ексела!

Добавлено через 1 минуту
Visual Basic
1
Dim PPApp As PowerPoint.Application
Что бы это работало нужно ссылки установить
0
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
15.03.2013, 14:04  [ТС]
Alex77755, меня не спрашивают,как мне проще. Мне дали презентацию с кучей смартартов(всякие разные стат. данные там) и сказали, хотим,чтобы у нас было какое-нибудь средство, которое позволит нам автоматически по данным в презентации, находящимся в этих самых "ячеках" смартарта посчитать другие данные,и записать их в уже другие пучтые "ячейки" того же смартарта. Я посчитала, что проще будет создать макрос в Excel(тк там еще данные из другой экселевской таблицы замешаны), может я была не права. А поскольку программированием в vba я почти не занимаюсь, то вот у меня и возникли эти проблемы.

Добавлено через 59 секунд
Цитата Сообщение от Alex77755 Посмотреть сообщение
Что бы это работало нужно ссылки установить
Какие,куда? Если можно чуть поподробнее.Заранее благодарю.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.03.2013, 14:08
Так зачем тогда вообще ексел? Делать нужно всё на месте. В поверпоинте! или я не понял задачу? В ту же презентацию можно добавлять что-то? кнопки, например?
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
15.03.2013, 14:46
Доброго времени суток.

Простите, что я бухал и не принимал внимания в обсуждении .

Alex77755 дело говорит, вот как мой код должен выглядеть при вызове из Excel:

Visual Basic
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
27
28
Sub SmartArtAddNodes()
   Dim oPPT As Object, p As Object, sli As Object, shp As Object, node As Object, n As Integer
   Set oPPT = CreateObject("PowerPoint.Application")
   'Здесь вместо "C:\Users\...\Desktop\MyPresentation" пишете реальное местонахождение вашей презентации.
   Set p = oPPT.Presentations("C:\Users\...\Desktop\MyPresentation")
   For Each sli In p.Slides
      For Each shp In sli.Shapes
         If shp.HasSmartArt Then 'Проверка, что фигура является объектом SmartArt.
' Раскомментируйте строку ниже, если узлы нужно добавить только в SmartArt типа Vertical Box List.
'              If shp.SmartArt.Layout.Name = "Vertical Box List" Then
            n = 0
            For Each node In shp.SmartArt.AllNodes
               If node.Level = 1 Then
                  n = n + 1
                  'Добавляем узел в объект SmartArt.
                  Set node = node.AddNode(msoSmartArtNodeAfter)
                  'Здесь вместо ["Данные" & n] можно подставить ваши данные.
                  node.TextFrame2.TextRange.Text = "Данные" & n
                  'Понижаем узел в ранге до подчиненного предыдущему узлу.
                  node.Demote
               End If
            Next node
' Раскомментируйте строку ниже, если узлы нужно добавить только в SmartArt типа Vertical Box List.
'              End If
         End If
      Next shp
   Next sli
End Sub
С уважением,
Aksima
2
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
19.03.2013, 11:43  [ТС]
Aksima, спасибо, что-то начало работать...но на строке
Visual Basic
1
If shp.HasSmartArt Then
появляается ошибка Object doesn't support this property or method. Что у меня опять может быть не так?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
19.03.2013, 12:14
Выложила бы сюда свою презентацию
1. с отмеченными смартартами(откуда брать, куда ложить)
2. из какого файла какие данные брать и куда ложить.
3. и самое главное: уточнить как это всё должно работать?
чтобы у нас было какое-нибудь средство, которое позволит нам автоматически по данным в презентации
Где должно быть это средство? В презентации? В екселфайле? в виде отдельной программы(например на VB6 или на VB.NET? Проще, ИМХО, расположить в презентации - проще доступ. Но возможны все варианты. То, что я показывал(и проверял) было из самой презентации. Если делать доступ из екселовского файла или из VB, то возможно возникнут проблемы с константами. По крайней мере при работе с екселом это часто выплывает.
1
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
25.03.2013, 11:34  [ТС]
В общем вот, одна страница из готовой презентации. На начальном этапе происходит обновление цифр в диаграммах(эти цифры каждую неделю разные и хранятся в специальном excel файле,по идее эти цифры в диаграммах-ссылки на ячейки, но я их просто на обыкновенные числа заменила,чтобы они корректно отображались). Этот момент автоматизирован, после обновления данных в экселе, данные в диаграммах обновляются автоматом. А вот то,что нужно автоматизировать-это расчет данных,которые отображаются в смартарте, кторые как раз таки и вычисляются по новым,загруженным,данным. Например, ячейка "К 2012 году" вычисляется как отношение данных по прошедшей недели к данным за 2012 год, и т.д.
А как должно работать-по сути,это им без разницы, главное,чтобы цифры все эти руками не считать. Я это представляла,что они просто будут запускать батник, который вызовет открытие excel файла с нужным макросом.
Вложения
Тип файла: rar prez.rar (105.0 Кб, 19 просмотров)
0
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
08.04.2013, 08:35  [ТС]
Пыталась что-то где-то поковырять,переделать...но от ошибки не могу избавиться
Visual Basic
1
If p.Slides(i).Shapes(j).HasSmartArt Then
Меня терзает вопрос, почему на этой строке выскакивает ошибка "Object doesn't support this property or method"? Офис 2010.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
09.04.2013, 09:46
Ну первок что приходит в голову:
Если уже реализовано обновление данных из екселя, то почему не сделать все вычисления в екселе?
И брать уже готовые данные?
2010 офиса нет. Сообщение говорит, что обект не поддерживает свойство или метод.
Такое может быть из-за того, что мелкософтовцы почему-то решили переименовать объекты в риббоновком(линейчатом офисе. 2007, 2010, 2012) и поэтому макросы, работающие с объектами, часто не работают.
Но не факт. надо открывать в 2010 и сотреть свойства и методы объекта, вызвавшего ошибку.
1
0 / 0 / 0
Регистрация: 11.02.2013
Сообщений: 11
10.04.2013, 14:03  [ТС]
Ладно,оставим объекты смартарт в покое... Теперь меня интересует такой вопрос-на слайде еще имеются диаграмма. Перебором по всем объектам на слайду нахожу ее.
Теперь мне нужно извлечь из нее числа.
Visual Basic
1
2
3
If PP.Slides(I).Shapes(j).HasChart Then
     'здесь надо сохранить эти числа в переменные
    End If
каким методом получить доступ к данным?

Добавлено через 2 часа 12 минут
Нашла вот такой код на просторах интернета,но он опять-таки не работает(офис 2007)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim oSl As PowerPoint.Slide
Dim oSh As PowerPoint.Shape
Set oSl = ActivePresentation.Slides(1)
Set oSh = oSl.Shapes(1)
With oSh.OLEFormat.Object.WorkSheets(1) 'вот здесь возникает окошко с надписью Run-time error, Automation error
    .Range("A1").Value = .Range("A1").Value + 1
    .Range("A2").Value = .Range("A2").Value - 1
End With
Set oSl = Nothing
Set oSh = Nothing
End Sub
Понять не могу почему, ибо в источнике написано,что этот код как раз под 2007
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2013, 14:03
Помогаю со студенческими работами здесь

Изменение ключа свойства в объекте в зависимости от аргумента функции
Если значение completed - false, необходимо в массиве заменить все свойства completed на false, если тру - на тру. В чем заключается...

Получение текста из поля в объекте
Всем привет! Есть проблема, никак не могу решить: Есть объект канваса Text. У текста есть поле с текстом, куда можно писать что...

Замена текста в объекте Shape.TextFrame.TextRange.Text
Здравствуйте! Помогите с заменой текста в объекте надпись Shape.TextFrame.TextRange.Text Привожу пример кода: For Each sec In...

Excel 2007 - Управление уровнем прозрачности объекта SmartArt
Намедни пытался узнать алгоритм с помощью макрорекордера. Однако он отказался записывать в макрос события. Конкретно. Поверх данных...

Сохранить изменение в объекте главного диалогового окна, после того, как второе модальное окно закрывается
Есть главное диалоговое окно и его класс А, производный от класса CDialog, есть еще одно модальное диалоговое окно (его класс Б, тоже...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru