使用Excel宏调整合并列的Word表格的右边缘位置

使用Excel宏调整合并列的Word表格的右边缘位置,excel,ms-word,vba,Excel,Ms Word,Vba,我正在编写一个宏,用于格式化和提取大量word文档中的信息,这些文档中都有一个表。问题是这个表有很多行,每行有1、2或3列,我需要确保表的右边缘总是相同的宽度 我想在VBA代码中复制的实际行为是,在word中拖动标尺栏上的小正方形(表示表格的右边缘)以调整所有行的表格右边缘。但是,当我尝试录制宏时,它会生成以下代码行,这不适用于具有合并列的表: Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=501.3, RulerStyle:=

我正在编写一个宏,用于格式化和提取大量word文档中的信息,这些文档中都有一个表。问题是这个表有很多行,每行有1、2或3列,我需要确保表的右边缘总是相同的宽度

我想在VBA代码中复制的实际行为是,在word中拖动标尺栏上的小正方形(表示表格的右边缘)以调整所有行的表格右边缘。但是,当我尝试录制宏时,它会生成以下代码行,这不适用于具有合并列的表:

    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=501.3, RulerStyle:= _
    wdAdjustNone
接下来,我尝试使用以下代码显式地针对第一行。这是可行的,但它只调整了第一行的宽度-所有其他行都没有改变:

    wdApp.Documents(myDoc).Tables(1).Cell(1, 1).SetWidth ColumnWidth:=501.3, RulerStyle:=_ 
    wdAdjustNone
然后我使用了.width属性,而不是.setwdith属性,但它们的行为似乎是一样的。我甚至尝试了所有四个.setwidth RulerStyle参数,但它们的行为都相同

最后,在挫折中,我决定遍历表中的所有行,并根据需要调整最右边的列的大小,以便整行是我想要的501.3像素。这需要做一些工作,因为我无法找到一种方法来判断给定行上有多少列。我最终依靠被困的错误来解决这个问题——见下文。当第4行上没有足够的列时,第4行将出错,因此我只需减少I变量并重试,直到没有错误:

On Error GoTo BadExit
    For row = 1 To wdApp.Documents(myDoc).Tables(1).Rows.count
        i = 3
        If wdApp.Documents(myDoc).Tables(1).Cell(row, i).PreferredWidth <> 1501.3 Then
            If i = 3 Then
                wid = 501.3 - wdApp.Documents(myDoc).Tables(1).Cell(row, 2).Width - wdApp.Documents(myDoc).Tables(1).Cell(row, 1).Width
                wdApp.Documents(myDoc).Tables(1).Cell(row, i).Width = wid
            ElseIf i = 2 Then
                wid = 501.3 - wdApp.Documents(myDoc).Tables(1).Cell(row, 1).Width
                wdApp.Documents(myDoc).Tables(1).Cell(row, i).Width = wid
            Else
                wid = 501.3
                wdApp.Documents(myDoc).Tables(1).Cell(row, i).Width = wid
            End If

        End If

        GoTo SafeExit
BadExit:
        If i = 3 Then
            i = 2
            Resume
        ElseIf i = 2 Then
            i = 1
            Resume
        End If

SafeExit:
    Next row
错误转到BadExit时

对于行=1到wdApp.Documents(myDoc).Tables(1).Rows.count
i=3
如果wdApp.Documents(myDoc).Tables(1).Cell(row,i).PreferredWidth 1501.3,则
如果i=3,那么
wid=501.3-wdApp.Documents(myDoc).表格(1).单元格(第2行).宽度-wdApp.Documents(myDoc).表格(1).单元格(第1行).宽度
wdApp.Documents(myDoc).Tables(1).Cell(行,i).Width=wid
如果i=2,则
wid=501.3-wdApp.Documents(myDoc).表格(1).单元格(行,1).宽度
wdApp.Documents(myDoc).Tables(1).Cell(行,i).Width=wid
其他的
wid=501.3
wdApp.Documents(myDoc).Tables(1).Cell(行,i).Width=wid
如果结束
如果结束
转到安全出口
坏出口:
如果i=3,那么
i=2
简历
如果i=2,则
i=1
简历
如果结束
安全出口:
下一排
这段代码运行时没有错误,但是最终的宽度似乎永远不会是501.3-它的变化似乎不一致(我通过使用带有.width属性的msgbox确认了这一点),而且,有时右边缘没有对齐!具有1列的行可能比具有2列的行突出一点,等等,并且此代码非常慢

有谁能帮我找到一个简单的解决方案来复制手动使用鼠标移动标尺上的右方形,将word表格中每行的宽度调整为特定值的行为?非常感谢你的帮助

提前感谢,
-乔希