Копировать диапазон Excel во встроенный документ Word, пропуская "" (пустые ячейки) - PullRequest
0 голосов
/ 31 января 2019

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

Проблема в том, что у меня в Excel динамическое содержимое.В ячейках столбца EI фактически есть формула, например E55 =IF(B55="";"";"normal") E55 также =IF('Technical!B55'="";"";'Technical!B55').Мой текущий код не понимает, что, например, ячейка B57 пуста и думает, что она должна быть напечатана в MS Word.Он не вставляет никакого содержимого в MS Word, но вставляет, например, маркеры, которые предварительно определены для стиля в MS Word.Как это остановить?Я могу сделать, например, =IF(B55="";"empty";"normal"), чтобы ненужные строки были помечены словом «пусто», если это все равно поможет.

   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
55    Text again a lot of text again comes here                  normal
56    Text again a lot of text again comes here                  normal
57    =IF('Technical!B57'="";"";'Technical!B57')                 =IF(B57="";"";"normal")            
58    =IF('Technical!B58'="";"";'Technical!B58')                 =IF(B58="";"";"normal")

Мой текущий код:

With objWord
  Set wdRng = .Range.Characters.Last
  Set wdUndo = .Application.UndoRecord
  wdUndo.StartCustomRecord ("Doc Data")
  Set xlSht = Sheets("Other Data")
  'Here comes Header
  .Bookmarks("Date").Range.Text = xlSht.Range("AT2").Value
  .Bookmarks("DocumentName").Range.Text = xlSht.Range("AX13").Value
Set xlSht = Nothing

Set xlSht = Sheets("Pricelist")
  For Each cell In xlRng
    wdRng.InsertAfter vbCr & cell.Offset(0, -4).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 "technical"
          wdRng.Paragraphs.Last.Style = .Styles("Technical")
          Case "topic"
          wdRng.Paragraphs.Last.Style = .Styles("Topic")
          Case "signature"

           Sheets("Signatures").Range("M7:N7").Copy

  With wdRng

    .Paragraphs.Last.Range.PasteSpecial (wdPasteBitmap)

  End With

          Case "pagebreak"
     With wdRng
     .Paragraphs.Last.Range.InsertBreak Type:=wdPageBreak
     End With
          Case "table"

          xlSht.Range(cell.Offset(0, -4), cell.Offset(0, -1)).Copy

  With wdRng

    .Paragraphs.Last.Range.PasteAndFormat (wdFormatPlainText)

  End With

    End Select
  Next cell
  .SaveAs2 ActiveWorkbook.Path & "\" & _
Sheets("Other Data").Range("AN2").Value & ", " & _
Sheets("Other Data").Range("AN7").Value & "_" & _
Sheets("Other Data").Range("AN8").Value & "_" & _
Sheets("Other Data").Range("AX3").Value & ".docx"

  wdUndo.EndCustomRecord
  Set wdUndo = Nothing
  .Undo
  .Application.Quit False
End With

1 Ответ

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

Иногда хорошо выпить чашку чая и подумать о чем-то другом.У меня возникла идея использовать =IF(B55="";"empty";"normal"), поэтому я получу слово «пустой» в ненужных ячейках.Затем я создал новый Case с именем «empty» и использовал следующий код:

         Case "empty"

  With wdRng

    .Paragraphs.Last.Range.Delete

  End With

Я не знаю, является ли это лучшим решением.По крайней мере, это работает.

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