Excel VBA: Как использовать ListTemplates в Excel для управления Word? - PullRequest
0 голосов
/ 13 декабря 2011
Sub test()

Dim wrdApp As Word.Application
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Dim wrdDoc As Word.Document
Set wrdDoc = wrdApp.Documents.Add

Dim wrdTbl As Word.Table
Set wrdTbl = wrdDoc.Tables.Add(Range:=wrdDoc.Range, NumRows:=6, NumColumns:=1)

With wrdTbl

.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
.Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
.Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
.Borders(wdBorderRight).LineStyle = wdLineStyleSingle
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
.Borders(wdBorderVertical).LineStyle = wdLineStyleSingle

For r = 1 To 6
    .Cell(r, 1).Range.Text = ActiveSheet.Cells(r, 1).Value
Next r
End With

' Dim temp3 As ListGalleries
For r = 1 To 6 Step 2
Set temp3 = wrdApp.ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1)
With temp3
    .NumberFormat = "%1."
    .TrailingCharacter = wdTrailingTab
    .NumberStyle = wdListNumberStyleArabic
    .NumberPosition = CentimetersToPoints(0.63)
    .Alignment = wdListLevelAlignLeft
    .TextPosition = CentimetersToPoints(1.27)
    .TabPosition = wdUndefined
    .StartAt = r
End With
Dim rng As Range
Set rng = wrdDoc.Range(Start:=wrdDoc.Range.Rows(1).Range.Start, End:=wrdDoc.Range.Rows(6).Range.End)
rng.ListFormat.ApplyListTemplate ListTemplate:=temp3
Next r

End Sub

Приведенные выше коды хорошо работают в Word VBA, но не в Excel. Не знаю, почему так сложно использовать ListGalleries в Excel для управления Word ... Нашли миллионы записей в интернете, но вряд ли могли их найти. Может ли кто-нибудь помочь немного? Я в отчаянии ... Почти нулевое онлайн-покрытие на Word VBA ...

1 Ответ

1 голос
/ 13 декабря 2011

В Excel нужно добавить ссылку на объектную модель Word:

В редакторе макросов (Alt + F11) выберите меню «Инструменты» и нажмите «Ссылки ...». Установите флажок рядом с «Библиотека объектов Microsoft Word». Нажмите «ОК». Теперь попробуйте снова запустить макрос.

Это должно привести тебя почти туда.

Я обнаружил несколько ошибок, которые могут быть проблемами совместимости. На какой версии офиса вы работаете? Я тестирую все это в Office 2010.

Что мне пришлось изменить, чтобы заставить его работать (по крайней мере, я так думаю, не знаю, чего именно вы пытаетесь достичь с помощью этого последнего цикла):

Set rng = wrdDoc.Range(Start:=wrdTbl.Rows(1).Range.Start, End:=wrdTbl.Rows(6).Range.End)

^ Изменены параметры настройки диапазона, чтобы вся таблица была правильно обнаружена (не уверен, что это именно то, что вам нужно, потому что он вызывается каждый раз при запуске цикла).

rng.ListFormat.ApplyListTemplate ListTemplate:=wrdApp.ListGalleries(wdNumberGallery).ListTemplates(1)

^ Параметр ListTemplate ожидается как объект ListTemplate. Вы устанавливаете temp3 для объекта ListLevel, который содержится в шаблоне ListTemplate. Опять же, не уверен, что это то, чего вы пытаетесь достичь, но в соответствии с документацией Office 2010 именно так и должно быть.

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