2013-04-19 2 views
1

Я ищу оптимизацию и переписывание некоторого кода для циклического объединения слияний, которые запускаются при нажатии команды. Прямо сейчас существует 8 отдельных слияний, которые работают друг за другом. Моя проблема заключается в том, что я запускаю 8 запросов, для которых всем требуется дата начала и окончания, чтобы извлекать информацию из таблицы и передавать ее в документ слияния. Я хотел бы указать дату параметра, например, в поле ввода, а затем передать его во все слияния в цикле.Mail-Merge loop и параметры прохождения запроса

For i = 1 To 1 'will change to 8 :) 

Select Case i 
Case 1 
wordDoc = pathToDocToMerge 
sqlStr = "SELECT * FROM [QUERY - FIRST LETTERS]" 
sqlConex = "QUERY - FIRST LETTERS" 
strExport = "Normal" 
fileout = desktopPath & "\ " & strmonth & " - FIRSTLETTERS.pdf" 
Case 2 
Case 3 
Case 4 
Case 5 
Case 6 
Case 7 
Case 8 
End Select 


    Set objword = GetObject(wordDoc) 

    objword.Application.Visible = False 

    objword.MailMerge.OpenDataSource _ 
    Name:=pathToMDB, _ 
    LinkToSource:=True, _ 
    Connection:=sqlConex, _ 
    sqlstatement:=sqlStr 

    objword.MailMerge.Destination = wdSendToNewDocument 
    objword.MailMerge.Execute 

    If printtopdf = vbYes Then 

    objword.Application.ActiveDocument.ExportAsFixedFormat OutputFileName:= _ 
    fileout _ 
    , ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _ 
    wdExportOptimizeForPrint, Range:=wdExportAllDocument 
    objword.Application.ActiveDocument.close SaveChanges:=wdDoNotSaveChanges 

    Else 

    objword.Application.Options.PrintBackground = False 
    'Print one copy of the letter 
    objword.Application.ActiveDocument.PrintOut 
    'Close Word and do not save the changes 

    End If 

    objword.Application.Quit SaveChanges:=wdDoNotSaveChanges 
    Set objword = Nothing 

Next i 

Я знаю, что параметры могут быть переданы так:

Dim dbs As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim prm As DAO.Parameter 
Dim rst As DAO.Recordset 

Set dbs = CurrentDb 
Set qdf = dbs.QueryDefs("qry_AMIS") 

For Each prm In qdf.Parameters 
    prm = Eval(prm.Name) 
Next prm 

Set rst = qdf.OpenRecordset 

Но я не уверен, как связать это в почтовом слияние, видя, как запрос становится RST. Может ли кто-нибудь пролить свет?

ответ

0

После того, как беглый взгляд на документацию по MailMerge.OpenDataSourcehere, я не понимаю, почему вы не можете просто изменить существующий код ...

sqlStr = "SELECT * FROM [QUERY - FIRST LETTERS]" 

... что-то вроде ...

sqlStr = "SELECT * FROM [QUERY - FIRST LETTERS] WHERE SomeDate=#" & Format(CDate(Me.txtSpecifyDate.Value), "yyyy-mm-dd") & "#" 

... Me.txtSpecifyDate - это текстовое поле в форме, которую вы используете, чтобы предлагать пользователю указать дату.

Смежные вопросы