gpt4 book ai didi

vba - Powerpoint VBA 更新其他人打开的 excel 文件上的链接而不发出警报

转载 作者:行者123 更新时间:2023-12-04 14:14:01 25 4
gpt4 key购买 nike

我有一个 powerpoint 演示文稿,它链接到多个大型 excel 电子表格。我想更新链接,以便更新我的整个演示文稿。但是,如果单击 Update All Link,我的 powerpoint 会崩溃,这可能是因为链接的 excel 文件很大。所以我必须手动更新每个链接,这样它就不会崩溃。

下面这个宏将循环每个链接的对象并更新它的链接,但是,如果文件当前打开,如果我想取消、打开只读或通知,它会弹出一个警告。设置为 false 的显示警报不会对其进行任何操作。

Sub linkupdate()
Application.DisplayAlerts = False
Dim osld As Slide
Dim oshp As Shape
For Each osld In ActivePresentation.Slides
osld.Select
For Each oshp In osld.Shapes
If oshp.Type = msoLinkedOLEObject Then
oshp.Select
oshp.LinkFormat.Update
End If
Next oshp
Next osld
Application.DisplayAlerts = True
End Sub

我发现 powerpoint 在它下面打开了一个不可见的 excel 应用程序来更新链接,但是我无法用我的 vba 获取这个打开的实例并告诉它以只读方式打开链接。

但是,如果文件被其他人打开,我希望它不会发生这种情况,但是我希望它以只读方式自动打开文件进行更新。

最佳答案

查看您的代码,我假设所有这些都是在 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

这里总的来说就是您的代码将如何更新所有不同链接的 OLEObject 的链接。

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 实现此目的,有时可能会错误地粘贴链接信息!当您去更新链接时,什么都不会改变,因为链接不正确并且实际上没有引用您要更新的项目。

关于vba - Powerpoint VBA 更新其他人打开的 excel 文件上的链接而不发出警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26675580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com