#vba #ms-word #powerpoint
#vba #ms-word #powerpoint
Вопрос:
У меня есть слайд-шоу PowerPoint с текстами песен, которые я показываю на проекторе. У меня также есть папка с документами Word, которые содержат тексты и аккорды к песням, которые нужны музыканту для исполнения песен. Я хотел бы иметь возможность открывать слайд-шоу, запускать его в режиме докладчика (иметь возможность выбирать слайды из списка), и когда я выбираю слайд для отображения на проекторе, я бы хотел, чтобы соответствующий документ Word открывался на другом экране. Моя настройка — дисплей ноутбука для режима докладчика, проектор для текста для собрания и монитор для отображения документа Word, содержащего текст с аккордами. Я бы хотел, чтобы vba закрывал любой открытый документ Word, не закрывая Word (чтобы он оставался там, где я разместил его на дисплее), и открывал документ Word, соответствующий слайду.
Он находил word открытым, но я не мог видеть ни одного видимого слова. Когда я зашел в диспетчер задач, там было 12 winword.exe он бежит. Я убил их всех, а затем изменил код, и он начал делать то, что я хотел, чтобы он делал.
Public Sub OnSlideShowPageChange()
On Error Resume Next
Dim i As Integer
i = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
If IsNull(Application.Presentations(1).Slides(i).Shapes.Range(Array("WordLoc")).TextFrame.TextRange.Text) Then
Exit Sub
End If
Dim wdApp As Word.Application, wdDoc As Word.Document
Set wdApp = GetObject(, "Word.Application")
On Error GoTo 0
If Not wdApp Is Nothing Then
wdApp.Documents.Close (wdDoNotSaveChanges)
On Error GoTo 0
Else
Set wdApp = CreateObject("Word.Application")
End If
Set wdDoc = wdApp.Documents.Open(Application.Presentations(1).Slides(i).Shapes.Range(Array("WordLoc")).TextFrame.TextRange.Text, , True)
On Error GoTo 0
wdApp.Visible = True
wdDoc.Activate
End Sub
Комментарии:
1. Это то, что я придумал, и это не работает. Я не вижу открытия Word.
2.
Error = 0
указывает на отсутствие ошибки, поэтому предыдущие строки выполняются нормально. Если вы не получаетеMsgBox 4
, это означает, что предыдущая строка вызывает ошибку. Это может быть связано с тем, что нет документа для закрытия. Попробуйте использоватьIf wdApp.Documents.Count > 0 then wdApp.Documents.Close (wdDoNotSaveChanges)