Объединить ячейки в таблице с макросом MS Word VBA - PullRequest
1 голос
/ 11 апреля 2019

Я хочу объединить в одну ячейку с 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

В документе у меня есть таблица (пять строк и три столбца).

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Попробуйте изменить:

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

до:

If Split(.Cell(i, 2).Range.Text,vbCr)(0) = "" Then
0 голосов
/ 11 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...