查看您的代码,我假设所有这些都是在 PowerPoint VBA 编辑器中完成的。话虽如此,让我解释一下为什么您会从 Excel 应用程序中获得弹出窗口。当你写这行代码时:
Application.DisplayAlerts = False
您指的是 PowerPoint 应用程序,您的意思是指 Excel 应用程序,因为我假设弹出窗口正在那里发生。为了解决这个问题,我们需要创建对 Excel 应用程序的引用。如果我添加以下代码我们可以关闭 Excel 应用程序的显示:
'Declare Excel Variables
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
'Create a new Excel Application, make it invisible, set the Excel Display alerts to False.
Set xlApp = New Excel.Application
xlApp.Visible = False
xlApp.DisplayAlerts = False
既然我们已经处理了弹出窗口,让我们来解决您的链接问题。为了解决链接问题,我们将在后台打开链接所引用的 Excel 工作簿。这样更新链接会更快。 如果我们不打开工作簿,我有一个实例,更新链接过程很容易需要超过 5 分钟。
但是,如果对象是链接图表,则获取正确的文件名可能会有点困难。 我们需要解析文件,以便它删除工作表名称和图表名称。我们是这样做的:
'Get the Source File of the shape.
SourceFile = PPTShape.LinkFormat.SourceFullName
'We may need to parse the Source file because if it's linked to a chart, for example, we can get the following:
'C:\Users\NAME\ExcelBook.xlsx!Chart_One!
'We want it to look like the following:
'C:\Users\NAME\ExcelBook.xlsx
'This will parse the source file so that it only includes the file name.
Position = InStr(1, SourceFile, "!", vbTextCompare)
FileName = Left(SourceFile, Position - 1)
接下来,我们要打开工作簿,更新链接,然后关闭工作簿。所以我们将添加这部分代码:
'This will open the file as read-only, and will not update the links in the Excel file.
Set xlWorkBook = xlApp.Workbooks.Open(FileName, False, True)
'Update the link
PPTShape.LinkFormat.Update
'Close the workbook and release it from memory.
xlWorkBook.Close
Set xlWorkBook = Nothing
为了更新所有不同链接的 OLEObjects 的链接,您的代码将呈现出这样的外观。
Sub UpdateLink()
'Declare PowerPoint Variables
Dim PPTSlide As Slide
Dim PPTShape As Shape
'Declare Excel Variables
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
'Create a new Excel Application, make it invisible, set the Excel Display alerts to False.
Set xlApp = New Excel.Application
xlApp.Visible = False
xlApp.DisplayAlerts = False
'Loop through each slide in the Presentation.
For Each PPTSlide In ActivePresentation.Slides
'Loop through Each Shape in the slide
For Each PPTShape In PPTSlide.Shapes
'If the Shape is a linked OLEObject.
If PPTShape.Type = msoLinkedOLEObject Then
'Get the Source File of the shape.
SourceFile = PPTShape.LinkFormat.SourceFullName
'We may need to parse the Source file because if it's linked to a chart, for example, we can get the following:
'C:\Users\NAME\ExcelBook.xlsx!Chart_One!
'We want it to look like the following:
'C:\Users\NAME\ExcelBook.xlsx
'This will parse the source file so that it only includes the file name.
Position = InStr(1, SourceFile, "!", vbTextCompare)
FileName = Left(SourceFile, Position - 1)
'This will open the file as read-only, and will not update the links in the Excel file.
Set xlWorkBook = xlApp.Workbooks.Open(FileName, False, True)
'Update the link
PPTShape.LinkFormat.Update
'Close the workbook and release it from memory.
xlWorkBook.Close
Set xlWorkBook = Nothing
End If
Next PPTShape
Next PPTSlide
'Close the Excel App & release it from memory
xlApp.Quit
Set xlApp = Nothing
End Sub
在将对象粘贴到 PowerPoint 幻灯片时也要小心,如果您使用 VBA 来实现此目的,有时它可能会错误地粘贴链接信息!当您去更新链接时,什么都不会改变,因为链接不正确并且实际上并没有引用您要更新的项目。