【问题标题】:Unlock with macro when read-only in PowerPoint在 PowerPoint 中只读时使用宏解锁
【发布时间】:2021-03-10 09:06:51
【问题描述】:

我想使用 PowerPoint 宏删除只读。

我正在编写一个在打开文件时触发的宏。 在该宏中,有一个删除特定形状的过程。 PowerPoint 文件具有写锁。

鉴于上述假设,当您以只读方式打开文件时 宏会被执行,但是会出现错误,因为它是只读的,形状不能被删除。

所以我在执行宏时解锁了只​​读锁 删除特定形状后,我想再次将其锁定为只读。

有没有这样的方法? 我知道写锁密码。

Public Sub Ribbon_onLoad(ribbon As IRibbonUI)
  Const EXP_DATE As Date = "2021/09/30"
  
  Dim NOW_DATE As Date: NOW_DATE = Format(Date, "yyyy/mm/dd")
  
  Dim pp As PowerPoint.Presentation: Set pp = ActivePresentation
  
  If NOW_DATE <= EXP_DATE Then
    MsgBox "OK!"
    Call DeleteShapesWithName("expShape")
  Else
    MsgBox "No!Exp!:" + Format(EXP_DATE, "yyyy/mm/dd")
    
    'ActivePresentation.Close
  End If
End Sub

Sub DeleteShapesWithName(ByVal targetName As String)
    Dim sld As Slide
    Dim shp As Shape
    Dim i As Long
    i = 1
    For Each sld In Application.ActivePresentation.Slides
        Do Until i > sld.Shapes.Count
            If sld.Shapes(i).Name = targetName Then
                sld.Shapes(i).Delete
            Else
                i = i + 1
            End If
        Loop
    Next
End Sub

-----添加
我收到回复后添加了修改后的来源。

Public Sub Ribbon_onLoad(ribbon As IRibbonUI)
    Call UnlockPresentation
End Sub


Sub UnlockPresentation()
    Dim oPVW As ProtectedViewWindow
    Dim oPres As Presentation
    
    Set oPVW = ProtectedViewWindows.Open("C:\test\example_exp.pptm")
    oPVW.Edit ModifyPassword:="test"
        
    Call DeleteShapesWithName("expShape")
    'Do stuff here
End Sub

Sub DeleteShapesWithName(ByVal targetName As String)
    Dim sld As Slide
    Dim shp As Shape
    Dim i As Long
    i = 1
    For Each sld In Application.ActivePresentation.Slides
        Do Until i > sld.Shapes.Count
            If sld.Shapes(i).Name = targetName Then
                sld.Shapes(i).Delete
            Else
                i = i + 1
            End If
        Loop
    Next
End Sub

【问题讨论】:

    标签: vba powerpoint


    【解决方案1】:

    这是打开只读演示文稿的代码,您可以修改它。无需重新设置密码,只需将“测试”替换为实际密码即可。 Do stuff here 注释所在的位置,您可以使用 ActivePresentation 关键字来修改文件:

    Sub UnlockPresentation()
        Dim oPVW As ProtectedViewWindow
        Dim oPres As Presentation
        
        Set oPVW = ProtectedViewWindows.Open("C:\HasModPW.pptx")
        oPVW.Edit ModifyPassword:="ExistingModificationPassword"
        'Do stuff here
    End Sub
    

    请注意:Microsoft 的 ProtectViewWindow.Edit 帮助页面是错误的。该页面当前声明此方法更改密码,但它实际上提供了密码以使编辑成为可能,

    【讨论】:

    • 感谢您的回复。我尝试了你教给我的方法 Application.ActivePresentation.Slides 我得到了一个错误。对于受保护的视图? ??添加了源代码。
    • 我在发布之前测试了代码。错误消息的确切措辞是什么?
    • 我很抱歉很多次。添加了错误图像。字面翻译:“运行时错误”应用程序(未知成员):无效请求。没有活动的演示文稿。 "
    • 在您的列表中,您已在子目录中声明了 oPVW 和 oPres。这使得这些变量仅在该子中可用。相反,在模块顶部声明变量以使它们对所有子程序可见。 docs.microsoft.com/en-us/office/vba/language/concepts/…
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    相关资源
    最近更新 更多