PowerPoint VBA 事件 SelectionChange 未由 SVG(图形)选择触发

问题描述 投票:0回答:1

我在 PowerPoint VBA 中遇到一个特殊问题,当选择或取消选择 SVG 文件(视为图形元素)时,似乎不会触发

SelectionChange
事件。此行为与事件对其他类型对象(例如形状或文本框)的响应方式不一致。

问题描述:

在我的 PowerPoint VBA 项目中,我依靠 App_WindowSelectionChange 事件来检测用户何时选择幻灯片上的不同对象。这对于我的加载项的功能至关重要,因为它根据当前选择更新功能区 UI。这已经是解决方法,因为我第一次在 CustomUI.xml 中使用

getVisible
方法时遇到错误。

我正在尝试操作功能区,这是我的事件处理程序的简化版本:

Public WithEvents App As Application

Private Sub App_WindowSelectionChange(ByVal Sel As Selection)
' Code to update Ribbon based on selection
End Sub

对于形状和文本框等标准 PowerPoint 对象,此设置按预期工作。但是,当选择 SVG 文件或更具体的图形对象时,该事件不会触发。因此,我的功能区 UI 无法正确更新以响应 SVG 选择。

故障排除尝试:

  • 我确认事件处理程序适用于其他类型的对象。
  • 不会抛出错误消息;该事件根本不会因 SVG 文件选择而触发。
  • 我尝试了不同类型的选择,发现该问题特定于图形 (SVG)。
  • 缓解该问题的一种方法是将 Graphic 转换为 Shape。然而,SVG 以方形画布为中心,将它们转换为形状不会保留该画布。

可能的限制:

我认为,PowerPoint 在其事件处理机制中可能存在限制或疏忽,特别是在 SVG 文件方面。与标准形状不同,SVG 内部的处理方式可能有所不同,从而导致事件触发方面存在差异。

寻求解决方案:

我正在寻找一种解决方法或解决方案来可靠地检测 PowerPoint 中的 SVG 文件(图标)选择。我的目标是让功能区 UI 响应这些选择,就像响应其他对象一样。

如果有人遇到类似问题或对 PowerPoint 如何在事件处理方面处理 SVG 文件有深入了解,我们将不胜感激。

excel vba powerpoint
1个回答
0
投票

我也有同样的问题,基本上.svg图像通过VBA是不可见的。这可能是因为它们只是嵌入到幻灯片中,但“真实”图像存储在 PowerPoint 文件中。

您提到了原始 .svg 文件中存在的画布,它不会被 PowerPoint 转换为 DrawingML(通过功能区按钮“转换为形状”)。这样的画布要么是

  • 在“clipPath”标签内或
  • 具有属性“style = display:none”。

我建议的解决方案是

  • 删除“clipPath”标签(尽管不是其内容)或
  • 删除“style”属性的相关部分

上述操作可以手动或通过代码完成(直接使用 VBA 或使用 XSLT)(我只找到标签,对于属性,你必须四处查看)

  • 将此类画布转换为形状(然后您可以在 PowerPoint 中将其设置为不可见)

作为参考,如果您有兴趣,这里有关如何在 OOXML 中对形状进行编码的一些信息。

© www.soinside.com 2019 - 2024. All rights reserved.