vba - 以与 autoshape 下拉菜单类似的方式创建形状
问题描述
我想在 Powerpoint 中创建一个宏,使我能够以与您在自选图形概览中选择自选图形时类似的方式创建形状(即,一旦您调用宏,您就可以单击以设置坐标,然后拖动并单击以设置宽度和高度)。另外,我想给它预设的外观特征(例如某些内边距、填充颜色、边框样式和透明度),这些特征将在 vba 代码中定义。
我知道 .addshapes(),但是,这需要坐标和高度/宽度作为输入。此外,我还没有在 vba 上找到任何帖子/文档来创建没有定义坐标和高度/宽度的形状。有人对如何应对这一挑战有任何想法吗?
提前谢谢了!
至今
解决方案
我对这个问题很着迷,并认为这可能会对你有所帮助。
考虑到当您绘制一个新的自选图形时,您已经更改了窗口选择,并创建了一个新的选择 ShapeRange,其中正好有 1 个项目(新形状)。
因此,通过设置 WindowSelectionChange 事件,您可以在创建时应用您希望的任何格式。
首先使用以下内容创建一个名为 cPptEvents 的类模块:
Public WithEvents PPTEvent As Application
Private Sub PPTEvent_WindowSelectionChange(ByVal sel As Selection)
On Error GoTo Errhandler
Debug.Print "IN_PPTEvent_WindowSelectionChange"
Dim oShp As Shape
If (ActiveWindow.ViewType = ppViewNormal) Then
With sel
If .Type = ppSelectionShapes Then
If .ShapeRange.Count = 1 Then
Set oShp = .ShapeRange(1)
If oShp.Type = msoAutoShape Then
If oShp.AutoShapeType = msoShapeOval Then
If oShp.Tags("new_oval") = "" Then
oShp.Fill.ForeColor.RGB = RGB(255, 0, 0)
oShp.Tags.Add "new_oval", "true"
End If
End If
End If
End If
End If
End With
End If
Exit Sub
Errhandler:
Debug.Print "Error: " & Err.Description
End Sub
每次更改时都会检查选择。如果选择了一个椭圆,它会查找“new_oval”标签,新创建的形状不存在该标签。在这种情况下,它会应用红色填充,当然,一旦你到了这一点,你就可以调用一个完全不同的 sub,传递形状,然后对它进行任何你想要的格式化操作。
通过添加“new_oval”标签,您可以确保格式不会应用于尚未新建的椭圆。这允许用户根据需要手动更改格式 - 否则每次用户选择椭圆时您只是重置格式。
请注意,要在后台运行 _WindowSelectionChange 事件,您必须在某些时候调用它:
Public MyEventClassModule As New cPptEvents
'
Public Sub StartMeUp()
Set MyEventClassModule.PPTEvent = Application
End Sub
如果您正在制作新的插件功能区,则可以在插件触发的任何 Ribbon_Onload 子中包含上述 StartMeUp 中的一行。
使用此解决方案,您甚至不必为最终用户提供特殊按钮或工具集来创建正在格式化的形状。每当用户从本机 PPT 工具绘制新形状时,它都会无形地发生。
推荐阅读
- php - 我想将图像上传到 laravel 中的公共文件夹和数据库中,但我遇到了一些问题
- flutter - 如何在特定位置在字符串中添加空格
- git - 我可以删除历史记录并保留最近 git 提交的 sha 吗?
- c++ - 虚幻引擎 4 教程不适用于 Visual Studio 17
- java - 当我点击自己的 API 时如何刷新 RecyclerView 显示
- javascript - Async await Node.js Unit Testing code using Chai and mocha
- javascript - How to compare whether a path is in same folder or not
- reactjs - How to handle form object in array to add list
- html - 尝试使图像背景不透明
- oracle - Oracle ORDER BY 排序稳定吗?