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

使用内部变量。幻灯片

轩辕晔
2023-03-14

我正在开发一个交互式Powerpoint演示文稿,用户将单击照片的缩略图并能够几乎全屏查看它。我在使用.形状和.幻灯片方法时遇到了困难。

我想在演示文稿中的一张幻灯片上出现几个较小的图像。如果用户想查看非常大的图像,他们只需要单击图像。然后,我希望图像出现在它自己的新生成的幻灯片上,尽可能大。当他们单击较大的图像时,他们将被带回他们正在查看的较小图像幻灯片。这很容易实现,通过为显示中的每个小图像制作一个单独的全尺寸图像幻灯片,并在单击小图像时简单地调用大幻灯片编号;然而,这很耗时,并且使演示文稿比需要的要大得多。如果用户从不单击以查看放大的图像,则包含大图像的页面会占用空间。我选择在单击图像时执行vba代码,应该:

>

  • 复制图像

    在演示文稿的最后一张幻灯片后创建一张新幻灯片

    将图像粘贴到新幻灯片中

    法典:

    Sub ViewFullSize()
    
        Dim pptNewSlide As Slide
        ' Dim objCurrentSlideIndex As Integer
    
        ' objCurrentSlideIndex = ActiveWindow.Selection.SlideRange.SlideIndex
    
        With ActivePresentation
    
            .Slides(2).Shapes("Picture 7").Copy
    
            .Slides(4).Shapes.Paste
    
        End With
    
    
        Set pptNewSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, ppLayoutCustom)
    
        ActivePresentation.SlideShowWindow.view.Last
    
    End Sub
    

    这段代码执行并执行所显示的内容。我的问题是,我需要幻灯片编号和形状编号作为变量。我不想为100张可以点击的照片重写这段代码片段。我试图使当前幻灯片成为这样的变量:

        Dim objCurrentSlideIndex As Integer
        objCurrentSlideIndex = ActiveWindow.Selection.SlideRange.SlideIndex
        With ActivePresentation
            .Slides(objCurrentSlideIndex).Shapes("Picture 7").Copy
            .Slides(4).Shapes.Paste`
        End With
    

    我尝试的变量< code >。slides(objCurrentSlideIndex)导致整个子例程不执行,但不会使幻灯片崩溃。我使用了< code>Set和许多其他语法,但无法让它使用变量而不是普通数字。有办法做到这一点吗?可以将<代码>。Slides()和< code >。Shapes()方法甚至使用变量?我读了微软和PPTools的一些页面,但是找不到使用变量的例子。

  • 共有2个答案

    宋飞文
    2023-03-14

    完整的工作代码!

    对于任何感兴趣的人来说,这是我在Powerpoint 2017中完成的(可能不是收集的)完全可操作的代码。

    这被设计为作为一个宏动作分配给幻灯片中的图片。当一个页面上有多个较小尺寸的图像时,可以为每个图像分配一个宏,该宏将在其自己的幻灯片上全屏显示图像,然后将用户发送回包含较小图像的屏幕。这有点像全屏缩放功能。

    这是我所能记录的最好的文件,允许任何人跟踪每一步发生的事情。如果我说错了什么,欢迎对适当的措辞和术语进行编辑。

    这并不特定于我的机器或路径或类似的东西。您可以简单地复制并粘贴到powerpoint中的模块中,然后开始将新宏分配给演示文稿中的任何图像。

    Sub ViewFullSize(objCurrentShape As Shape) ' Place shape clicked-on into variable.
     ' Credit Shyam Pillai @ http://www.skphub.com/ppt00040.htm#2 for the method of
     ' bringing the shape into the macro as a variable allowing easier manipulation.
    
        Dim pptNewSlide As Slide
        Dim objCurrentSlideNum As Integer
        Dim objLastSlideNum As Integer
        Dim objLargeView As Shape
    
    ' Place current slide number into a variable.
        objCurrentSlideNum = ActivePresentation.SlideShowWindow.view.CurrentShowPosition
    
    ' Copy shape to clipboard for later pasting.
        ActivePresentation.Slides(objCurrentSlideNum).Shapes(objCurrentShape.Name).Copy
    
    ' Place new blank slide at the end of the presentation.
        Set pptNewSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, ppLayoutBlank)
    
    ' Make the new slide the active slide.
        ActivePresentation.SlideShowWindow.view.Last
    
    ' Place the new slide number into a variable.
        objLastSlideNum = ActivePresentation.SlideShowWindow.view.CurrentShowPosition
    
    ' Paste the shape image from the clipboard onto the new slide.
        ActivePresentation.Slides(objLastSlideNum).Shapes.Paste
    
    ' Put pasted image into a variable.
        Set objLargeView = ActivePresentation.Slides(objLastSlideNum).Shapes(1)
    
    ' Full credit for this next section of the code goes to PPTools & David Marcovitz
    ' @ http://www.pptfaq.com/FAQ00352_Batch_Insert_a_folder_full_of_pictures-_one_per_slide.htm
    ' Thanks for the hard work!
    
    ' Manipulate the image using the variable.
        With objLargeView
          ' Set mouse-click action on image to return user back to the slide they came from.
            .ActionSettings(ppMouseClick).Action = ppActionLastSlideViewed
          ' Reposition the image for proper resizing
            .Left = 0
            .Top = 0
            .ScaleHeight 1, msoTrue
            .ScaleWidth 1, msoTrue
          ' Resize the image to full screen while maintaining aspect ratio.
          ' This is wide screen mode.  If you are working with the more
          ' narrow mode, simply change the 9 to a 3 and the 16 to a 4
          ' to keep the correct aspect ratio.
            If 9 * .Width > 16 * .Height Then
                .Width = ActivePresentation.PageSetup.SlideWidth
                .Top = 0.5 * (ActivePresentation.PageSetup.SlideHeight - .Height)
            Else
                .Height = ActivePresentation.PageSetup.SlideHeight
                .Left = 0.5 * (ActivePresentation.PageSetup.SlideWidth - .Width)
            End If
        End With
    ' From here, the slideshow is now showing the originally clicked-on image
    ' full screen on its own page waiting for the user to click on it to return
    ' to the rest of the show.  If the slideshow isn't set to kiosk mode, then
    ' there is the possibility of the user clicking somewhere on the screen out
    ' of the picture area and it would end the slideshow.
    End Sub
    
    茹航
    2023-03-14
    Sub ViewFullSize(objCurrentShape As Shape) ' Place shape clicked on into variable.
    
        Dim pptNewSlide As Slide
        Dim objCurrentSlideNum As Integer
        Dim objLastSlideNum As Integer
    
    ' Place current slide number into a variable.
        objCurrentSlideNum = ActivePresentation.SlideShowWindow.view.CurrentShowPosition
    
    ' Send shape to clipboard for later pasting.
        ActivePresentation.Slides(objCurrentSlideNum).Shapes(objCurrentShape.Name).Copy
    
    ' Place new blank slide at the end of the presentation.
        Set pptNewSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, ppLayoutCustom)
    
    ' Make the new slide the active slide.
        ActivePresentation.SlideShowWindow.view.Last
    
    ' Place the new slide number into a variable.
        objLastSlideNum = ActivePresentation.SlideShowWindow.view.CurrentShowPosition
    
    ' Paste the shape image from the clipboard onto the new slide.
        ActivePresentation.Slides(objLastSlideNum).Shapes.Paste
    
    End Sub
    

    我偶然发现了一段代码,它显示当单击一个形状时,它可以将其标识符直接传递到子例程中并分配给一个变量。在我的例子中,(对象货币形状为形状)。然后这可以与. Shapes()方法一起使用,我用它来调用形状以复制. Shapes(objCurrentShape.Name). Copy

    .Slides()方法更容易分配给变量(或者我相信如此),因为它不依赖于单击哪个形状。它只是活动的幻灯片编号,并且是通过 .查看当前显示位置函数。

    此代码现在可以分配给幻灯片上任意数量的形状,并将该形状复制并通过到演示文稿末尾新创建的空白幻灯片以供进一步操作。

     类似资料:
    • 使用幻灯片组件,你需要在 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

    • 本文向大家介绍使用impress.js制作幻灯片,包括了使用impress.js制作幻灯片的使用技巧和注意事项,需要的朋友参考一下 上周看到一个朋友做了很炫的缩放式幻灯片,可能因为对此知识了解的不多,找了好久才找到几个web幻灯片工具。通过筛选决定用Geek的 impress.js 。 impress.js是一款新兴的幻灯工具,它的效果类似Prezi,但是拥有3D的功能,而且是在MIT&GPL协议

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

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

    • 我想拿一张PowerPoint幻灯片(“源”),并将其插入到另一张已经包含一些内容的PowerPoint幻灯片(“目标”)中,位于源PowerPoint幻灯片中的特定位置。 我已经尝试了几种方法来研究这样做的代码,但是我不断得到将幻灯片合并到PowerPoint演示文稿中的结果,这不是我想要的。我想拿一张现有的幻灯片并将其插入到另一张幻灯片中,就像在现有幻灯片中插入图片一样。 我有另一位同事编写的

    • 本参考手册使用下列术语. 全局变量 所有以`$'开头的变量 内部变量 全局变量中的内部变量(本网页介绍的变量) 特殊变量 内部变量中,形如"`$' + 1位数字或符号"的变量 选项变量 内部变量中,由命令行选项设定的变量,形如"`$-' +1个选项字符" 有时,内部变量(有特殊的功能和用途)的有效作用域不只限于全局,尽管如此,上述定义还是把它们划入到全局变量的范畴中(可以在任何地方使用内部变量,从