исходный запрос базы данных Excel - всплывающее сообщение по умолчанию принимается? - PullRequest
0 голосов
/ 31 марта 2020

У нас есть прямая ссылка из excel на нашу базу данных красных смещений - что удивительно.

Однако, когда мы обновляем данные sh, пользователям приходится нажимать множество типов "accept" windows, выбрав Run (снимок экрана ниже)

Любая идея, как установить это для принятия по умолчанию?

Официальный do c на нативных запросах, кажется, не упоминает: https://support.office.microsoft.com/en-US/article/Import-Data-from-Database-using-Native-Database-Query-Power-Query-f4f448ac-70d5-445b-a6ba-302db47a1b00

exce

1 Ответ

1 голос
/ 31 марта 2020

Если для 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» установлено значение «Ложь». Ответ Да перезаписывает существующий файл.

...