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