Если вы выполняете это несколько раз, то, возможно, сохраните результат Doc.MailMerge.GetFieldNames () вместо того, чтобы вызывать его каждый раз.
Согласно найденной мной документации, Doc.MailMerge.GetFieldNames () возвращает массив строк.Если это так, попробуйте это:
Dim FieldNames As String() = Doc.MailMerge.GetFieldNames()
If FieldNames.Contains("InvoiceSum") Then Doc.MailMerge.Execute({"InvoiceSum"}, {GetInvoiceSum()})
или, если вы хотите создать метод, попробуйте это:
Private Sub MergeIfExists(FieldName As String, FieldNames As String(), Action As Action)
If FieldNames.Contains(FieldName) Then Doc.MailMerge.Execute({FieldName}, {Action})
End Sub
использование:
Dim FieldNames As String() = Doc.MailMerge.GetFieldNames()
MergeIfExists("InvoiceSum", FieldNames, AddressOf GetInvoiceSum)
Может быть, лучшепередайте Доку также и метод, но я не был уверен в типе, поэтому оставлю это вам.