Excel VBA:如何在Excel中使用ListTemplates来控制Word?

时间:2011-12-13 11:46:27

标签: vba excel-vba excel

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中运行不正常。 不知道为什么Excel中的ListGalleries如此难以控制Word ... 已经在网上找到了数百万条,但很难找到。 有人可以帮忙吗?我很绝望... 在Word VBA上接近零线上报道......

1 个答案:

答案 0 :(得分:1)

在Excel中,您需要添加对Word对象模型的引用:

在makro编辑器(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设置为ListTemplate中包含的ListLevel对象。同样,不确定这是否是您要完成的任务,但根据Office 2010文档,这应该是它应该如何。