Я создаю макрос VBA в Excel, чтобы скопировать диапазоны Excel и Excel в PowerPoint. Для этого я хочу открыть существующую презентацию (pptName).Excel to PowerPoint - Если ppt открыт, но конкретный прес не открыт, тогда откройте специальный прес, иначе используйте уже открытый прес
Возможно, у меня уже может быть презентация открытой, а также коллекция других презентаций.
Что я хочу сделать: Найти, если PowerPoint открыт; если он открыт, проверьте на pptName. Если pptName уже открыт, то выполните скрипт, иначе откройте pptName.
Вопрос: Я не могу заставить его использовать уже открытое имя pptName. Либо он открывает второй новый экземпляр презентации, либо использует недавно использованную презентацию, которая обычно не является конкретной, которую я хочу изменить.
Код: Dim ppApp Как PowerPoint.Application Dim ppSlide Как PowerPoint.Slide
Dim pptName As String
Dim CurrentlyOpenPresentation As Presentation
pptName = "MonthlyPerformanceReport"
'Look for existing instance
On Error Resume Next
Set ppApp = GetObject(, "PowerPoint.Application")
On Error GoTo 0
'Create new instance if no instance exists
If ppApp Is Nothing Then Set ppApp = New PowerPoint.Application
'Add a presentation if none exists
'If ppApp.Presentations.Count = 0 Then ppApp.Presentations.Add
'If ppt is open, check for pptName. If pptName is already open then progress, otherwise open pptName
If ppApp.Presentations.Count > 0 Then
For Each CurrentlyOpenPresentation In ppApp.Presentations
If CurrentlyOpenPresentation.FullName = pptName & ".pptx" Then GoTo ProgressWithScript
Next CurrentlyOpenPresentation
ppApp.Presentations.Open Filename:=SheetLocation & "\" & pptName & ".pptx"
End If
ProgressWithScript:
'Open Presentation specified by pptName variable
If ppApp.Presentations.Count = 0 Then ppApp.Presentations.Open Filename:=SheetLocation & "\" & pptName & ".pptx"
'If ppApp.Presentations.Count > 0 Then ppApp.Presentations.Open Filename:=SheetLocation & "\" & pptName & ".pptx"
'Application.DisplayAlerts = False
Еще одна попытка, еще не так:
If ppApp.Presentations.Count > 0 _
Then
For Each CurrentlyOpenPresentation In ppApp.Presentations
If CurrentlyOpenPresentation.FullName = pptName _
Then IsOpen = True
If CurrentlyOpenPresentation.FullName = pptName _
Then ppApp.ActiveWindow.View.GotoSlide ppApp.Presentations(pptName).Slides.Count
If IsOpen = True Then GoTo ProgressWithScript
Next CurrentlyOpenPresentation
'Else: ppApp.Presentations.Open Filename:=SheetLocation & "\" & pptName & ".pptm"
End If
IsOpen = False
If IsOpen = False _
Then ppApp.Presentations.Open Filename:=SheetLocation & "\" & pptName & ".pptm"
В основном проблемы была, что вы перебором коллекции Презентации, глядя, чтобы увидеть, если .FullName соответствует SomeFileName.PPTX , что никогда не будет, потому что .FullName возвращает полный путь, а не только имя файла. .Name, как вы нашли, возвращает имя (включая расширение, поэтому не нужно ссылаться на это имя файла, с которым вы сравниваете его). –