如何在SQL提示中为MailMerge选择是?

时间:2016-11-25 20:32:37

标签: excel vba excel-vba mailmerge

我一直试图“绕过”使用Excel文档MailMerge Word文档时出现的Select From Sheet1$警报。

我尝试保存每个文档“没有附加数据源,但修改每个文档中的VBA代码以执行相应的OpenDataSource”,如excel VBA to Automatically select Yes when prompted during mail merge中所述

但是Word仍然要求选择Sheet1$

此外,DisplayAlerts=0对我不起作用。我猜测就像@Ashton Sheets一样,“我在安置时遇到了问题。当我设置wdDoc.DisplayAlerts = 0之前设置wdDoc = GetObject(wdInputName, "Word.document")它显然不起作用,因为wdDoc没有设置。但是如果我把它紧跟在线之后就太晚了,因为这个词只是那么打开而且恰好是消息出现的时候 - 所以它太“太晚了”,如下所述 How to use VBA to say 'Yes' to any SQL prompts in word?

此代码的想法是避免用户可能出现的任何错误。因此,必须从操作员那里获得最少量的“点击”。包括MsgBox s ...

提及我使用 Office 2007 对此进行编程也很重要。 HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word\Options不是一个选项,因为有几个用户和计算机将使用该代码。

以下是代码示例:

Option Explicit  
Sub wrd()  

Dim name As String  
Dim wrdapp As Word.Application  
Dim wrddoc As Word.Document  

Set wrdapp = CreateObject("word.application")  
wrdapp.Visible = True  
'wrdapp.DisplayAlerts = False                                                                  

Word.Application.DisplayAlerts = False  
Set wrddoc = wrdapp.Documents.Open("C:\............\3.2_CTO. A.FIN..docx")  

With wrddoc          
   '.Application.DisplayAlerts = wdAlertsNone                                        

    .MailMerge.OpenDataSource ("C:\.......\3.1_Base de datos_FIN.xlsx")      
    .MailMerge.HighlightMergeFields = True  
    .MailMerge.ViewMailMergeFieldCodes = False  
    .MailMerge.DataSource.ActiveRecord = wdLastDataSourceRecord  
name = Hoja14.Range("a2")  
.SaveAs ("C:\...........\Clientes\Persona Física\Cto. " & (tipo) & "# " & (name) + ".docx")  
       wrdapp.Quit  
       Set wrddoc = Nothing  
       Set wrdapp = Nothing  

Application.DisplayAlerts = True  
End With  

End Sub 

3 个答案:

答案 0 :(得分:0)

.DisplayAlerts = False

DisplayAlerts是一个布尔表达式,而不是第一个。此外,如果您提供代码片段,它将帮助我们所有人更好地解决问题。

您也可以尝试.EnableEvents = False。通常这适用于“保存更改”提示,但它也可能适用于您的情况。同样,代码引用在这种情况下会有所帮助。

编辑:看到您的代码后,我会尝试将此SQLStatement添加到您的.MailMerge.OpenDataSource对象中:

SQLStatement:="SELECT * FROM Sheet1$"

示例:

.MailMerge.OpenDataSource "C:\.......\3.1_Base de datos_FIN.xlsx",_
      SQLStatement:="SELECT * FROM 'Sheet1$'"

Credit where credit is due.

答案 1 :(得分:0)

我同意

.DisplayAlerts = False

更容易阅读
.DisplayAlerts = 0

但两者意味着相同

答案 2 :(得分:0)

终于做到了。

代码最终如下:

'After defining variables and opening word app and word doc:

.MailMerge.OpenDataSource "C:\...\3.1_Base de        datos.xlsx",_     
LinkToSource:=True, _          
SQLStatement:="SELECT * FROM `Sheet1$`"

.MailMerge.ViewMailMergeFieldCodes = False
.MailMerge.DataSource.ActiveRecord = wdLastDataSourceRecord    
.MailMerge.MainDocumentType = wdNotAMergeDocument

.SaveAs ("E:\_...\Cto. " & (tipo) & "# " & (name) + ".docx")
.Close
 wrdapp.Quit
 Set wrddoc = Nothing
 Set wrdapp = Nothing
'Remember that you need to establish in the VisualBasic Editos
' /Tools/References/Microsoft Word Object Library in order to access
'Word VBA's references.

它无法工作的原因是因为DataBase所在的某个文件夹中的 ReadOnly属性。显然更改文件夹属性并不总是那么简单。所以,对我来说,解决方案是从这些文件夹中删除DataBase并将其存储在新文件夹中 ......

我希望这可能会有用。

感谢@SalvadorVayshun的帮助。