Если для DisplayAlerts установлено значение False, Excel автоматически выберет параметр «по умолчанию» для всех всплывающих окон *, что для собственных запросов к базе данных является параметром «Выполнить».
Application.DisplayAlerts = False
Не забудьте установить значение True после выполнения запроса.
Это решает проблему автоматического принятия этих windows.
Однако это может вызвать отдельную проблему, не позволяющую пользователям вводить учетные данные, если требуется, и просто отменяет процесс вместо Это может быть решено с помощью обработки ошибок, если требуется. Перед запуском запроса установите обработчик ошибок:
On Error GoTo EnterCredentials
И в конце подпрограммы установите блок обработки ошибок, который повторно включает DisplayAlerts, так что становится доступной необходимая подсказка для ввода пароля. Обратите внимание, что блок обработки ошибок должен использовать «Resume» вместо «Resume Next», так как вы хотите, чтобы Excel снова попытался установить соединение с отображением предупреждений.
В приведенном ниже примере блока обработки ошибок используется логическая переменная bolTriedPassword для отслеживать, была ли ошибка возникла ранее, чтобы отобразить более подходящее сообщение об ошибке для пользователя. (У него также есть имя сервера, сохраненное в переменной strServerName.)
Это дает пользователю возможность Отменить, чтобы избежать бесконечного l oop, и автоматически завершается полностью для других типов ошибок соединения. Вероятно, вам придется внести некоторые изменения в зависимости от того, как настроено ваше подключение / логин, но при необходимости вам следует начать работу.
Exit Sub
EnterCredentials:
If InStr(Err.Description, "credentials provided for the SQL source are invalid") > 0 Or Err.Number = 1004 Then
'Network account doesn't have access. Allow alerts to display the login dialog. If Cancel is pressed, stop entirely.
'If error occurs a 2nd time, then password was not entered correctly.
Application.DisplayAlerts = True
If MsgBox(IIf(bolTriedPassword, "A valid username and password were not entered for ", "Your network account has not been granted access to ") & strServerName & "." & vbCrLf & vbCrLf & _
IIf(bolTriedPassword, "Please ensure you selected DATABASE as the login type and entered the correct username and password." & vbCrLf & vbCrLf, "") & _
"If you have a database username and password, press OK, then: " & vbCrLf & _
" - Select DATABASE on the left of login window." & vbCrLf & " - Click RUN on the native query window.", _
vbOKCancel + vbExclamation, "Error Establishing Connection") = vbCancel Then End
bolTriedPassword = True
Else
'For any other error, display error description and stop entirely
MsgBox "Error connecting to SQL Server:" & vbCrLf & vbCrLf & Err.Description, vbCritical, "Error Establishing Connection"
End
End If
Resume
End Sub
* Excel не выбирает параметр по умолчанию для всплывающих окон из метода SaveAs, вместо этого выбрав более полезную опцию:
https://docs.microsoft.com/en-us/office/vba/api/excel.application.displayalerts
При использовании метода SaveAs для книг для перезаписи существующего файла, Подтвердите Диалоговое окно «Сохранить как» имеет значение по умолчанию «Нет», а ответ «Да» выбирается в Excel, когда для свойства «DisplayAlerts» установлено значение «Ложь». Ответ Да перезаписывает существующий файл.