Для разработчиков кодов 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