Откройте Excel из VBA в Word - PullRequest
0 голосов
/ 17 апреля 2020

Я использую Office для Ma c и хочу открыть Excel (а затем и документ в нем), используя макрос в Word.

Dim myexl As Excel.Application '(1)
Dim myworkbook As Workbooks
Dim my_path As String

...

Set myexl = CreateObject("Excel.Application") '(2)
Set myworkbook = myexl.Workbooks.Open(my_path) '(3)

Однако строка (2) генерирует «Несоответствие типов» в приведенном выше коде. Если я пытаюсь переключить (1), чтобы вместо этого он читал

Dim myexl As Object

, тогда (2) работает, но теперь я получаю «Объект не поддерживает это свойство или метод» для строки (3)! Это как уловка 22.

Как я могу решить это? Я хочу открыть Excel и все еще иметь возможность использовать методы Excel.Application. Есть ли способ разыграть тип или что-то подобное?

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

используйте Object тип для myworkbook переменной тоже:

    Dim my_path As String
    my_path = "some valid path to wanted workbook"

    On Error GoTo SafeExit
    Dim myexl As Object
    Set myexl = CreateObject("Excel.Application")

    Dim myworkbook As Object
    Set myworkbook = myexl.Workbooks.Open(my_path)

    myexl.Visible = True


    ...

SafeExit:
    MsgBox Err.Number & " - " & Err.Description
    If Not myexl Is Nothing Then myexl.Quit ' <-- this will close the excel instance you opened (if any)
    Set myexl = Nothing
0 голосов
/ 17 апреля 2020

(у вас моя рабочая тетрадь, напечатанная как "Рабочие книги". Но это не первая проблема здесь)

Эта проблема появилась в v16.34 в Ma c Word (ранее были проблемы с CreateObject , GetObject и New при попытке работать с Excel.

Если вы делаете

Dim myobj as Object
Set myobj = CreateObject("Excel.Application")

в течение некоторого времени до v. 16.34, app использовал , чтобы быть Nothing. Но в 16.34, если вы сделаете

Typename(myobj)

, вы получите «WorkBook», что означает, что код возвращает объект, просто неправильный вид.

Здесь я имею был в состоянии использовать код вдоль этих строк, чтобы справиться с этим:

Dim myexl As Application
If UCase(Typename(myobj)) = "WORKBOOK" Then
  Set myexl = myobj.Application
ElseIf UCase(Typename(myobj)) = "APPLICATION" Then
  Set myexl = myobj
End If

Затем попробуйте открыть книгу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...