Диапазон копирования Excel VBA (все ячейки слева) во встроенный документ Word - PullRequest
0 голосов
/ 30 января 2019

(Этот вопрос является продолжением , как работать с документом, встроенным в книгу Excel в интерфейсе приложения Word (вместо на месте). Причина, по которой это необходимо, заключается в том, чтобывозможность сохранить результат в виде независимого документа.)

Проблема, с которой я столкнулся, заключается в том, что некоторые ячейки не соответствуют критериям cell.Offset(0, -3).Text.Таким образом, текст находится не только в одной ячейке с Offset(0, -3), а в Word они должны выглядеть следующим образом:

Legal             John Smith
                  Telephone         +4854132155
                  Email             john.smith@mail.com

В Excel они находятся в отдельных строках.

  • «Правовой» - этов B50.
  • «Джон Смит» в C50.
  • «Телефон» находится в C51.
  • "+ 4854132155" находится в D51.
  • «Электронная почта» находится в C52.
  • "john.smith@mail.com" находится в C52.

Идея состоит в том, чтобы "Case" назывался "table", чтобы код понимал, что он должен копировать всеслева от регистра «таблица» строка за строкой (слово «таблица» находится в столбце E).Вставьте в Word как таблицу и выполните wdAutoFitWindow, чтобы таблица идеально подходила для окна документа Word.

Как выглядят данные в Excel:

   A    B                   C                   D                  E
49    Paragraph with number 1                                    main
48    Ok text is text and it is good to have here.. a lot of     normal
50    Legal             John Smith                               table
51                      Telephone         +4854132155            table 
52                      Email             john.smith@mail.com    table
53    Paragraph with number 2                                    main
54    Text again a lot of text again comes here                  normal

Что не так с текущим кодом: текущий код работает гладко.Однако, как только он достигает строки Excel со словом «таблица» в столбце E, он удаляет все уже вставленные и вставляет только последнюю строку с параметром «таблица».Так что в основном все делает правильно, пока дело «за столом».Тогда в качестве вывода вы получите:

              Email             john.smith@mail.com

2   Paragraph with number                                   
    Text again a lot of text again comes here     

Вместо:

1   Paragraph with number                                   
    Ok text is text and it is good to have here.. a lot of 
    Legal          John Smith                             
                   Telephone         +4854132155              
                   Email             john.smith@mail.com
2   Paragraph with number                                   
    Text again a lot of text again comes here        

Вот часть, которую я пытался реализовать:

Set xlSht = Sheets("Offer Letter")
  For Each cell In xlRng
    wdRng.InsertAfter vbCr & cell.Offset(0, -3).Text
     Select Case LCase(cell.Value)
        Case "title"
          wdRng.Paragraphs.Last.Style = .Styles("Heading 1")
        Case "main"
          wdRng.Paragraphs.Last.Style = .Styles("Heading 2")
        Case "sub"
          wdRng.Paragraphs.Last.Style = .Styles("Heading 3")
        Case "sub-sub"
          wdRng.Paragraphs.Last.Style = .Styles("Heading 4")
        Case "normal"
          wdRng.Paragraphs.Last.Style = .Styles("Normal")
        Case "contact"
          wdRng.Paragraphs.Last.Style = .Styles("Contact")
          Case "attachment"
          wdRng.Paragraphs.Last.Style = .Styles("Attachment")
          Case "table"

                  xlSht.Range(cell.Offset(0, -3), cell.Offset(0, -1)).Copy
     wdRng.PasteExcelTable False, False, False

      wdRng.Tables(1).AutoFitBehavior wdAutoFitWindow

    End Select
  Next cell

1 Ответ

0 голосов
/ 31 января 2019

Похоже, вы должны использовать:

  With wdRng
    .Paragraphs.Last.Range.PasteExcelTable False, False, False
    .Tables(.Tables.Count).AutoFitBehavior wdAutoFitWindow
    .Tables(.Tables.Count).Range.Style = "Normal"
  End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...