使用ms字VBA宏合并表中的单元格

问题描述 投票:1回答:2

我想在一个单元格中与vba合并,但不能正常工作。

我的代码:

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

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

vba ms-word
2个回答
0
投票

对于excel VBA代码编写器,这是一个常见的概念问题,我们曾经将空白单元格视为空(“”)。但实际上一个看似空白的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


0
投票

尝试改变:

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

至:

If Split(.Cell(i, 2).Range.Text,vbCr)(0) = "" Then
© www.soinside.com 2019 - 2024. All rights reserved.