我想与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
在文档中,我有一个表(五行和三列)。
答案 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