Как использовать поле MailMerge в качестве условия для удаления строки таблицы в Word?Нужен код VBA - PullRequest
0 голосов
/ 07 июня 2019

Создание счета / письма:

Это попытка создания счета в Excel для автоматизации рабочего процесса.

Я использовал MailMerge для добавления полей из таблиц Excel в Word. У меня есть 3 отдельные таблицы в Word, каждая с разным количеством строк. В строках с 1 по n-1 имеется 4 столбца, а в n-й строке 2 столбца. Я хотел бы использовать макрос для удаления:

  1. вся таблица, если значение ячейки (n, 2) равно 0 («n» - последняя строка таблицы, «0» - поле MailMerge со значением «0.00»).
  2. строка, если значение ячейки (i, 4) равно 0 (1 <"i" <n, "0" - поле значения MailMerge "0.00"). </li>
    Sub DeleteEmptyTablerowsandcolumns()
        Application.ScreenUpdating = False
        Dim Tbl As Table, cel As Cell, i As Long, n As Long
        With ActiveDocument
            For Each Tbl In .Tables
                n = Tbl.Rows.Count
                m = Tbl.Range.Rows(n).Cells.Count
                If (Tbl.Cell(n, 2).Range.Text = "0.00") Then
                    Tbl.Delete
                    Selection.TypeBackspace
                Else: For i = n - 1 To 2 Step -1
                        If Len(Tbl.Cell(i, 4).Range.Text) <= 2 Then
                            Tbl.Rows(i).Delete
                        End If

                      Next i
                End If
            Next Tbl
        End With
        Application.ScreenUpdating = True
        End Sub

В данный момент я не могу настроить таргетинг значений ячеек на поля MailMerge, чтобы код работал. Весь код будет здорово получить. Я предполагаю, что решение тривиально, но все еще недоступно. Заранее спасибо!

1 Ответ

0 голосов
/ 08 июня 2019

Вы делаете вывод, что используете mailmerge, но, если это так, в выводе не будет полей слияния после завершения слияния.Поэтому тот факт, что вы все еще находите поля слияния, предполагает, что вы в большинстве случаев делаете предварительный просмотр почтовых рассылок.Попробуйте следующее, которое завершает слияние, затем выполняет необходимую обработку.Вы можете запустить код вручную, как вы, очевидно, делали, или выбрав «Готово и объединить»> «Редактировать отдельные документы».

Sub MailMergeToDoc()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
ActiveDocument.MailMerge.Execute
For Each Tbl In ActiveDocument.Tables
  With Tbl
    If Split(.Range.Cells(.Range.Cells.Count).Range, vbCr)(0) = "0.00" Then
      .Delete
    Else
      For r = .Rows.Count - 1 To 2 Step -1
        If Split(.Cell(r, 4).Range.Text, vbCr)(0) = "0.00" Then .Rows(r).Delete
      Next r
    End If
  End With
Next Tbl
Application.ScreenUpdating = True
End Sub

В кодированном виде макрос предполагает, что проверяемые ячейки содержат «0,00»;если это не то, что они содержат после слияния, измените код соответствующим образом.

...