我正在尝试使用 VBA 测试 MS PowerPoint 的自动化功能。
对于我的要求,任何表格单元格都必须用受控 ID 标记,并使用此 ID 引用回来。但是,我找不到合适的方法。您有什么想法吗?
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?
...
答案1
您可能应该在 StackOverflow 而不是这里发布这个问题;SuperUser 致力于解决“如何使用这个程序”的问题,而 StackOverflow 则致力于解决“我如何编写这个程序”的查询。
解决此问题的一种方法是将表的标签数据存储在数组中,然后将该数组转换为字符串,如下所示:
Row1Cell1Value|Row1Cell2Value|...|Row1CellNValue~Row2Cell1Value|Row2Cell2Value|...|Row2CellNValue 等等,其中 | 是数组中每个单元格的标签值之间的分隔符,~ 是行之间的分隔符。
将此字符串作为标签添加到表格所在的幻灯片上,例如:
ActivePresentation.Slides(1).Tags.Add TableName, BigOldStringOfTags
当您需要检索表格的标签时,您将检索这个大字符串,将其拆分为 ~ 以创建一个字符串数组,其中每个元素代表表格相应行的一行标签。然后您可以拆分那元素来获取行中每个单元格的单独标签。
根据您的需要,从概念上讲,使用此 doublesplit 技巧重建原始标签数组可能会更容易,这样数组的每个 (x,y) 元素都对应于表格的相同 (row,col) 单元格。
答案2
非常感谢,Steve,抱歉我回复得这么慢。我已经尝试了你推荐的相同方法。但不幸的是,它不适合变量表。也就是说,当最终用户插入/删除/重新排序行/列时,顶级表上的标记信息将失效,因为这些信息在设计时本质上取决于行/列的索引。根据要求,我们需要一种对表的修改具有合理冗余的方法。我想最简单的方法是为每个表单元格添加标记,但我找不到一个很好的实现方法。你有什么好主意吗?我也会在 StackOverflow 上发帖,谢谢你的建议!