2017-01-31 3 views
-1

Я хочу знать, как я могу создать новый PPT из Excel VBA (у меня уже есть код), но не вижу приложение во время его создания. Я нашел некоторые идеи, но он работает только тогда, когда он открывает существующий файл PPT, но я создаю новый файл.Как создать PowerPoint с Excel VBA, не видя приложения

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

Вызов .Active на PowerPoint.Application делает именно это - он активирует его, что делает окно видимым:

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. Set pptPres = Presentations.Add (msoFalse) даст вам ссылку на невидимую (невидимую) презентацию, с которой вы можете больше всего, если не все, с чем. –

 Смежные вопросы

  • Нет связанных вопросов^_^