Макрос слияния: как отправить данные из каждой строки в листе Excel на разные страницы Word? - PullRequest
0 голосов
/ 23 октября 2018

Я работал над макросом, который добавляет данные на страницу в Word в виде метки слияния.Я нашел в Интернете код, который собирает все данные на одной странице Word.Мне было интересно, есть ли способ, чтобы данные из каждой строки в моей электронной таблице Excel могли переходить на разные страницы в Word?Код приведен ниже.

Sub LabelMerge()

   Dim oWord As Word.Application, oDoc As Word.Document
   Dim sPath As String, I As Integer, oHeaders As Range

Application.ScreenUpdating = False

   Set oHeaders = Range("A1").CurrentRegion.Rows(1)
   sPath = ThisWorkbook.FullName
   Set oWord = CreateObject("Word.Application")
   Set oDoc = oWord.Documents.Add
   oWord.Visible = True
   oDoc.MailMerge.MainDocumentType = wdMailingLabels
   oWord.Dialogs(wdDialogLabelOptions).Show
   oDoc.Activate

   With oDoc.MailMerge.Fields

     For I = 1 To oHeaders.Columns.Count
       .Add oWord.Selection.Range, oHeaders.Cells(1, I)
       oWord.Selection.TypeText " "
     Next I

   End With

   oDoc.MailMerge.OpenDataSource sPath
   oWord.WordBasic.mailmergepropagatelabel
   oDoc.MailMerge.ViewMailMergeFieldCodes = False
   oDoc.ActiveWindow.View.ShowFieldCodes = False

   Set oDoc = Nothing
   Set oWord = Nothing

   Application.ScreenUpdating = True

   End Sub

Так выглядят данные до и после запуска кода из редактора VBA.Я довольно новичок в VBA и буду признателен за любую помощь!

Примеры данных в Excel

enter image description here

Ярлыки на Word

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Спасибо за ваши предложения, однако я нашел что-то близкое к тому, что искал, вот ссылка для тех из вас, кому интересно узнать: https://www.youtube.com/watch?v=URF3ikW0Svc

0 голосов
/ 25 октября 2018

Что вам нужно сделать, это создать основной документ mailmerge с одной меткой, содержащей все поля слияния, необходимые для этой метки, а не лист меток, и объединить это с обычным слиянием букв.Создав основной документ mailmerge с одной меткой, вы можете использовать код, подобный следующему:

Sub RunMerge()
'Note: this code requires a reference to the Word object model
Application.ScreenUpdating = False
Dim wdApp As New Word.Application, wdDoc As Word.Document
Dim StrMMSrc As String, StrMMDoc As String
StrMMSrc = ThisWorkbook.FullName
StrMMDoc = ThisWorkbook.Path & "\MailMergeMainDocument.doc"
With wdApp
  .Visible = True
  .DisplayAlerts = wdAlertsNone
  Set wdDoc = .Documents.Open(Filename:=StrMMDoc, AddToRecentFiles:=False, ReadOnly:=True, Visible:=False)
  With wdDoc
    With .MailMerge
      .MainDocumentType = wdFormLetters
      .OpenDataSource Name:=StrMMSrc, ReadOnly:=True, AddToRecentFiles:=False, _
        LinkToSource:=False, Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;" & _
        "Data Source=StrMMSrc;Mode=Read;Extended Properties=""HDR=YES;IMEX=1"";", _
        SQLStatement:="SELECT * FROM `Sheet1$`"
      .Destination = wdSendToNewDocument
      .SuppressBlankLines = True
      .Execute Pause:=False
    End With
    .Close SaveChanges:=False
  End With
  .DisplayAlerts = wdAlertsAll
  .Activate
End With
Set wdDoc = Nothing: Set wdApp = Nothing
Application.ScreenUpdating = False
End Sub

Естественно, вам может понадобиться отредактировать переменную 'StrMMDoc' в соответствии с настройкой и именем документа, и,возможно, отредактируйте оператор SQL:

SQLStatement: = "SELECT * FROM Sheet1$"

для ссылки на правильный лист.

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