当前位置: 首页 > 知识库问答 >
问题:

Powerpoint:手动设置幻灯片名称

卢元龙
2023-03-14

上下文:C#中的PowerPoint幻灯片有一个属性slide。名称(通常包含任意字符串值)。在我的C#应用程序中,我想使用这个属性来标识幻灯片(幻灯片顺序不可靠)。

问题:如何手动设置幻灯片。PowerPoint应用程序中的Name属性?

我的问题非常像:“如何在PowerPoint幻灯片中命名对象?”,但只是在幻灯片级别上。

任何帮助都将不胜感激。

共有3个答案

宋琛
2023-03-14

您可以手动或使用VBA重命名幻灯片。一旦你知道如何,大门就会打开一些有趣的可能性,我将在下面的代码中演示这些可能性。

手动重命名幻灯片。此功能隐藏在 VBA 编辑器的“属性”窗格中,但不需要编码。

>

  • 如果“开发人员”功能区不可见,请启用它:文件

    在开发人员功能区中,单击Visual Basic菜单项以打开Visual Basic编辑器。

    按 Ctrl R 键导航到“项目资源管理器”窗格。

    展开“Microsoft PowerPoint对象”

    单击任何幻灯片以选择它。

    按 F4 键导航到“属性”窗格。

    编辑(名称)项目,并按Enter键以应用名称更改。

    幻灯片名称更改可能不会立即显示在 VBA 项目资源管理器窗格中。只要“属性”窗格中的名称正确无误,名称就会成功更改。

    此VBA代码也可以解决问题(隐藏幻灯片编号1):

    ActivePresentation.Slides(1).SlideShowTransition.Hidden = msoTrue
    

    此代码块涵盖了管理幻灯片名称的几种方法,并回答了主要问题。

    Option Explicit
    
    Public Function RenameSlide(oldName As String, newName As String)
    ' RenameSlide finds slide oldName and renames it to newName.
    ' Arguements:
    '   oldName: current (old) name of existing slide
    '   newName: new name for slide.
    '
        Dim tempBool As Boolean
        Dim sld As Slide
        Dim RetVal(0 To 1) As String
    
        ' Check if oldName can be found.
        If SlideExists(oldName) Then
            Set sld = Application.ActivePresentation.Slides(oldName)
        Else
            RetVal(0) = 1 'Error 1
            RetVal(1) = "Error 1: slide with name " & oldName & " not found. Aborting."
            Exit Function
        End If
    
        ' Check if this slide name newName already exists.
        If SlideExists(newName) Then
            RetVal(0) = 2 'Error 1
            RetVal(1) = "Error 2: slide with name " & newName & " already exists. Aborting."
            Exit Function
        End If
    
        ' Rename the slide
        'Application.ActivePresentation.Slides(oldName) = newName
        Application.ActivePresentation.Slides(oldName).Select
        Application.ActiveWindow.View.Slide.Name = newName 'current slide
        RetVal(0) = 0 'Success
        RetVal(1) = "Success: slide renamed from '" & oldName & "' to '" & newName & "'."
    
    End Function
    
    Public Sub SetSlideName()
    ' Prompt user for new name for active slide.
    '
        Dim oldName As String
        Dim newName As String
        Dim sld As Slide
        Dim msg As String
    
        ' Get current name of active slide.
        oldName = Application.ActiveWindow.View.Slide.Name
    
        msg = "Enter the new name for slide '" + oldName + "'."
    retry:
        newName = ""
        ' Prompt for new slide name. Loop until a name of at least 1 character is provided.
        Do While newName = ""
            newName = InputBox(msg, "Rename slide")
            newName = Trim(newName)
            If Len(newName) = 0 Then
                msg = "Try again.  You must enter a slide name to continue."
            ElseIf newName = oldName Or newName = Str(vbCancel) Then
                Exit Sub
            End If
        Loop
    
        ' If an existing slide already has name newName, then
        ' go back and prompt user again.slide name already exists
        If SlideExists(newName) Then
            msg = "Slide with this name already exists!"
            GoTo retry
        End If
    
        ' Set the new slide name
        Application.ActiveWindow.View.Slide.Name = newName
        MsgBox "Slide renamed to '" + newName + "'."
    End Sub
    
    Public Function SlideExists(SlideName As String) As Boolean
        Dim RetVal As Boolean
        Dim sld
    
        ' Assume slide does not exist.
        SlideExists = False
    
        ' Try to find slide by name.
        ' If we error out, the slide does NOT exist.
        On Error GoTo NoSlide
        Set sld = ActivePresentation.Slides(SlideName)
    
        ' If we got this far, the slide DOES exist.
        SlideExists = True
        Exit Function
    
    NoSlide:
        ' Error setting slide objects shows
        ' that slides does NOT exist.
        SlideExists = False
    End Function
    

    作为题外话,我使用幻灯片命名技巧和一点VBA来选择性地从打印中删除某些幻灯片。为了填充宏列表,我添加了一些额外的VBA宏。从任何幻灯片:开发人员功能区

    稍微摆弄一下这些宏,并阅读注释。你会发现我写的代码是可扩展的,所以你可以很容易地根据你的需要修改它。

    下面的代码帮助我管理哪些幻灯片和对象被打印,哪些被呈现在屏幕上。当我想打印参考幻灯片但不覆盖它们时,这尤其有用。当我有带有动画的幻灯片时,这就更有用了。动画通常不能很好地翻译打印。所以,我选择根本不打印一些动画对象。事实上,我甚至可以为仅用于打印的对象添加替代内容(在呈现时隐藏)——尽管我很少这样做。相反,我通常会隐藏动画以避免打印,或者创建一张幻灯片来呈现,并复制一张非动画的幻灯片用于打印。使用这些宏,可以轻松管理用于打印的幻灯片和对象以及用于演示的幻灯片和对象的混搭。我希望你喜欢。

    Option Explicit
    
    ' DontPresentSlide - run macro while on a slide you wish to skip while presenting.
    '                    The slide name will be appended with "NoPresent". You still
    '                    need to run PrepToPresent before presenting to hide slide.
    ' PresentSlide - "NoPresent" will be removed from the slide. You still
    '                need to run PrepToPresent before presenting to hide slide.
    ' PrepToPesentSlides() - Unhide slides and objects you want presented and
    '                hide slides and objects you do NOT want presented.
    ' ShowNoPressnt() - show slides and shapes marked "NoPresent"
    ' HideNoPresent() - hide slides and shapes marked "NoPresent"
    
    ' DontPrintSlide - run macro while on a slide you wish to skip while presenting.
    '                    The slide name will be appended with "NoPrint". You still
    '                    need to run PrepToPresent before presenting to hide slide.
    ' PrintSlide - "NoPrint" will be removed from the slide. You still
    '                need to run PrepToPresent before presenting to hide slide.
    ' PrepToPrintSlides() - Unhide slides and objects you want printed and
    '                hide slides and objects you do NOT want printed.
    ' ShowNoPrint() - show slides and shapes marked "NoPrint"
    ' HideNoPrint() - hide slides and shapes marked "NoPrint"
    
    ' ShowHideSlides() - Hide or Unhide slides based on slide name.
    ' ShowHideShapes() - Hide or Unhide shapes based on shapes name.
    
    
    Public Const cjaHide = False
    Public Const cjaShow = True
    Public Const cjaToggle = 2
    
    Sub ShowHideSlides(NameContains As String _
                    , Optional LMR As String = "R" _
                    , Optional ShowSlide As Integer = False)
    ' Show or Hide slides based on slide name.
    ' Arguements:
    '   NameContains (string):
    '       slides with this string will be modified.
    '   LMR (string): enter L, M or R to indicate
    '       searching the Left, Middle or Right of
    '       the slide name, respectively.
    '   ShowSlide (integer):
    '       Show: True (-1)
    '       Hide: False (0)
    '       Toggle: 2
    '
    ' To show or hide slides manually:
    '   Right-click the slide thumbnail, then click Hide Slide
    ' To rename slides,
    '   Use this VBA: ActiveWindow.View.Slide.Name = "NewSlideName"
    '   Or, edit the (Name) property in the VBA Properties window.
    '
       Dim sldCurrent As Slide
       Dim found As Boolean
       found = False
    
       LMR = Trim(UCase(LMR))
       If LMR <> "L" And LMR <> "M" Then LMR = "R"
       'Loop through each slide in presentation.
       For Each sldCurrent In ActivePresentation.Slides
            'Match shape name left, right or middle as per LMR arguement.
            'ActiveWindow.View.Slide.Name or Slide.SlideNumber
            found = False
            If LMR = "R" And LCase(right(sldCurrent.Name, Len(NameContains))) = LCase(NameContains) Then
                found = True
            ElseIf LMR = "L" And LCase(left(sldCurrent.Name, Len(NameContains))) = LCase(NameContains) Then
                found = True
            ElseIf LMR = "M" And InStr(1, LCase(NameContains), LCase(sldCurrent.Name)) Then
                found = True
            End If
            'If match found, then set shape visibility per ShowShape arguement.
            If found Then
                If ShowSlide = True Then
                    ActivePresentation.Slides(sldCurrent.SlideNumber).SlideShowTransition.Hidden = msoFalse
                ElseIf ShowSlide = False Then
                    ActivePresentation.Slides(sldCurrent.SlideNumber).SlideShowTransition.Hidden = msoTrue
                Else
                    ActivePresentation.Slides(sldCurrent.SlideNumber).SlideShowTransition.Hidden = Not ActivePresentation.Slides(sldCurrent.SlideNumber).SlideShowTransition.Hidden
                End If
            End If
        Next       'sldCurrent
    End Sub
    
    Sub ShowHideShapes(NameContains As String _
                    , Optional LMR As String = "R" _
                    , Optional ShowShape As Integer = False)
    ' Show or Hide shapes/objects based on object name.
    ' Arguements:
    '   NameContains (string):
    '       shapes with this string will be modified.
    '   LMR (string): enter L, M or R to indicate
    '       searching the Left, Middle or Right of
    '       the slide name, respectively.
    '   ShowSlide (integer):
    '       Show: True (-1)
    '       Hide: False (0)
    '       Toggle: 2
    '
    ' To show, hide and/or rename objects:
    '    1. Turn on Selection Pane via: Home Ribbon >
    '       Select > Selection Pane.
    '    2. Double-click a shape name to rename it.
    '    3. Click the eye icon to the far right to show/hide a shape.
    
       Dim shpCurrent As Shape
       Dim sldCurrent As Slide
       Dim found As Boolean
       found = False
    
       LMR = Trim(UCase(LMR))
       If LMR <> "L" And LMR <> "M" Then LMR = "R"
       'Loop through each slide in presentation.
       For Each sldCurrent In ActivePresentation.Slides
          With sldCurrent
              'Loop through each shape on current slide.
              For Each shpCurrent In .Shapes
                'Match shape name left, right or middle as per LMR arguement.
                found = False
                If LMR = "R" And right(shpCurrent.Name, Len(NameContains)) = NameContains Then
                    found = True
                ElseIf LMR = "L" And left(shpCurrent.Name, Len(NameContains)) = NameContains Then
                    found = True
                ElseIf LMR = "M" And InStr(1, NameContains, shpCurrent.Name) Then
                    found = True
                End If
                'If match found, then set shape visibility per ShowShape arguement.
                If found Then
                    If ShowShape = True Then
                        shpCurrent.Visible = True
                    ElseIf ShowShape = False Then
                        shpCurrent.Visible = False
                    Else
                        shpCurrent.Visible = Not shpCurrent.Visible
                    End If
                End If
              Next 'sldCurrent
          End With 'sldCurrent
        Next       'sldCurrent
    
    End Sub
    
    Sub HideNoPrint()
    ' Hide slides and shapes you do NOT want printed.
    '
    ' Run this macro to hide all slides and shapes that
    ' end with the string "NoPrint".
    
    ' Usage.  Assume you have slides that contain animations that
    ' make the printed slide difficult or impossible to read.
    ' Let's further suppose you plan to present certain slides
    ' but not print them.
    '   1. Add the"NoPrint" suffix to any shapes that clutter
    '      the printed page.
    '   2. Add the "NoPrint" suffix to slides you don't want to
    '      print.
    '   3. Run this macro to hide shapes and slides.
    '   4. Print the slides.
    '   5. Optionally, run the ShowNoPrint() macro in preparation
    '      for presenting the slides.
        ShowHideShapes "NoPrint", "R", False
        ShowHideSlides "NoPrint", "R", False
    End Sub
    
    Sub ShowNoPrint()
    ' Unhide slides and shapes that were hidden
    ' to prevent them from being printed in handouts.
    '
        ShowHideShapes "NoPrint", "P", True
        ShowHideSlides "NoPrint", "P", True
    End Sub
    
    Sub HideNoPressent()
    ' Hide objects you do NOT want to present on screen.
    '
    ' Run this macro to hide all slides and shapes that
    ' end with the string "NoPresent".
    '
    ' Usage.  Assume you have slides that contain supporting material
    ' that you wish to provide as printed handouts but not show.
    ' You can manually hide those slides and objects of course. I
    ' prefer to use these macros.
    '   1. Add the"NoPresent" suffix to any shapes that you want
    '      to print to handouts but not show on-screen.
    '   2. Add the "NoPresent" suffix to slides you want to
    '      print but not display on screen, such as reference slides.
    '   3. Run this macro to hide the "NoPresent" shapes and slides.
    '   4. Present your slides.
    '   5. Optionally, run the ShowNoPresent() macro in preparation
    '      for printing the slides.
    '
        ShowHideShapes "NoPressent", "R", False
        ShowHideSlides "NoPressent", "R", False
    End Sub
    
    Sub ShowNoPresent()
    ' Unhide objects that were hidden to prevent them from
    ' being presented on screen.
    '
        ShowHideShapes "NoPressent", "P", True
        ShowHideSlides "NoPressent", "P", True
    End Sub
    
    Sub PrepToPrintSlides()
    ' Unhide objects you want printed and
    ' hide objects you do NOT want printed.
        ShowNoPresent
        HideNoPrint
    End Sub
    
    Sub PrepToPresentSlides()
    ' Unhide objects you want presented and
    ' hide objects you do NOT want presented.
        ShowNoPrint
        HideNoPresent
    End Sub
    
    Sub DontPresentSlide()
        Dim RetVal, sldName As String
        sldName = Application.ActiveWindow.View.Slide.Name
        If InStr(1, sldName, "NoPresent", vbBinaryCompare) = 0 Then
            RetVal = RenameSlide(sldName, sldName & "-NoPresent")
        End If
        HideNoPresent
    End Sub
    
    Sub PresentSlide()
        Dim RetVal, sldName As String, strStart As String, newName As String
        'Remove the NoPresent suffix from the current slide.
    
        'get slide name
        sldName = Application.ActiveWindow.View.Slide.Name
        'Unhide slide
        ActivePresentation.Slides(sldName).SlideShowTransition.Hidden = msoFalse
        'remove "-NoPresent" from slide name
        Do
            strStart = InStr(1, sldName, "-NoPresent")
            If InStr(1, sldName, "-NoPresent") Then
                newName = left(sldName, strStart - 1) & right(sldName, Len(sldName) - strStart - 9)
                RetVal = RenameSlide(sldName, newName)
            End If
            sldName = Application.ActiveWindow.View.Slide.Name
        Loop Until InStr(1, sldName, "-NoPresent") = 0
        'remove "NoPresent" from slide name
        Do
            strStart = InStr(1, sldName, "NoPresent")
            If InStr(1, sldName, "NoPresent") Then
                newName = left(sldName, strStart - 1) & right(sldName, Len(sldName) - strStart - 8)
                RetVal = RenameSlide(sldName, newName)
            End If
            sldName = Application.ActiveWindow.View.Slide.Name
        Loop Until InStr(1, sldName, "NoPresent") = 0
    
    End Sub
    
    Sub DontPrintSlide()
        Dim RetVal, sldName As String
        sldName = Application.ActiveWindow.View.Slide.Name
        If InStr(1, sldName, "NoPrint", vbBinaryCompare) = 0 Then
            RetVal = RenameSlide(sldName, sldName & "-NoPrint")
        End If
        HideNoPrint
    End Sub
    
    Sub PrintSlide()
        Dim RetVal, sldName As String, strStart As String, newName As String
        'Remove the NoPrint suffix from the current slide.
    
        'get slide name
        sldName = Application.ActiveWindow.View.Slide.Name
        'Unhide slide
        ActivePresentation.Slides(sldName).SlideShowTransition.Hidden = msoFalse
        'remove "-NoPrint" from slide name
        Do
            strStart = InStr(1, sldName, "-NoPrint")
            If InStr(1, sldName, "-NoPrint") Then
                newName = left(sldName, strStart - 1) & right(sldName, Len(sldName) - strStart - 7)
                RetVal = RenameSlide(sldName, newName)
            End If
            sldName = Application.ActiveWindow.View.Slide.Name
        Loop Until InStr(1, sldName, "-NoPrint") = 0
        'remove "NoPrint" from slide name
        Do
            strStart = InStr(1, sldName, "NoPrint")
            If InStr(1, sldName, "NoPrint") Then
                newName = left(sldName, strStart - 1) & right(sldName, Len(sldName) - strStart - 6)
                RetVal = RenameSlide(sldName, newName)
            End If
            sldName = Application.ActiveWindow.View.Slide.Name
        Loop Until InStr(1, sldName, "NoPrint") = 0
    End Sub
    
    Sub HideAllCovers()
    ' Run this macro to hide all Covers.
        ShowHideShapes "Cover", "L", False
    End Sub
    
    Sub ShowAllCovers()
    ' Run this macro to hide all Covers.
        ShowHideShapes "Cover", "L", True
    End Sub
    
    Sub HideAllAnswers()
    ' Run this macro to hide all Covers.
        ShowHideShapes "Answer", "L", False
    End Sub
    
    Sub ShowAllAnswers()
    ' Run this macro to hide all Covers.
        ShowHideShapes "Answer", "L", True
    End Sub
    
    Sub HideAllQuestions()
    ' Run this macro to hide all Covers.
        ShowHideShapes "Question", "L", False
    End Sub
    
    Sub ShowAllQuestions()
    ' Run this macro to hide all Covers.
        ShowHideShapes "Question", "L", True
    End Sub
    
    Sub ShowAll()
    ' Run this macro to hide all shapes (Covers and Answers).
        ShowAllQuestions
        ShowAllAnswers
        ShowAllCovers
        ShowNoPrint
    End Sub
    
    Sub HideAll()
    ' Run this macro to hide all shapes (Covers and Answers).
        HideAllQuestions
        HideAllAnswers
        HideAllCovers
        HideNoPrint
    End Sub
    

  • 哈骞仕
    2023-03-14

    您无法手动设置幻灯片名称,但只需编写一些代码,即可轻松完成。例如,在 VBA 中:

    Sub NameThatSlide()
      ActivePresentation.Slides(1).Name = "Whatever You Like Here"
    End Sub
    
    微生毅
    2023-03-14

    PowerPoint中没有允许您编辑幻灯片名称的内置功能。正如史蒂夫所说,你必须使用VBA电码。幻灯片名称永远不会因为插入更多幻灯片而改变,即使关闭PowerPoint也保持不变;在VBA代码中设置的幻灯片名称是永久的。下面是我写的一些代码,让您可以方便地查看当前所选幻灯片的名称,并允许您对其进行重命名:

    '------------------------------------------------------------------
    ' NameSlide()
    '
    ' Renames the current slide so you can refer to this slide in
    ' VBA by name. This is not used as part of the application;
    ' it is for maintenance and for use only by developers of
    ' the PowerPoint presentation.
    '
    ' 1. In Normal view, click on the slide you wish to rename
    ' 2. ALT+F11 to VB Editor
    ' 3. F5 to run this subroutine
    '------------------------------------------------------------------
    Sub NameSlide()
        Dim curName As String
        curName = Application.ActiveWindow.View.Slide.name
        
        Dim newName As String
    retry:
        newName = InputBox("Enter the new name for slide '" + curName + "', or press Cancel to keep existing name.", "Rename slide")
        If Trim(newName) = "" Then Exit Sub
                
        Dim s As Slide
        
        ' check if this slide name already exists
        On Error GoTo SlideNotFound
        Set s = ActivePresentation.Slides(newName)
        On Error GoTo 0
        
        MsgBox "Slide with this name already exists!"
        GoTo retry
        
        Exit Sub
        
    SlideNotFound:
        On Error GoTo 0
        Application.ActiveWindow.View.Slide.name = newName
        MsgBox "Slide renamed to '" + newName + "'."
            
    End Sub
    
     类似资料:
    • 我使用jQuery slick插件(http://kenwheeler.github.io/slick/)创建了一个轮播。我想使用“幻灯片”设置来指定旋转木马中使用哪些元素。此设置的说明为: 类型:元素 默认值:“” 用作幻灯片的元素查询 我对这个设置的理解是,如果我指定了'div',那么只有div元素将显示在轮播中。我不能让它运转起来。当我创建轮播时,容器中的所有元素都会显示出来。 我创建了一个

    • 我已经设置了一个宏,它将Excel电子表格中的一些图表保存为图片(作为更大程序的一部分),并且需要一些代码来将这些图片(每张幻灯片一张)粘贴到幻灯片中。 目前,我已经成功地打开了一个带有4张空白幻灯片的PowerPoint演示文稿,甚至还没有成功导入1张图片。 我一直在使用形状之类的方法。addpicture(“C:\Users\restoppathname”),但尚未使其工作

    • 使用幻灯片组件,你需要在 sm.js 和 sm.css 之后额外引入如下两个文件: <link rel="stylesheet" href="//g.alicdn.com/msui/sm/0.6.2/css/sm-extend.min.css"> <script type='text/javascript' src='//g.alicdn.com/msui/sm/0.6.2/js/sm-exte

    • Progress,进度条,用于上传、下载等耗时并且需要显示进度的场景,用户可以随时中断该操作。在mpvue框架中实现这个功能是基于小程序的原生progress 组件,这里主要说一下它percent属性: percent 类型:Float 默认值:无 可选值:0-100 说明:百分比0~100 要实现上传或者下载过程中显示进度的效果,就需要实时修改 percent属性的值,下面示例代码是每隔 20m

    • 幻灯片秀 自动依顺序显示每张图像。 播放幻灯片秀 同时播放音乐与幻灯片秀 使用操作接口 利用PSP™主机的按钮或线控装置进行操作

    • 我们正在尝试使用Apache POI 3.16从PowerPoint幻灯片中删除图表,但我们遇到了困难。 我们的代码执行以下步骤: 打开现有的 PowerPoint 文档(模板文档) 添加和删除幻灯片 更新现有幻灯片中的图表 这很好。 在某些时候,我们需要从给定的幻灯片中删除图表。这是我们的尝试: < code>pkg.removePart()调用似乎可以工作,但是将最终的PowerPoint文档