Хобрук: Ваш путь к мастерству в программировании

Объединение файлов Docx в Excel с использованием ошибки выполнения VBA 462 Удаленный сервер, затем файл поврежден

Помощь! Было много постов на эту тему, и я пробовал большинство из них, но все равно безрезультатно.

В основном я просто пытаюсь объединить содержимое файлов docx с одинаковыми именами в указанной папке. Каждый файл содержит изображение, 1 файл: 1 изображение. Я получаю сообщение об ошибке, когда запускаю код в первый раз (ошибка 462: компьютер удаленного сервера не существует или недоступен), и он указывает на

ActiveDocument.Range.InsertFile Filename:=myDir & nextFile

Кто-нибудь знает, как обойти это? Пожалуйста. Вот мой код:

Sub Merger()
    Dim firstFileStr As String
    Dim firstFile As String
    Dim nextFileStr As String
    Dim nextFile As String

    Dim xFlag As Boolean
    Dim myDir As String

    myDir = "C:\Users\User\Desktop\MergeFolder\"
    For iCtr = 1 To getRowCount
        firstFileStr = Sheet1.Cells(iCtr, 3).Value
        firstFile = Sheet1.Cells(iCtr, 1).Value

        xFlag = True
        Dim jCtr As Integer
        jCtr = 1

        Do While (xFlag)
            nextFileStr = Sheet1.Cells(iCtr + jCtr, 3).Value
            nextFile = Sheet1.Cells(iCtr + jCtr, 1).Value

            If StrComp(firstFileStr, nextFileStr, vbTextCompare) = 0 Then
                Dim WordApp As Word.Application 'word application
                Dim WordDoc As Word.Document    'word document

                If Not WordApp Is Nothing Then
                    WordApp.Quit
                End If

                Set WordApp = New Word.Application
                Set WordDoc = WordApp.Documents.Open(myDir & firstFile, ConfirmConversions = False, ReadOnly = False)

                Application.ScreenUpdating = False

                ActiveDocument.Range.InsertFile Filename:=myDir & nextFile

                WordDoc.SaveAs Filename:=myDir & "merged " & firstFileStr, FileFormat:=wdFormatDocument
                WordDoc.Close
                WordApp.Quit

                Set WordDoc = Nothing
                Set WordApp = Nothing

                xFlag = True
                jCtr = jCtr + 1
            Else
                xFlag = False
            End If
        Loop
    Next
End Sub

Функция getRowCount просто возвращает число или строки, которые содержит Sheet1. Здесь,

Function getRowCount() As Integer
    Dim rowCount As Integer
    rowCount = 0

    Range("A1").Select
    ' Set Do loop to stop when an empty cell is reached.
    Do While Not IsEmpty(ActiveCell)
        rowCount = rowCount + 1
        ' Step down 1 row from present location.
        ActiveCell.Offset(1, 0).Select
    Loop
    getRowCount = rowCount

End Function

Теперь, когда я запускаю код сразу после предыдущей ошибки и не убивая процессы MS Word в диспетчере задач, я получаю еще одну ошибку Runtime Error 5792 Файл кажется поврежденным. Проверяя только что созданные файлы, кажется, что код

ActiveDocument.Range.InsertFile Filename:=myDir & nextFile

вообще не работал. Файл excel выглядит так (столбец B пуст)

Column    A         B     C 
alpha - 1.docx          alpha  
alpha -2.docx           alpha  
alpha - 3.docx          alpha  
alpha - 4.docx          alpha  
bravo - 1.docx          bravo  
bravo - 5.docx          bravo  
charlie- 2.docx         charlie  
delta - 3.docx          delta  
delta - 5.docx          delta  
epsilon - 9.docx        epsilon  
foxtrot - 1.docx        foxtrot         
merger.xlsm             0 
~$merger.xlsm             0

Предполагается объединить все "Alpha - *.docx" в "Alpha - 1.docx", bravo - 5.docx в bravo - 1.docx и т. д.

16.03.2015

  • Вы уверены, что в этом месте есть файл? C:\Users\User\Desktop... не похоже, что это правильный путь для меня.... 16.03.2015
  • Да, я уверен. Я сам создал файлы и поместил их туда. 17.03.2015

Ответы:


1

Я провел некоторое исследование, и проблема в том, что у вас есть файл слова, открытый только для чтения. Убедитесь, что документ Word закрыт и у вас есть доступ для его открытия с разрешениями на запись.

Вы можете проверить, открыт ли он только для чтения, добавив окно сообщений через некоторое время после открытия файла, но до того, как вы попытаетесь вставить в него что-то:

MsgBox Worddoc.readonly
17.03.2015
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..