Нужно, чтобы ячейки Excel были сохранены в текстовом документе -----> - PullRequest
0 голосов
/ 25 сентября 2019

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

Изображение второйpage 'не вставляется.

Dim wdApp As Object
        Dim wd As Object
        Dim sFil As String

        On Error Resume Next
        Set wdApp = GetObject(, "Word.Application")

        If Err.Number <> 0 Then Set wdApp = CreateObject("Word.Application")

        On Error GoTo 0
        Set wd = wdApp.Documents.Add  ' create a new document
        wdApp.Visible = True
        'change sheet and range below
        ActiveSheet.Range("a1:z43").CopyPicture xlPrinter
        wd.Range.Paste
        wdApp.ActiveDocument.Range(0, 0).InsertBreak Type:=wdSectionBreakNextPage
        wdApp.ActiveDocument.Sections (2)
        ActiveSheet.Range("a43:z76").CopyPicture xlPicture
        wd.Range.Paste

        'wd.SaveAs Filename:="I:\'Files\RKG-COMMS\" & URNa & " - " & URNb & ".doc"
        'wd.Close
        'wd.Quit

только первая страница вставляется, а вторая страница не вставляется и не вставляется.

Вот результат, когда я запускаю - только первая страница

enter image description here

И в дополнение к первой странице это вторая страница, которая должна быть вставлена ​​

enter image description here

1 Ответ

1 голос
/ 26 сентября 2019

Мне сложно проверить, что вы делаете, но логически я считаю, что следующее должно работать, хотя может быть одна проблема (продолжайте читать) ...

Обратите внимание, как этот код использует WordRange объект как цель для нового контента.После вставки неясно, будет ли docRange перед вставленным контентом или будет содержать вставленный контент.Если он содержит вставленный контент, код должен работать.Если это перед вставленным контентом, то следующее изображение появится перед первым.В этом случае повторите строку Set docRange = wd.Content сразу после docRange.Paste.

    Set wd = wdApp.Documents.Add  ' create a new document
    Dim docRange as Object 'Word.Range
    Set docRange = wd.Content
    wdApp.Visible = True
    'change sheet and range below
    ActiveSheet.Range("a1:z43").CopyPicture xlPrinter
    docRange.Paste
    'Go to the end
    docRange.Collapse 0 'wdCollapseEnd
    docRange.InsertBreak Type:=wdSectionBreakNextPage
    ActiveSheet.Range("a43:z76").CopyPicture xlPicture
    docRange.Paste

В ответ на запрос в комментариях о том, как код работает подробно:

Dim docRange as Object 'Word.Range

Объявляет переменную объекта для хранения части документа, с которой работает код.Поскольку код в вопросе, запущенный из Excel, по-видимому, использует поздняя привязка (без ссылки на библиотеку объектов Word), он объявлен как Object.

Если бы использовалось раннее связывание (в проекте кода есть ссылка на библиотеку Word), тогда было бы лучше объявить его As Word.Range.Я включаю тип данных объекта Word (Word.Range) для полноты картины и возможности исследовать объект и его свойства в справке.

Set docRange = wd.Content

Этот создает экземпляр Word.Range объект, содержащий всю основную часть документа (экземпляр wd создается в коде в вопросе к целевому документу Word).

После вставки docRange по-прежнему относится ко всемусодержание документа, включая то, что было вставлено.Если разрыв раздела и второе действие вставки должны быть выполнены немедленно, это удалит содержимое диапазона.(Думайте об этом, как о выделении текста в Word, а затем о наборе текста: то, что было выбрано, заменяется тем, что было напечатано. Чтобы избежать этого, нужно нажать клавишу со стрелкой вправо, прежде чем вводить текст, чтобы новое содержимое соответствовало тому, что было выбрано.)

По этой причине диапазон «свернут» (как при нажатии клавиши со стрелкой).Затем вставляется разрыв раздела и выполняется следующее действие вставки.

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