2013-05-31 5 views
9

Контекст: Слайд PowerPoint в C# имеет свойство Slide.Name (обычно содержит произвольное строковое значение). В моем приложении C# я хотел бы использовать это свойство для определения слайдов (порядок слайдов является ненадежным).Powerpoint: Вручную установлено Имя слайда

Вопрос: Как вручную установить свойство Slide.Name в приложении PowerPoint?

Моя проблема очень похожа на: «How to name an object within a PowerPoint slide?», но только на уровне слайдов.

Любая помощь будет оценена по достоинству.

ответ

4

Вы не можете вручную установить слайд-имя, но с небольшим количеством кода, это просто. В VBA, например:

Sub NameThatSlide() 
    ActivePresentation.Slides(1).Name = "Whatever You Like Here" 
End Sub 
+0

Это эффективно изменяет название слайда в окне редактирования презентации слайдов. Однако в редакторе VBA слайды * все еще появляются со своими * оригинальными * именами, например, «Slide1» и «Slide 32» и т. Д. Существуют пробелы, где слайды удаляются. Можно ли изменить имя, указанное в объекте VBAProject «Microsoft PowerPoint Object», чтобы оно соответствовало свойству .Name слайда (в PowerPoint 2013)? – DRC

+0

Я не верю, что есть. PowerPoint называет каждый слайд, когда он создан. Каждый слайд также имеет свойство .Name, которое PPT устанавливает в ту же строку, что и имя слайда. Это свойство .Name, а не внутреннее имя слайда, которое изменяется, когда мы устанавливаем .Name. Это может быть возможно изменить внутреннее имя, отредактировав XML-презентацию. Мне любопытно: зачем нужно менять имя? –

+0

Спасибо за ответ, @Steve Rindsberg. «Потребность» - это простота программирования в VBA. У меня есть «презентация», которая станет учебным пособием для студентов. Он будет полностью контролироваться VBA, поэтому код VBA контролирует, когда ученику разрешено продолжить переход к следующему слайду и т. Д. Поскольку я изменил порядок слайдов и сделал большое количество «тестовых» слайдов, это запутывает работу со слайдом в представлении редактирования, где слайд имеет разумное имя, но затем переключается на представление VBAProject, где слайд имеет только число, которое не совпадает с именем в представлении редактирования. – DRC

10

Там нет встроенной функциональности в 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 
+0

Этот скрипт очень полезен для программирования VBA: он позволяет вам переименовать любой слайд, чтобы вы могли надежно использовать имя слайда в коде VBA. –

1

Я не уверен, что это позволит вам установить свойство Slide.Name, потому что Я не программист VBA, но в любом случае AFAIK проще всего назвать слайды в PowerPoint 2010, используя представление Outline.

Если вы позиционируете мышью налево слева на созданном слайде, вы можете перетащить вправо вертикальный сортировщик слайдов. В верхней части этой панели вы увидите две вкладки: Слайды и Контур.

Выберите Контур, вы увидите, что каждый слайд пронумерован и кнопка серого захвата, которая позволяет вам изменять порядок слайдов. Если вы нажмете справа от него, вы можете ввести любое имя, например .

В области основного вида на слайде будет Главная украшена над ним. Затем вы можете оставить его там или скрыть, изменив цвет шрифта на задний план или перемещая текст за рамку презентации.

BTW Вы можете использовать эти имена в гиперссылках.

+0

Хотя может быть повод для этого, он, к сожалению, фактически не изменяет свойство '.Name' слайда. –

1

использовал функцию Sub SplitFile() для создания отдельных слайдов из колоды> 100 слайдов. Все прошло хорошо! Но может ли кто-нибудь сказать мне, какой код я использую, чтобы переименовать файл автоматически, предполагая, что каждый слайд имеет заголовок в текстовом поле? Я хочу, чтобы заголовок слайда был именем файла для нового, созданного отдельного слайда.

Вот код, который я использовал для создания отдельных слайдов (в виде отдельных файлов), благодаря тому, кто разместил его в Интернете.

Sub SplitFile() Dim lSlidesPerFile As Long Dim lTotalSlides As Long Dim oSourcePres Как Презентация Dim otargetPres презентационных Dim sFolder As String Dim секстет As String Dim sBaseName As String Dim lCounter As Long Dim lPresentationsCount As Long ', сколько будет мы разделили его на Dim х As Long Dim lWindowStart As Long Dim lWindowEnd As Long Dim sSplitPresName As String

On Error GoTo ErrorHandler 

Set oSourcePres = ActivePresentation 
If Not oSourcePres.Saved Then 
    MsgBox "Please save your presentation then try again" 
    Exit Sub 
End If 

lSlidesPerFile = CLng(InputBox("How many slides per file?", "Split Presentation")) 
lTotalSlides = oSourcePres.Slides.Count 
sFolder = ActivePresentation.Path & "\" 
sExt = Mid$(ActivePresentation.Name, InStr(ActivePresentation.Name, ".") + 1) 
sBaseName = Mid$(ActivePresentation.Name, 1, InStr(ActivePresentation.Name, ".") - 1) 

