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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ms字VBA宏合并表中的单元格相关的知识,希望对你有一定的参考价值。

我想在一个单元格中与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

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

答案

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

另一答案

尝试改变:

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

至:

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

以上是关于使用ms字VBA宏合并表中的单元格的主要内容,如果未能解决你的问题,请参考以下文章

VBA 如何批量将单元格复制到另一个工作表中

在EXCEL中,如何使用VBA设置单元格内指定字符串格式 三六零问答

使用 MergeArea 检测 VBA Excel 中的合并单元格

无法使用 VBA 粘贴到合并的单元格中

MS Word,VBA,如何选择表格内单元格中的段落?

EXCEL的每个单元格实现一次输入后就无法再更改