PowerPoint 中功能区的 VBA 仅在使用 SaveAs/SaveCopyAs 后工作一次

标签 vba error-handling powerpoint ribbon save-as

我的 PowerPoint 功能区出现异常行为。

我创建了一个带有功能区的 pptm 文件,用于快速链接到 2 个 vba 代码。
一种是将数据从 xls 文件复制到图表。另一种是将演示文稿的副本另存为 pptx 文件和 pdf 文件 (savecopyas),并使用 Outlook 发送电子邮件。

只要我只保存 pdf 文件,一切都会顺利进行。如果我还创建了 pptx 文件(或其他命名的 pptm 文件),则 vba 脚本仅在第一次运行 - 之后两个操作的功能区不再工作。它提示错误,说未找到 vba 代码。

我经历了什么?

1) 只要未启动电子邮件代码,xls 代码就可以随心所欲地运行。

2)没有警告说pptx文件将不再包含任何vba代码(这就是Excel会告诉你的)

3) 如果我添加将 pptm 保存为 pptx 的最后一行,则模块将保留在 pptx 中,直到它关闭。在这种 pptx 文件的情况下,功能区命令可以正常工作 - 只要您愿意。

4) 从一个按钮手动启动 pptm 中的电子邮件 vba 代码始终可以顺利运行,无论它启动的频率如何。

我在网上只发现了 2-3 个类似的问题/错误,没有任何解释或只有解决方法。

有没有人可以解释并帮助我解决这种奇怪的行为?

亲切的问候,

马里奥

这是代码:

Sub Email(ByVal control As IRibbonControl)

Dim Send_Email, olApp As Object
Dim Send_1, Send_2 As String

With ActivePresentation
.SaveCopyAs _
    FileName:=ActivePresentation.Path & "\" & "Test" & ".pptx", _
    FileFormat:=ppSaveAsOpenXMLPresentation
End With

With ActivePresentation
.SaveCopyAs _
    FileName:=ActivePresentation.Path & "\" & "Test" & ".pdf", _
    FileFormat:=ppSaveAsPDF
End With

Send_1 = ActivePresentation.Path & "\" & "Test" & ".pptx"
Send_2 = ActivePresentation.Path & "\" & "Test" & ".pdf"

Set olApp = CreateObject("Outlook.Application")

Set Send_Email = olApp.CreateItem(0)

With Send_Email
 .To = "test@gmail.com"
 .Subject = "Test"
 .Body = "Hallo "
 .Attachments.Add Send_2
 .Attachments.Add Send_1
 .Send
End With

Set olApp = Nothing

End Sub

最佳答案

如果您希望 VBA 宏工作,您需要以 .pptm(启用宏)格式保存演示文稿。默认情况下,pptx 没有/运行 VBA 代码。

关于PowerPoint 中功能区的 VBA 仅在使用 SaveAs/SaveCopyAs 后工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306058/

相关文章:

php - 使用 PHP 将 Powerpoint PPT 转换为 JPG 或 PNG 图像

vba - Excel VBA : How to capture MsgBox response

r - 在给定大小的 powerpoint 幻灯片中绘制 ggplot2 图 - R

VBA - 范围对象在循环中仅设置一次

bash - 如何检查 Bash 中是否存在某些文件?

error-handling - SSIS包装ForEach循环继续

javascript - 从 JS 中的对象中捕获错误

ruby - 如何在 Ruby 中将 ppt 转换为图像?

vba - 从句子中提取字母数字

vba - 如何打开文件夹中的所有文件(xls 和 csv 格式文件) - VBA