2013-02-26 77 views
1

我在我的代碼中出現"Object variable or With block variable not set"錯誤。 這是我在宏觀寫作方面的第一個破解。我有編程知識,但這對我來說是新的。vba:powerpoint宏:「變量未設置」

無論如何,我想要通過演示文稿,並且對於每個在備註部分有任何文本的頁面,我都想添加一個包含該文本的新幻燈片(在其後面)。

這裏是我的嘗試:

Sub SlideSort() 
Dim curSlide As Slide 
Dim newSld As Slide 
Dim curPres As Presentation 
Dim curShape As Shape 
Dim i As Integer 

    For i = 1 To ActivePresentation.Slides.Count 
     curSlide = ActivePresentation.Slides(i) 

     For Each curShape In curSlide.NotesPage.Shapes 
      If curShape.Type = msoPlaceholder Then 
       If curShape.PlaceholderFormat.Type = ppPlaceholderBody Then 
        If curShape.TextFrame.TextRange <> "" Then 
         Set newSld = ActivePresentation.Slides.Add(Index:=i + 1, Layout:=ppLayoutText) 
         newSld.Shapes(2).TextFrame.TextRange = curShape.TextFrame.TextRange 
         i = i + 1 

        End If 
       End If 
      End If 
     Next curShape 
    Next i 

End Sub 

,讓錯誤的線路curSlide = ActivePresentation.Slides(I)

回答

3

使用Set curSlide = ActivePresentation.Slides(i) - 這是一個對象,並應通過Set進行操作。

+0

謝謝!出於好奇,有什麼更明智的方式去做我想做的事情? 我猜想宏這樣的計算效率並不是特別的本質。 – JoshDG 2013-02-26 19:56:34

+0

也許結合使用'和'的嵌套'If's。 – 2013-02-26 19:58:29

+0

此外,修正set命令後,我得到了一個新的錯誤:PlaceholderFormat(未知成員):失敗 對於此行:如果curShape.PlaceholderFormat.Type = ppPlaceholderBody然後 – JoshDG 2013-02-26 20:01:05

1

你需要使用此設置,因爲你與其他對象:

Set curSlide = ActivePresentation.Slides(i) 
+0

你打我31秒)))+1 – 2013-02-26 18:36:19

0

賓果。這是Mac版PowerPoint中的一個錯誤。我可以在Mac上重現這個問題。

.PlaceholderFormat.Type在Mac PowerPoint上不受支持,但它應該是。

這不是100%可靠的,但你可以拿起第二形態的備註頁的正文文本佔位符代替上:

Sub SlideSort() 
Dim curSlide As Slide 
Dim newSld As Slide 
Dim curPres As Presentation 
Dim curShape As Shape 
Dim i As Integer 

    For i = 1 To ActivePresentation.Slides.Count 
     curSlide = ActivePresentation.Slides(i) 
     curShape = curSlide.NotesPage.Shapes(2) 
      If curShape.TextFrame.TextRange <> "" Then 
       Set newSld = ActivePresentation.Slides.Add(Index:=i + 1, Layout:=ppLayoutText) 
       newSld.Shapes(2).TextFrame.TextRange = curShape.TextFrame.TextRange 
       i = i + 1 
      End If 
    Next i 

End Sub 

我懷疑你也可能會碰到的問題,因爲你看Slide.Count在循環中,但通過添加幻燈片,您正在修改Slide.Count。