显示一个列表以选择word文档,然后宏会将excel中的信息合并到word中

显示一个列表以选择word文档,然后宏会将excel中的信息合并到word中,excel,vba,Excel,Vba,这是我要与word合并的宏。 我意识到我需要做更多的事情,在那里我会得到一个提示,提示我从一系列可用的word文档中选择要合并的工作表(xx1、xx2…xx7)。共有6个word文档,其中2个我需要另一个常用word文档才能打开(xx7)。当我选择word文档xx3或xx6时,我需要打开2个word文档。如果我选择了xx3 word文档,它将打开xx3和xx7;如果我选择了xx6 word文档,它将打开xx6和xx7。同时,xx1、xx2、xx4、xx5将打开一个word文档。 我不想用另一个单

这是我要与word合并的宏。 我意识到我需要做更多的事情,在那里我会得到一个提示,提示我从一系列可用的word文档中选择要合并的工作表(xx1、xx2…xx7)。共有6个word文档,其中2个我需要另一个常用word文档才能打开(xx7)。当我选择word文档xx3或xx6时,我需要打开2个word文档。如果我选择了xx3 word文档,它将打开xx3和xx7;如果我选择了xx6 word文档,它将打开xx6和xx7。同时,xx1、xx2、xx4、xx5将打开一个word文档。 我不想用另一个单词document name重复这个宏7次。我有没有可能在一个宏中涵盖这一点?多谢各位

Sub RunMergeAttachBOccupantProtection()

   Const wdFormLetters = 0
   wdOpenFormatAuto = 0
   Const wdSendToNewDocument = 0
   wdDefaultFirstRecord = 1
   wdDefaultLastRecord = -16

    Dim wd As Object
    Dim wdocSource As Object

    Dim strWorkbookName As String

    On Error Resume Next
    Set wd = GetObject(, "Word.Application")
    If wd Is Nothing Then
        Set wd = CreateObject("Word.Application")
    End If
    On Error GoTo 0

    Set wdocSource = wd.Documents.Open("R:\Grants\AttachmentBOccupantProtection.docx")

    strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name

    wdocSource.MailMerge.MainDocumentType = wdFormLetters

    wdocSource.MailMerge.OpenDataSource _
            Name:=strWorkbookName, _
            AddToRecentFiles:=False, _
            Revert:=False, _
            Format:=wdOpenFormatAuto, _
            Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _
            sqlstatement:="SELECT * FROM [" & ActiveSheet.Name & "$]"
    With wdocSource.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With

    wd.Visible = True
    wdocSource.Close SaveChanges:=False

    Set wdocSource = Nothing
    Set wd = Nothing

End Sub

修改您的过程以接受要打开的文档的名称,然后为每个需要打开的文档调用该名称一次。与此类似:

Sub RunMergeAttachBOccupantProtection(DocName as String)
  .
  .
  .
  Set wdocSource = wd.Documents.open("R:\Grants\" & DocName & ".docx")
  .
  .
  .
End Sub
然后,您可以使用以下内容运行快速测试:

Sub TestDriver()

  Dim MyDoc as String

  MyDoc = "XX1"

  if MyDoc = "xx3" or MyDoc = "xx6" then
    RunMergeAttachBOccupantProtection("xx3")
    RunMergeAttachBOccupantProtection(MyDoc)
  Else
    RunMergeAttachBOccupantProtection(MyDoc)
  End If

End Sub

但是,如何获得可以从中选择的文档列表,然后宏打开该特定选项,如果是xx3或xx6,则打开xx3和xx7或xx6和xx7?