VBA 中的幻灯片计数变量 - Powerpoint

Slide count variable in VBA - Powerpoint

@james 前段时间回答了一个类似的问题,正确的做法是:

Sub CreatePres()
    Dim ppApp As PowerPoint.Application
    Dim ppPres As PowerPoint.Presentation
    Dim ppSlide As PowerPoint.Slide
    Dim ppTextbox As PowerPoint.Shape

    Set ppApp = New PowerPoint.Application
    ppApp.Visible = True
    ppApp.Activate

    Set ppPres = ppApp.Presentations.Add
    slidesCount = ppPres.Slides.Count
    Set ppSlide = ppPres.Slides.Add(slidesCount + 1, ppLayoutTitle)
    ppSlide.Shapes(1).TextFrame.TextRange.Text = "Hello world"
    ppSlide.Shapes(2).TextFrame.TextRange.Text = Date
    slidesCount = ActiveWindow.Selection.SlideRange.SlideIndex
    Call slide2(slidesCount)
End Sub

Sub slide2(i As Integer)
    Set ppSlide = ppPres.Slides.Add(i + 1, ppLayoutTitle)
    ppSlide.Select
    ppSlide.Shapes(1).TextFrame.TextRange.Text = "Hello world"
    ppSlide.Shapes(2).TextFrame.TextRange.Text = Date
End Sub

然而,我在 'Call Slide2(slidecount)' 上收到“By ref mismatch Argumnenr 错误——这是第一个子的 las 行。

我在 Windows 10 Pro 上使用 Office 365。

提前致谢

您没有 DIM 您的 slidesCount 变量,因此 VBA 在您为其赋值时创建了一个变体。您的 Sub slide2 需要一个整数,因此会引发错误。

为了避免这样的麻烦,总是将 Option Explicit 放在每个模块的顶部。这将防止未声明的变量引起这样的问题。

转到工具 | Options 并在 Require Variable Declaration 旁边打勾,让 VBA 自动为您插入 Option Explicit。

使用正确的变量类型也是个好主意。 PPT 对象模型中的任何 .Count 值都是 Long,而不是整数。 VBA 通常会在需要时在两者之间进行转换。通常是对的。有时不是。然后这一切都击中了粉丝。