VBA код, чтобы открыть слово документ не работает - PullRequest
0 голосов
/ 13 июня 2018

Я искал другие сообщения по этой теме, но не могу найти решение.Я хочу запустить некоторый код VBA в Excel 2016 (на imac под управлением ОС 10.13.5), чтобы открыть текстовый документ (желательно только для чтения).Если экземпляр слова уже запущен, я хочу закрыть его, прежде чем продолжить.(Было бы хорошо, если слово уже запущено, чтобы спросить, хочу ли я сохранить другие экземпляры перед их закрытием.) У меня есть код

Private Sub CommandButton1_Click()
Dim w As Object
' If word is already open get ahold of the running instance
' Otherwise create a new instance
On Error Resume Next
Set w = GetObject(, "Word.Application")
If w Is Nothing Then Set w = CreateObject("Word.Application")  
On Error GoTo 0
' Close all open files and shutdown Word
' Loop through any open documents and close them
Do Until w.Documents.Count = 0
    w.Documents(1).Close
Loop
w.Quit False
Set w = Nothing
' Now that all instances of word are closed, open the template
Dim wdApp As Object
Dim wdDoc As Object
Set wdApp = CreateObject("Word.application")  
wdApp.Visible = True
wdApp.DisplayAlerts = False
MYPATH = "Volumes/256SSD/""How to do stuff""/""myfile.docx"""
Set wdDoc = wdApp.Documents.Open(FileName:=MYPATH)
End Sub

Когда я запускаю это с уже словомоткрыто, я получаю переменные результаты.Иногда код запускается по циклу «делать до» и, кажется, закрывает экземпляры открытого слова, затем переходит к последней строке и выдает ошибку времени выполнения vba «Ошибка приложения или объекта».Экземпляр слова запущен и ожидает ввода файла, который нужно открыть.

Если я сразу же снова выполню код, не будет введен «цикл до», и приходит слово, запрашивающее ввод имени файла.VBA выдает ошибку времени выполнения «Ошибка автоматизации».Затем я могу выбрать имя файла из списка «Последние файлы», и оно открывается, но ошибка времени выполнения остается, а файл, выбранный в MYPATH, не открывается.

Буду признателен за помощь.

1 Ответ

0 голосов
/ 13 июня 2018

Первая часть вашего кода нуждается в работе.

  1. Он не закроет все экземпляры Word, если запущено более одного
  2. Если не найдено уже открытого экземпляра Word, он создает его, а затем немедленно закрывает.

Эта часть может быть переработана как

Dim w As Object
On Error Resume Next
    Set w = GetObject(, "Word.Application")
On Error GoTo 0
Do Until w Is Nothing
    Do Until w.Documents.Count = 0
        w.Documents(1).Close SaveChanges:=-2
    Loop
    w.Quit SaveChanges:=0
    Set w = Nothing
    On Error Resume Next
        Set w = GetObject(, "Word.Application")
    On Error GoTo 0
Loop
On Error GoTo 0
...