使用MS Word VBA宏合并表中的单元格

时间:2019-04-10 22:40:01

标签: vba ms-word

我想与vba合并在一个单元中,但不起作用。

mycode:

Sub merge()
Dim x As Integer, i As Integer
x = ActiveDocument.Tables(1).Rows.Count
    With ActiveDocument.Tables(1)
      For i = 1 To x + 1
            If .Cell(i, 2).Range.Text = "" Then
            .Cell(Row:=i, Column:=2).merge _
            MergeTo:=.Cell(Row:=i, Column:=3)
            .Borders.Enable = False
            End If      
      Next i
    End With
End Sub

在文档中,我有一个表(五行和三列)。

2 个答案:

答案 0 :(得分:0)

对于excel VBA代码编写器,这是一个常见的概念性问题,我们过去将空白单元格视为空(“”)。但是实际上一个看似空白的Word表单元格包含两个不可见的字符(至少在Word 2007中),即chr(13)Chr(7)。可以使用简单的语句(如

)进行测试
MsgBox Len(.Cell(1, 1).Range.Text)
MsgBox Asc(Right(.Cell(1, 1).Range.Text, 1))
MsgBox Asc(Left(.Cell(1, 1).Range.Text, 1))

为了使您的代码正常工作,可以将其修改为类似的内容

Sub merge()
Dim x As Integer, i As Integer, S As String
x = ActiveDocument.Tables(1).Rows.Count
    With ActiveDocument.Tables(1)
      For i = 1 To x
      S = .Cell(i, 2).Range.Text
      S = Replace(S, Chr(13), "")
      S = Replace(S, Chr(7), "")
            If S = "" Then
            .Cell(Row:=i, Column:=2).merge _
            MergeTo:=.Cell(Row:=i, Column:=3)
            .Borders.Enable = False
            End If
      Next i
    End With
End Sub

或测试行可以修改为

If Len(.Cell(i, 2).Range.Text) = 2 Then

也无法理解为什么在您的代码中要迭代到ActiveDocument.Tables(1).Rows.Count+1,所以在测试中我只使用了For i = 1 To x

答案 1 :(得分:0)

尝试更改:

If .Cell(i, 2).Range.Text = "" Then

收件人:

If Split(.Cell(i, 2).Range.Text,vbCr)(0) = "" Then