Не удалось установить FSO = CreateObject с ExceltoWord! Добавить в - PullRequest
0 голосов
/ 31 мая 2019

Я использую надстройку Excel ExcelWord для автоматического заполнения документа Word с листа Excel. Я следовал инструкциям оригинального разработчика здесь .

Я использую параметры «Я создал общие индикаторы закладок в Word» и «Я помещаю индикаторы закладок непосредственно в ячейки - влево» с опцией «Удалить документ Word» в конце. При сохранении настроек появляется ошибка MS Visual Basic

Ошибка времени выполнения '429:' Компонент ActiveX не может создать объект.

Я попытался переключить различные форматы листа Excel и Word Doc и Word Template, а также оставить Word Doc закрытым и открытым при сохранении конфигурации.

Public Function validateFileFolderSelection(ByVal fName As String, fType As String, src As String, bFolderOnly As Boolean) As Boolean

'Dim FSO As FileSystemObject 'early binding
Dim FSO As Object 'late binding


    'Set FSO = New FileSystemObject 'early binding
    Set FSO = CreateObject("Scripting.FileSystemObject") 'late binding

    validateFileFolderSelection = True

    'Test for word or excel filename & that the file exists
    If Trim(fName) = vbNullString Then
        validateFileFolderSelection = False
    ElseIf bFolderOnly Then
        If Not FSO.FolderExists(fName) Then
            validateFileFolderSelection = False
        End If
    ElseIf Not FSO.fileExists(fName) Then
            validateFileFolderSelection = False
    End If

End Function

VBA отображает ошибку на Set FSO = CreateObject("Scripting.FileSystemObject") 'late binding.

1 Ответ

0 голосов
/ 31 мая 2019

Если вы добавите ссылку на Microsoft Scripting Runtime (VBE> Инструменты> Ссылки ...), то включите код «Раннее связывание», который вы в настоящее время закомментировали, и ваш код будет работать.

Чтобы установить ссылку в редакторе Visual Basic (VBE), перейдите в меню «Инструменты» и выберите функцию «Ссылки».

enter image description here

Затем в открывшемся диалоговом окне «Ссылки» прокрутите, пока не найдете Microsoft Run Scripting Runtime, отметьте его и нажмите кнопку «ОК».

enter image description here

В текущемС помощью кода удалите метки комментариев в двух строках, помеченных как «Раннее связывание», и примените метки комментариев в двух строках, помеченных как «Позднее связывание».

Ниже приведено изменение исходного ответа, поскольку на основе комментариев, у вас по-прежнему возникают проблемы с использованием кода FSO (объект файловой системы) в вашей системе.

Вместо использования FSO следующая подпрограмма VBA определит, существует ли указанный каталог или файл.,Подпрограмма называется «DoesItExist», и я включил пример подпрограммы, которая демонстрирует, как вызывать процедуру «DoesItExist».

Sub MyTestRoutine()
    'this first example tests if a specific file exists
    'including a "False" setting for the dirOnly variable is optional
    If DoesItExist("C:\Users\<userID>\Documents\Test\Mydoc.docx") Then
        Debug.Print "File Exists"
    Else
        Debug.Print "File Does Not Exist"
    End If
    'the next example tests if a directory exists,
    'the "True" setting for the dirOnly variable is required for directories
    If DoesItExist("C:\Users\<userID>\Documents\Test", True) Then
        Debug.Print "Directory Exists"
    Else
        Debug.Print "Directory Does Not Exist"
    End If
End Sub

Public Function DoesItExist(ByRef pathName As String, Optional ByRef dirOnly As Boolean) As Boolean
    'this routine checks if a file or folder exists on the system
    'it runs on either a Windows based version of Office or a Mac version
    'if Mac Office then only for the Office 365, 2016, 2019, or later)
    Select Case dirOnly
        Case True
            If Dir(pathName, vbDirectory) = vbNullString Then
                DoesItExist = False
            Else
                DoesItExist = True
            End If
        Case False
            If Dir(pathName, vbNormal) = vbNullString Then
                DoesItExist = False
            Else
                DoesItExist = True
            End If
    End Select
End Function
...