2017-01-31 45 views
-1

我想知道如何從Excel VBA創建新的PPT(我已經擁有該代碼),但是在創建過程中未看到該應用程序。我發現了一些見解,但它只在打開現有PPT文件時才起作用,但我正在創建一個新文件。如何在不看到應用程序的情況下使用Excel VBA創建PowerPoint

Dim pptApp As PowerPoint.Application 
Dim pptPres As PowerPoint.Presentation 
Dim pptSlide As PowerPoint.Slide 
Dim pptShape As PowerPoint.Shape 
Dim excelTable As Excel.Range 
Dim SlideTitle As String 
Dim SlideText As String 
Dim SlideObject As Object 
Dim pptTextbox As PowerPoint.Shape 
Dim SlideNumber As String 

On Error Resume Next 
Set pptApp = New PowerPoint.Application 
Err.Clear 

Set pptPres = pptApp.Presentations.Add 
pptPres.PageSetup.SlideSize = ppSlideSizeOnScreen 
+0

'On Error Resume Next'在這裏是一個特別糟糕的想法IMO。如果您無法創建PowerPoint應用程序實例,那麼您的代碼應該放棄,不要像任何事情一樣繼續運行。 –

+1

你能否[編輯]你的問題來澄清到底是什麼代碼片段?您是否嘗試製作無形的「pptApp」?或者從打開現有ppt文件的代碼摘錄?由於該代碼根本不打開任何內容,並且似乎指定'.Visible = False',所以不清楚它如何與實際問題聯繫起來。 –

+0

另外...你似乎已經引用了PowerPoint庫('因爲PowerPoint.Application' *會*編譯,對吧?) - 那麼爲什麼你遲到了綁定應用程序實例的創建?只要執行'Set pptApp = New PowerPoint.Application'。 –

回答

2

PowerPoint.Application調用.Active做到了這一點 - 它激活它,這使窗口可見:

Dim ppt As PowerPoint.Application 
Set ppt = New PowerPoint.Application 
Debug.Print ppt.Visible '<--Prints 0 (msoFalse) 
ppt.Activate    '<--THIS SHOWS THE WINDOW. 
Debug.Print ppt.Visible '<--Prints -1 (msoTrue) 

就完全刪除pptApp.Activate線。

正如評論中所述,您還需要修復錯誤處理程序。在這種情況下,最好的解決方法是徹底刪除它。 GetObject返回現有實例(如果存在)。我假設當你說「創建一個新的PPT」,你不要意思是「附加到正在運行的PowerPoint實例,如果它存在,否則創建一個新的」。這就是你的代碼目前所做的。

也如評論中所述,如果您有對Microsoft PowerPoint X.X對象庫的引用(如Dim pptApp As PowerPoint.Application所示),則不應使用CreateObject。這是爲了後期的約束。如果您有參考,請使用早期綁定。

最後,當您創建PowerPoint.Application時,它是默認情況下不可見。你可以通過將代碼縮減到這一行來「修復」你的代碼:

Set pptApp = New PowerPoint.Application 
+0

謝謝。好的,我根據你的帖子和其他評論編輯了我的代碼。但它仍然可見,也許是因爲我的pptpresestation.add代碼? – thePB

+0

Presentations.Add採用可選參數WithWindow。設置pptPres = Presentations.Add(msoFalse)將爲您提供一個無窗(不可見)演示文稿的引用,您可以使用這些演示文稿進行大部分(如果不是全部的話)。 –

相關問題