在powerpoint中创建一个宏VBA弹出窗口,当输入页码时,会将所选幻灯片粘贴到除所选幻灯片之外的所有幻灯片中

Creating a Macro VBA Pop-out in powerpoint that, when page numbers are entered, will paste the selected to all the slides besides the ones selected

提问人:dw45824 提问时间:11/2/2023 更新时间:11/2/2023 访问量:30

问:

我试图创建一个粘贴到所有宏,将选定的内容粘贴到所有幻灯片。但是,我意识到我不希望它被粘贴到封面或关闭页面等页面上,所以我认为一个很好的方法是在运行宏时出现一个弹出窗口,然后您可以选择您不希望它粘贴到的页面。然后,它会将所选内容粘贴到除输入的幻灯片之外的所有幻灯片。

我有所有代码的通用粘贴,但正在努力弄清楚如何实现弹出框。任何帮助将不胜感激!

通用粘贴到所有代码:

Sub PasteToAll()
    
    Dim oshpR  As ShapeRange
    Dim T1     As Single
    Dim L1     As Single
    
    ActiveWindow.View.Paste
    
    Set oshpR = ActiveWindow.Selection.ShapeRange
    
    T1 = oshpR(1).Top
    
    L1 = oshpR(1).Left
    
    For i = 1 To ActivePresentation.Slides.Count
        Set MyRange = ActivePresentation.Slides(i).Shapes.Paste
        MyRange(1).Left = L1
        MyRange(1).Top = T1
    Next

End Sub
VBA 幻灯片

评论

0赞 Steve Rindsberg 11/3/2023
与其期望用户记住要选择的正确幻灯片编号,不如让他们选择他们想要影响的幻灯片(在普通视图/缩略图窗格或幻灯片排序器视图中)。然后:将 oSl 调暗为幻灯片 |对于 ActiveWindow.Selection.SlideRange 中的每个 oSl |{随心所欲} |Next(将每个 | 替换为 CR/LF)
0赞 dw45824 11/3/2023
我是 VBA 的新手 - 你知道我会怎么做吗?谢谢!
0赞 Steve Rindsberg 11/5/2023
请参阅我之前评论中的代码片段。

答:

0赞 taller 11/2/2023 #1

注意:您的代码可以在活动幻灯片上创建两个形状(其索引为 ActiveWindow.View.slide.SlideIndex)。 创建第一个形状。 如果活动幻灯片不在“跳过”列表中,则循环将创建第二个形状。ActiveWindow.View.PasteFor

请尝试。

Option Explicit
Sub PasteToAll()
    Dim oshpR  As ShapeRange
    Dim T1     As Single
    Dim L1     As Single
    Dim sPage As String
    Dim sIndex As String
    Dim i As Integer, MyRange
    Const SEP_CHAR = ","  ' Modidy as needed 
    ActiveWindow.View.Paste
    Set oshpR = ActiveWindow.Selection.ShapeRange
    T1 = oshpR(1).Top
    L1 = oshpR(1).Left
    sPage = VBA.InputBox("Please input page number(seperated by comma)")
    sPage = SEP_CHAR & sPage & SEP_CHAR
    For i = 1 To ActivePresentation.Slides.Count
        sIndex = SEP_CHAR & i & SEP_CHAR
        If VBA.InStr(1, sPage, sIndex) = 0 Then
            Set MyRange = ActivePresentation.Slides(i).Shapes.Paste
            MyRange(1).Left = L1
            MyRange(1).Top = T1
        End If
    Next
End Sub

评论

0赞 dw45824 11/2/2023
你好!非常感谢您的帮助。我注意到,当代码首次运行时,该形状会立即粘贴到我当前所在的幻灯片上,然后在输入幻灯片编号并提交到弹出窗口后再次粘贴到该幻灯片上(我假设这就是您的笔记所指的)。有没有办法解决这个问题?任何帮助将不胜感激!谢谢!
0赞 taller 11/2/2023
有没有办法确定形状的位置(上、左)而不粘贴在当前幻灯片上?