2017-02-06 11 views
1

Я использую VBA для создания экземпляра слова в настоящее время путем добавления ссылки на библиотеку, но это вызывает проблему, потому что существуют некоторые машины без слова.Создать объект для обработки слова «на лету» (VBA)

Это вызывает мгновенную ошибку при запуске на этих машинах. Невозможно поймать эту ошибку.

Однако, я пытаюсь создать объект в VBA на лету что-то вроде этого

Dim oWshShell As WshShell 
Set oWshShell = New WshShell 
' *** TEST REGESTRY 
Dim tmp As String 
tmp = oWshShell.RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\15.0\Word\Options\PROGRAMDIR") 
Debug.Print tmp 

tmp = tmp + "winword.exe" 

Dim oWord As Object 
Set oWord = Shell(tmp) 

Но моя проблема заключается в том, что oWord не является объект Word.Application. Итак, как с этим справиться?

Было бы неплохо получить все функциональные возможности, такие как Word.Application.

+0

См. Http://stackoverflow.com/questions/9491314/preventing-excel-vba-compile-errors-due-to-users-having-an-older-version-of-ms-o –

+0

Или http://stackoverflow.com/a/41855913/4628637 – R3uK

ответ

1

Вы не должны использовать оболочку, использовать COM завод непосредственно:

Function openWordApp() As Object 
    On Error Resume Next 
    Set openWordApp = CreateObject("Word.Application") 
    If openWordApp Is Nothing Then 
     msgBox "Word not installed on this machine" 
    Else 
     openWordApp.Visible = True 
    End If 
End Function 

В вызывающему, проверьте возвращаемое значение не что иное.

+0

Да, это здорово. Благодарю. – Kinimod

 Смежные вопросы

  • Нет связанных вопросов^_^