Как исключить диалоговое окно: разделители записи заголовка - PullRequest
0 голосов
/ 19 марта 2019

Я хотел бы делать автоматические рассылки в Word, где я могу изменить f.ex. <<value1>> на "Ани". Поэтому, когда я пытаюсь подключиться к своей базе данных, она показывает мне диалоговое окно исключения: разделители записей заголовка. Наш проект требует, чтобы это было полностью автоматизировано, поэтому я не хочу это диалоговое окно. Как я могу устранить это автоматически?

Это моя база данных:

"value1","value2";
"Anna2","Marek1";

Это мой VB:

Sub TestMacro()

ActiveDocument.MailMerge.OpenDataSource Name:= _
   "D:\Users\anna\Desktop\test2.txt", ConfirmConversions:=False, _
    ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
    PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
    WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
    Connection:="", SQLStatement:="", SQLStatement1:="", SubType:= _
    wdMergeSubTypeOther
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
    , Text:="""value1"""
End Sub

enter image description here

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Вы можете полностью избежать этой проблемы, отредактировав источник данных в формате, который Word автоматически распознает. Попробуйте:

Sub Demo()
Application.ScreenUpdating = False
Const StrSrc As String = "D:\Users\anna\Desktop\test2.txt"
Documents.Open StrSrc, False, False, False
With ActiveDocument
  With .Range.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchWildcards = False
    .Text = ""","""
    .Replacement.Text = Chr(34) & vbTab & Chr(34)
    .Execute Replace:=wdReplaceAll
    .Text = ";^p"
    .Replacement.Text = "^p"
    .Execute Replace:=wdReplaceAll
  End With
  .Close True
End With
With ActiveDocument
  .MailMerge.OpenDataSource Name:=StrSrc, ConfirmConversions:=False, _
    ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
    PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
    WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
    Connection:="", SQLStatement:="", SQLStatement1:="", SubType:= _
    wdMergeSubTypeOther
  .Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField, Text:="""value1"""
End With
Application.ScreenUpdating = True
End Sub
0 голосов
/ 20 марта 2019

Насколько я помню, он должен работать, дублируя первую строку с именами полей:

"value1","value2"
"value1","value2"
"Anna2","Marek1"

Обратите внимание, что для Word вы также должны использовать новую строку в качестве разделителя записей, а не точку с запятой или что-то еще.

...