【问题标题】:Merge cells in table with ms word VBA macro使用 ms word VBA 宏合并表格中的单元格
【发布时间】:2019-04-13 14:59:59
【问题描述】:

我想用 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


    【解决方案1】:

    对于 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

    【讨论】:

      【解决方案2】:

      尝试改变:

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

      到:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 2013-08-10
        • 2019-01-13
        • 1970-01-01
        • 2017-12-08
        相关资源
        最近更新 更多