从Excel VBA创建和格式化Word表时遇到麻烦

时间:2019-06-19 13:06:22

标签: excel vba ms-word

我是MS Word VBA的新手,在处理Excel中的Word文档时遇到了麻烦。

到目前为止,最大的问题是:在Word VBA中工作的代码只是在Excel中不工作。非常奇怪和令人沮丧。

下面是代码:

Sub abc()
Dim MSWordApp As Object, MSWordDoc As Object

    Set MSWordApp = CreateObject("Word.Application")
    Set MSWordDoc = MSWordApp.Documents.Add
    MSWordApp.Visible = True
    With MSWordDoc
        With .PageSetup
            .TopMargin = Application.CentimetersToPoints(0.51)
            .BottomMargin = Application.CentimetersToPoints(0.51)
            .LeftMargin = Application.CentimetersToPoints(0.51)
            .RightMargin = Application.CentimetersToPoints(0.51)
        End With
        .Tables.Add Range:=.Range(0, 0), NumRows:=3, NumColumns:=2
        With .Tables(1)
            .Rows.Alignment = wdAlignRowCenter
            .Rows.HeightRule = wdRowHeightExactly
            .Rows.Height = Application.CentimetersToPoints(9.55)
            .Columns.PreferredWidthType = wdPreferredWidthPoints
            .Columns.PreferredWidth = Application.CentimetersToPoints(9.9)
        End With
    End With

    MSWordApp.Activate
    Set MSWordApp = Nothing
    Set MSWordDoc = Nothing
End Sub

这些代码在MS Word中可以很好地工作(当然,当我在MS Word中使用它们时,我已经更改了对象的名称等)。

但是,Excel中发生了奇怪的事情:

1)“ .Rows.Alignment = wdAlignRowCenter”根本不起作用。 Word表的Rows.Alignment仅保留为默认值。

2)“ .Columns.PreferredWidthType = wdPreferredWidthPoints”在Excel中导致错误。在Word中工作正常;虽然在Excel中,每次我调用此属性时,都会弹出一个空错误消息。不知道为什么...

2 个答案:

答案 0 :(得分:0)

从Excel VBA控制Microsoft Word时,需要添加对Microsoft Word对象库的引用。为此,请确保您位于VBA窗口中的模块上,然后单击Tools,然后单击References...。在弹出窗口中,向下滚动以找到“ Microsoft Word XX.X对象库”。版本#会根据您安装的版本而有所不同。

Add reference to Word object library

如果未在列表中显示它,则可以在硬盘上找到它,方法是单击“浏览...”并导航到安装了MS Word的程序文件文件夹,然后选择名为“ MSWORD”的文件.OLB”。

答案 1 :(得分:0)

由于代码是为后期绑定而编写的,因此不应添加对Word的引用。相反,您需要定义或替换您正在使用的Word常量。例如,代替:

.Rows.Alignment = wdAlignRowCenter
.Rows.HeightRule = wdRowHeightExactly

您可以使用:

.Rows.Alignment = 1  '1=wdAlignRowCenter
.Rows.HeightRule = 2 '2=wdRowHeightExactly

或者,在之后:

Dim MSWordApp As Object, MSWordDoc As Object

您将插入:

Const wdAlignRowCenter as Long = 1: Const wdRowHeightExactly as Long = 2

否则,如果要设置对Word的引用,则应使代码与早期绑定始终保持一致。例如,代替:

Dim MSWordApp As Object, MSWordDoc As Object

    Set MSWordApp = CreateObject("Word.Application")
    Set MSWordDoc = MSWordApp.Documents.Add

您可以使用:

Dim MSWordApp As New Word.Application, MSWordDoc As Word.Document

    Set MSWordDoc = MSWordApp.Documents.Add