(Этот вопрос является продолжением , как работать с документом, встроенным в книгу 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