Как открыть книгу Excel из MS Word VBA - PullRequest
1 голос
/ 27 июня 2019

Есть и другие варианты этого вопроса в StackOverflow, но все они возникли несколько лет назад, и ответы от них, похоже, относятся к более старым версиям VBA ... или, по крайней мере, они дают мне ошибки, которые я не смогрешить иначе.Вот мой код, написанный с помощью редактора MS Visual Basic версии 7.1, работающий в Mac OS Mojave 10.14.5.Word и Excel являются версиями 16.26.Каждый саб ниже - это отдельная попытка.Я новичок в VBA, поэтому пробую много вещей, которые я не совсем понимаю.Каждая подпрограмма выдает различную ошибку:

Sub OpenExcelFile1()
    Dim oExcel As Excel.Application
    Dim oWB As Excel.Workbook
    Dim granted as Boolean
    Debug.Print "a"

    Set oExcel = New Excel.Application
    granted = GrantAccessToMultipleFiles(Array("/users/sarah/workspace/report-writer/"))
    Debug.Print "b"
    Set oWB = oExcel.Workbooks.Open("/Users/sarah/workspace/report-writer/test.xlsx", ReadOnly:=True)
    Debug.Print "c"
End Sub

OpenExcelFile1 выше зависает примерно на минуту между "a" и "b", затем дает Run-time error '-2146959355 (80080005)': Automation error

Sub OpenExcelFile2()
    Dim oWB As Excel.Workbook
    Dim granted As Boolean
    granted = GrantAccessToMultipleFiles(Array("/Users/sarah/workspace/report-writer/"))
    Debug.Print "d"

    Set oWB = Excel.Workbooks.Open("/Users/sarah/workspace/report-writer/test.xlsx", ReadOnly:=True)
    Debug.Print "e"
End Sub

OpenExcelFile2 выше получает«d», затем дает Run-time error '430': Class does not support Automation or does not support expected interface.

Sub OpenExcelFile3()
    Dim oWB As Excel.Workbook
    Dim granted As Boolean
    granted = GrantAccessToMultipleFiles(Array("/Users/sarah/workspace/report-writer/"))
    Debug.Print "f"

    Set oWB = Excel.Application.Workbooks.Open("/Users/sarah/workspace/report-writer/test.xlsx", ReadOnly:=True)
    Debug.Print "g"
End Sub

OpenExcelFile3 получает «f», затем печатает ту же ошибку, что и OpenExcelFile2

Sub OpenExcelFile4()
    Dim oWB As Excel.Workbook
    Dim granted As Boolean
    granted = GrantAccessToMultipleFiles(Array("/Users/sarah/workspace/report-writer/"))
    Debug.Print "h"
    Set oWB = Excel.Application.WorkbookOpen("/Users/sarah/workspace/report-writer/test.xlsx", ReadOnly:=True)
    Debug.Print "i"
End Sub

OpenExcelFile4 получает «h», затем печатаетта же ошибка, что и в OpenExcelFile2 и OpenExcelFile3.

Ссылочный файл test.xlsx существует в указанном месте с разрешениями 777.

Я установил (проверил? использовал? ссылался?) следующие шесть ссылок: * Visual Basic для приложений * Библиотека объектов Microsoft Word 16.0 * Библиотека объектов Microsoft Forms 2.0 * Библиотека объектов Microsoft Office 16.0 * Библиотека объектов Microsoft Excel 16.0 * Microsoft Visual Basic для приложений Расширяемость 5.3

Чего мне не хватает?Спасибо.

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Найдено a решение, которое мне не нравится:

  1. Используйте Windows, а не Mac.
  2. Удалите строки GrantAccessToMultipleFiles, так как эта функция присутствует тольков версии VBA для Mac
  3. Удалите ссылку на «Библиотеку объектов Microsoft Forms 2.0» (я не могу найти ее в Windows. Возможно, она безвредна, если она на чужом компьютере.)

Я публикую это как «решение», потому что с этими изменениями, потому что они позволяют мне выполнять основную операцию open-excel-file для методов OpenExcelFile1, OpenExcelFile2 и OpenExcelFile3.Последний, OpenExcelFile4, не работал.Похоже, Application.WorkbookOpen () также отсутствует в Windows.Это было проверено и работает для Windows 10 Pro v 1903, сборка 18362.175 с MS VBA версии 7.1 и Office версии 16.

Мне не нравится решение, потому что конкретный проект, для которого я исследую это, является Mac-primary,Если бы у других было решение для Mac, я бы хотел его увидеть.

0 голосов
/ 27 июня 2019

Возможно, вам не хватает ссылки на библиотеку DLL, которая поддерживает автоматизацию Excel из Word. Попробуйте добавить ссылку, войдя в редактор VBA, затем нажмите Tools > References и прокрутите список вниз до Microsoft Excel 16.0 Object Library. Ваша версия может отличаться; Я (очевидно) на Office v16.

...