1

Я пытаюсь проверить возможности автоматизации MS PowerPoint с помощью VBA.

По моему требованию, любая ячейка таблицы ДОЛЖНА быть помечена контролируемым идентификатором и возвращена обратно с использованием этого идентификатора. Однако я не смог придумать подходящий способ. Есть ли у вас какие-либо идеи?

  Dim slide As slide
  Dim t As Table
  Dim r As Integer
  Dim c As Integer
  Dim s As Shape
  Set slide = Application.ActivePresentation.Slides(1)
  Set t = slide.Shapes(1).Table
  Set s = t.Cell(1, 1).Shape
  ' t.Tags and s.Tags aren't accessible...
  ' Is there any way to put ID into the Cell or Shape of Cell?
  ... 

2 ответа2

0

Большое спасибо, Стив, и извините за мой медленный ответ. Я уже попробовал тот же подход, который вы рекомендовали. Однако, к сожалению, он не подходит для таблиц переменных. То есть информация тега в таблице верхнего уровня будет недействительной, когда конечный пользователь вставит / удалит / переупорядочит строки / столбцы, потому что эта информация существенно зависит от индексов строки / столбца во время разработки. Согласно требованию, нам нужен подход, который имеет рациональную избыточность по сравнению с модификацией таблицы. Я полагаю, что самый простой способ - это пометить ячейки каждой таблицы, но я не смог найти хороший способ реализации. У вас есть хорошие идеи? Я также буду публиковать на StackOverflow, чем вы за ваш совет!

0

Вы, вероятно, должны опубликовать этот вопрос в StackOverflow, а не здесь; SuperUser посвящен вопросам "Как использовать эту программу", StackOverflow - запросам "Как программировать это".

Один из способов, которым вы можете подойти к этому, - сохранить данные тега для таблицы в массиве, а затем преобразовать массив в строку, например, так:

Row1Cell1Value | Row1Cell2Value | ...| Row1CellNValue ~ Row2Cell1Value | Row2Cell2Value | ...| Row2CellNValue и так далее, где | является разделителем между значениями тегов для каждой ячейки в массиве, а ~ является разделителем между строками.

Добавьте эту строку в качестве тега на СЛАЙД, где находится таблица, например:

ActivePresentation.Slides(1).Tags.Add TableName, BigOldStringOfTags

Когда вам нужно получить теги таблицы, вы должны получить эту большую строку, РАЗДЕЛИТЬ ее на ~, чтобы создать массив строк, каждый элемент которых представляет строку тегов для соответствующей строки таблицы. Затем вы можете разделить этот элемент, чтобы получить отдельные теги для каждой ячейки в строке.

В зависимости от ваших потребностей, это может быть концептуально проще сделать этот двойной трюк, чтобы перестроить исходный массив тегов, чтобы каждый (x, y) элемент массива соответствовал одной и той же (строка, столбец) ячейке таблицы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .