excel VBA для автоматического выбора «Да» при появлении запроса во время слияния почты

Я бы хотел, чтобы система была максимально автоматизирована для моих пользователей. Прямо сейчас у меня есть код, который запускается, когда пользователь нажимает кнопку. Код берет данные с намерением применить их к документу Word через слияние.

Все работает как задумано, за исключением того, что всегда появляется сообщение о том, что

При открытии этого документа будет запущена следующая команда SQL:

Выберите * FROM 'TAGS$'

Данные из вашей базы данных будут помещены в документ. Вы хотите продолжить?

Мне нужно сделать это как можно проще, не рискуя тем, что пользователи выберут «Нет» из-за того, что они запутались. Как VBA может автоматически продолжить и принять размещение данных, как если бы они выбрали «Да»?

Я попытался просто использовать следующий код, чтобы заблокировать оповещения в надежде, что по умолчанию будет установлено «Да» и продолжить, но это не сработало.

Application.DisplayAlerts = False

Это то, что у меня есть

Sub RunMailMerge()

    Application.ScreenUpdating = False

    Dim wdOutputName, wdInputName As String
    wdOutputName = ThisWorkbook.Path & "\nametags - " _
        & Format(Date, "d mmm yyyy")
    wdInputName = ThisWorkbook.Path & "\nametags.docx"

    ' open the mail merge layout file
    Dim wdDoc As Object
    Set wdDoc = GetObject(wdInputName, "Word.document")
    wdDoc.Application.Visible = True

    With wdDoc.MailMerge
         .MainDocumentType = wdFormLetters
         .Destination = wdSendToNewDocument
         .SuppressBlankLines = True
         .Execute Pause:=False
    End With

    'Application.ScreenUpdating = True

    'show and save output file
    wdDoc.Application.Visible = True
    wdDoc.Application.ActiveDocument.SaveAs wdOutputName

    ' cleanup
    wdDoc.Close SaveChanges:=False
    'activedoc.Close
    Set wdDoc = Nothing

End Sub

person Ashton Sheets    schedule 02.07.2012    source источник
comment
вы также делаете Application.ScreenUpdating = False?/   -  person Alex Gordon    schedule 03.07.2012
comment
Иногда предупреждающее сообщение открывается за открытой книгой Excel, и мне приходится вручную сворачивать книгу, чтобы выбрать «Да». На самом деле это не работает, пока оно застревает в середине выполнения, ожидая, пока я выберу опцию окна сообщения, поэтому мне нужно нажать Alt + D, чтобы свернуть все, ТОГДА выберите excel и щелкните окно сообщения. Как вы понимаете, это не очень практично. Спасибо за помощь.   -  person Ashton Sheets    schedule 03.07.2012
comment
ScreenUpdating = False не работает. Код выполняется просто отлично, просто не проталкивает окно сообщения, как мне нужно.   -  person Ashton Sheets    schedule 03.07.2012
comment
Пробовали настраивать DisplayAlerts в Word, а не только в Excel?   -  person Tim Williams    schedule 03.07.2012
comment
@Tim Williams - Где и как мне реализовать это в коде? Я изменил исходный пост, чтобы показать код, который я сейчас использую.   -  person Ashton Sheets    schedule 03.07.2012
comment
Если ничего не помогло, перед этим бросьте MsgBox, сказав Уважаемый пользователь, пожалуйста, нажмите OK сейчас, а также в следующем сообщении, с уважением, Эштон.   -  person Jean-François Corbett    schedule 03.07.2012


Ответы (2)


Попробуйте установить свойство DisplayAlerts в Word (если это источник оповещения):

Dim tmp as Long

tmp = wdDoc.Application.DisplayAlerts 

wdDoc.Application.DisplayAlerts = wdAlertsNone
'do the action which causes the prompt
wdDoc.Application.DisplayAlerts = tmp
person Tim Williams    schedule 02.07.2012
comment
+1 Да, это будет работать с небольшой модификацией. wdAlertsNone — словесная константа. Измените его на 0 или объявите это вверху Const wdAlertsNone = 0 Также нам не нужны Application после wdDoc, так как это уже приложение, поэтому wdDoc.DisplayAlerts = 0 будет достаточно. - person Siddharth Rout; 03.07.2012
comment
@Jean-FrançoisCorbett: Да, это логическое значение, но также имеет целочисленный эквивалент 0, -1, -2 в зависимости от того, что установлено в данный момент. (wdAlertsAll -1 , wdAlertsMessageBox -2 , wdAlertsNone 0 ) - person Siddharth Rout; 03.07.2012
comment
Из того, что Эштон использовал другие константы Word, я предположил, что он установил ссылку на библиотеку Word. Это могло быть ошибкой с моей стороны, но в этом случае стоит отметить, что использование их без их определения может привести к проблемам. - person Tim Williams; 03.07.2012
comment
У меня проблема с размещением. Когда я установил wdDoc.DisplayAlerts = 0 ПЕРЕД установкой wdDoc = GetObject(wdInputName, Word.document), это, очевидно, не работает, потому что wdDoc не установлен. Но если я поставлю его сразу после строки, будет слишком поздно, потому что слово открывается только ТОГДА, и именно тогда появляется сообщение, так что уже слишком поздно. - person Ashton Sheets; 03.07.2012
comment
Сначала вы должны создать экземпляр word.application, а затем использовать его для открытия документа. - person Tim Williams; 03.07.2012
comment
@TimWilliams: он использует позднее связывание Dim wdDoc As Object - person Siddharth Rout; 04.07.2012
comment
@Siddharth - я видел это, но он также использует константы Word, не определив их (если только они не определены где-либо еще как глобальные переменные/константы), поэтому, основываясь только на коде, нет окончательной интерпретации. Обратите внимание, ничто не мешает вам одновременно использовать ссылку на Word и, используя объект с поздней привязкой... - person Tim Williams; 04.07.2012

http://support.microsoft.com/kb/825765

Ворд 2013

HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Word\Options

"SQLSecurityCheck"=dword:00000000

Start Registry Editor.
Locate and then click the following registry key:

HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Word\Options
On the Edit menu, point to New, and then click DWORD Value.
Under Name, type:

SQLSecurityCheck
Double-click SQLSecurityCheck.
In the Value data box, type:

00000000
Click OK.

Ворд 2010

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options

"SQLSecurityCheck"=dword:00000000

Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options
On the Edit menu, point to New, and then click DWORD Value.
Under Name, type:
SQLSecurityCheck
Double-click SQLSecurityCheck.
In the Value data box, type:
00000000
Click OK.

Ворд 2007

HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word\Options

"SQLSecurityCheck"=dword:00000000

Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word\Options
On the Edit menu, point to New, and then click DWORD Value.
Under Name, type:
SQLSecurityCheck
Double-click SQLSecurityCheck.
In the Value data box, type:
00000000
Click OK.

Ворд 2003

HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Word\Options

"SQLSecurityCheck"=dword:00000000

Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Word\Options
Click Edit, point to New, and then click DWORD Value.
Under Name, type:
SQLSecurityCheck
Double-click SQLSecurityCheck.
In the Value data box, type:
00000000
Click OK.

Пакет обновления 3 для Word 2002

HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Options

"SQLSecurityCheck"=dword:00000000

Для этого выполните следующие действия:

Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Options
Click Edit, point to New, and then click DWORD Value.
Under Name, type:
SQLSecurityCheck
Double-click SQLSecurityCheck.
In the Value data box, type:
00000000
Click OK.
person Vladislav Rastrusny    schedule 08.04.2014