If (lTotalSlides/lSlidesPerFile) - (lTotalSlides \ lSlidesPerFile) > 0 Then 
    lPresentationsCount = lTotalSlides \ lSlidesPerFile + 1 
Else 
    lPresentationsCount = lTotalSlides \ lSlidesPerFile 
End If 

If Not lTotalSlides > lSlidesPerFile Then 
    MsgBox "There are fewer than " & CStr(lSlidesPerFile) & " slides in this presentation." 
    Exit Sub 
End If 

For lCounter = 1 To lPresentationsCount 

    ' which slides will we leave in the presentation? 
    lWindowEnd = lSlidesPerFile * lCounter 
    If lWindowEnd > oSourcePres.Slides.Count Then 
     ' odd number of leftover slides in last presentation 
     lWindowEnd = oSourcePres.Slides.Count 
     lWindowStart = ((oSourcePres.Slides.Count \ lSlidesPerFile) * lSlidesPerFile) + 1 
    Else 
     lWindowStart = lWindowEnd - lSlidesPerFile + 1 
    End If 

    ' Make a copy of the presentation and open it 

    For Each oSlide In ActiveWindow.Presentation.Slides 
strTitles = strTitles _ 
    & "Slide: " _ 
    & CStr(oSlide.SlideIndex) & vbCrLf _ 
    & oSlide.Shapes.Title.TextFrame.TextRange.Text _ 
    & vbCrLf & vbCrLf 

Следующая oSlide On Error GoTo ErrorHandler

intFileNum = FreeFile

sSplitPresName = sFolder & sBaseName & _ "_" & CStr (lWindowStart) & "-" & CStr (lWindowEnd) & " «. & секстет oSourcePres.SaveCopyAs sSplitPresName, ppSaveAsDefault Set otargetPres = Presentations.Open (sSplitPresName,, True)

With otargetPres 
     For x = .Slides.Count To lWindowEnd + 1 Step -1 
      .Slides(x).Delete 
     Next 
     For x = lWindowStart - 1 To 1 Step -1 
      .Slides(x).Delete 
     Next 
     .Save 
     .Close 
    End With 

Next ' lpresentationscount 

NormalExit: Exit Sub ErrorHandler: MsgBox "произошла ошибка" Резюме NormalExit End Sub

0

Вы можете переименовать слайд вручную или с помощью VBA. Как только вы знаете, как дверь открывается, некоторые интересные возможности, которые я продемонстрирую с помощью кода ниже.

Ручное переименование слайдов. Эта возможность скрыта в области свойств редактора VBA, но не требует кодирования.

  1. Если разработчик ленты не отображается, включите его: Файл>Опции>Настройка ленты> проверить Developer Main Tab.

  2. От разработчика ленты, выберите пункт меню Visual Basic, чтобы открыть редактор Visual Basic.

  3. Нажмите клавиши Ctrl + R, чтобы перейти к панели Project Explorer.

  4. Expand "Microsoft PowerPoint объектов"

  5. Нажмите на любой слайд, чтобы выбрать его.

  6. Нажмите клавишу F4, чтобы перейти к области свойств.

  7. Редактировать (Имя) пункт и нажмите Enter , чтобы применить изменения имени.

Изменение имени слайда может не отображаться непосредственно на панели Project Explorer. Пока имя будет правильным на панели «Свойства», имя изменилось успешно.

Этот код 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 для заполнения списка макросов. С любого слайда: лента разработчика> Макросы> Выбрать макрос> Кнопка запуска. Используйте этот метод для запуска моих макросов CurrentSlide, DontPresentSlide, PrintSlide и DontPrintSlide. После того, как вы правильно отметили различные слайды, просто запустите макрос PrepToPresentSlides или PrepToPrintSlides перед тем, как представить или распечатать, соответственно.

Немного поиграйте с этими макросами и прочитайте комментарии. Вы обнаружите, что я написал код расширяемо, поэтому вы можете легко его модифицировать для своих нужд.

Код ниже помогает мне управлять тем, какие слайды и объекты печатаются и которые представлены на экране. Это особенно полезно, когда я хочу печатать эталонные слайды, но не закрывать их. Это еще более полезно, когда у меня есть слайды с анимацией. Анимации обычно не переводят хорошо. Поэтому я предпочитаю не печатать некоторые анимированные объекты вообще. Фактически, я могу даже добавить заменяющий контент для объектов, которые будут использоваться только для печати (скрытые при представлении), хотя я редко это делаю. Вместо этого я обычно скрою анимацию от печати или создаю слайд для презентации и неанимированную копию для печати. С помощью этих макросов легко управлять сочетанием и совпадением слайдов и объектов для печати и слайдов и объектов для презентации. Я надеюсь, вам понравится.

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 
Смежные вопросы