Настройка Excel VBA для использования позднего связывания для открытия документов Word - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь настроить рабочий код с раннего связывания на позднее связывание, чтобы избежать проблем с пользователями с разными ссылочными версиями или отсутствующих справочных проблем.Специально избегая раннего связывания для ссылки Microsoft Word.

Согласно приведенному ниже коду, я использую Microsoft Excel для создания объекта Microsoft Word и открытия документов Word для обработки.Я изменил переменные на объекты, но зациклился на -> Установить wrdDocument = wrdApplication.Documents.Open (strPath), где он открывает слово, но затем вешает трубку и сообщает, что ожидает ресурс для завершения действия.

Что мне нужно сделать, чтобы заставить это работать через позднюю привязку?Я пытался добавить значение, не устанавливая его, но не знал, что должно произойти.Я уверен, что это как-то связано с тем, что документ не нужно устанавливать одинаково с переменной, но я не уверен, как ...

Любая помощь очень ценится!

Function AddRemoveWatermark()
    'Word Variables
    Dim wrdApplication As Object
    Dim wrdDocument As Object

    Set wrdApplication = CreateObject("Word.Application")

    Dim strDocumentName As String
    Dim strPath As String
    Dim strBBPath As String
    Dim lngCount As Long
    Dim fso As Object

    strBBPath = "C:\Users\" & (Environ$("Username")) & "\AppData\Roaming\Microsoft\Document Building Blocks\1033\" & lngMicrosoftVersion & "\Built-In Building Blocks.dotx"
    Set fso = CreateObject("Scripting.FileSystemObject")

    ' Open the file dialog
    With Application.FileDialog(1)  'msoFileDialogOpen
        .AllowMultiSelect = True
        .Show

        'Set wrdApplication = New Word.Application
        AddRemoveWatermark = .SelectedItems.Count

        ' Display paths of each file selected
        For lngCount = 1 To .SelectedItems.Count
            strPath = .SelectedItems(lngCount)
            Set wrdDocument = wrdApplication.Documents.Open(strPath)

            strDocumentName = wrdDocument.FullName 'Record the document name
            wrdApplication.Templates.LoadBuildingBlocks
        Next lngCount
    End With
End Sub

1 Ответ

0 голосов
/ 06 марта 2019

Вот код.

Я пропустил переменную BBPath и объект fso, так как он не использовался после их инициализации.

Sub OpenWordDocsFromExcelLateBinding()

    ' Declare objects
    Dim wrdApplication As Object
    Dim wrdDocument As Object

    ' Declare other variables
    Dim wrdDocumentFullPath As String
    Dim wrdDocumentName As String
    Dim documentCounter As Integer

    ' Check if Word is already opened
    On Error Resume Next

    Set wrdApplication = GetObject(, "Word.Application")

    If Err.Number <> 0 Then
        ' Open a new instance
        Set wrdApplication = CreateObject("Word.Application")
        wrdApplication.Visible = True
    End If

    ' Reset error handling
    Err.Clear
    On Error GoTo 0

    ' Open file dialog
    With Application.FileDialog(1)  'msoFileDialogOpen
        .AllowMultiSelect = True
        .Show

        'Set wrdApplication = New Word.Application
        documentCounter = .SelectedItems.Count

        ' For each document selected in dialog
        For documentCounter = 1 To .SelectedItems.Count

            ' Get full path and name of each file selected
            wrdDocumentFullPath = .SelectedItems(documentCounter)
            wrdDocumentName = Mid(.SelectedItems(documentCounter), InStrRev(.SelectedItems(documentCounter), "\") + 1)

            ' Check if document is already opened
            On Error Resume Next

            Set wrdDocument = wrdApplication.documents(wrdDocumentName)

            If Err.Number <> 0 Then
                ' Open word document
                Set wrdDocument = wrdApplication.documents.Open(wrdDocumentFullPath)
            End If

            ' Reset error handling
            Err.Clear
            On Error GoTo 0

        Next documentCounter

    End With

    ' This extra step is only because OP (Original Poster) had it in the question
    wrdApplication.Templates.LoadBuildingBlocks


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