2015-04-23 3 views
0

Я новичок в VBA и новичок в StackOverflow, поэтому, пожалуйста, простите любые нарушения этикета. У меня есть проект по созданию инструмента с использованием Excel VBA, который позволит пользователю идентифицировать исходный файл Excel и затем скопировать область печати каждого рабочего листа в файл Excel в слайд во вновь созданной презентации PowerPoint. Я должен использовать последнее связывание, потому что я не могу предположить, что пользователи этого инструмента будут использовать одни и те же версии продуктов Microsoft Office или что они будут включать ссылку на библиотеку объектов PowerPoint. Мне удалось все это сделать. Где я повесил трубку, когда я пытаюсь установить размер слайдов - меня попросили, чтобы слайды находились в размере слайдов 4: 3, доступном в PowerPoint 2013 (или аналогичном соотношении, если это необходимо, чтобы заставить инструмент работать в более старых версиях PowerPoint - я пытался использовать ppSlideSizeLetterPaper). Это бросает «Ошибка времени выполнения» 438: Объект не поддерживает это свойство или метод ». Если бы кто-нибудь мог предложить предложения о том, как обойти это, я был бы благодарен.Использование Excel VBA для изменения размера слайда PowerPoint - Поздняя привязка

Вот соответствующие фрагменты кода:

Public PowerPointApp As Object 
Public TargetFile As Object 
… 
Sub Master() 
Set PowerPointApp = CreateObject("PowerPoint.Application") 
Err.Clear 
If PowerPointApp Is Nothing Then Set PowerPointApp = CreateObject(class:="PowerPoint.Application") 
If Err.Number = 429 Then 
    MsgBox "PowerPoint could not be found. Exiting macro." 
    Exit Sub 
End If 
Set TargetFile = PowerPointApp.Presentations.Add 
    PowerPointApp.Visible = True 
    PowerPointApp.Activate 
…<code to add slides and paste data from Excel into the slides> 
PowerPointApp.TargetFile.PageSetup.SlideSize = 2 ‘this is where the error is thrown. 2 is the numeric equivalent of ppSlideSizeLetterPaper 

ответ

3

Целевой_файл не определено в этом контексте - не существует метод или свойство называется, что на объекте приложения.

Поскольку у вас уже есть объект этого имени, просто используйте это.

TargetFile.PageSetup.SlideSize = 2 
+0

правильный. Объект приложения не имеет свойства TargetFile, поэтому вы получаете ошибку. Кроме того, я бы переместил строку, которая задает размер слайда сразу после добавления презентации и до того, как вы добавили какой-либо контент в слайды. В противном случае контент будет искажен при изменении размера. –

+0

Благодаря Триггеру и Стиву. Я попробовал предложение Триггера (и переместил оскорбительную строку кода на предложение Стива), и он отлично работал. Trigger, я бы попробовал это в тестировании, но я верил (явно неправильно), что мне пришлось ссылаться на объект PowerPointApp, потому что я использовал позднюю привязку. Я, очевидно, не понимаю, как работает последнее обязательство - нужно будет кое-что сделать в этом чтении. –

+0

Ранняя/поздняя привязка относится к двоичному интерфейсу. Раньше программа знает, чтобы перейти к адресу на # 5 в vtable (для 5-го метода). В последнее время это разговор. Привет, у вас есть команда под названием 'print', объект отвечает' yes, number 5'. Ваша программа затем говорит, пожалуйста, выполните команду номер 5. Объект уверен. Таким образом, раннее связывание - это вызов функции с одним уровнем косвенности и быстрым. Все разрабатывается во время компиляции. Позднее привязка происходит медленно, вы общаетесь с объектами на полу-английском языке, вам не нужно знать, что это за объект. – Trigger

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