У меня есть два запроса данных Excel, которые относятся к 1) и таблице SQL и 2) хранимой процедуре SQL. Я написал код VBA для обновления запросов при открытии рабочей книги в зависимости от того, подключен ли пользователь к нашей внутренней сети (я делаю это через вопрос к пользователю). Метод обновления вызывается, если пользователь указывает, что подключен к нашей сети.
Private Sub Workbook_Open()
Call HideAllWorksheets
Select Case Time
Case Is < TimeValue("12:00")
answer = MsgBox("Good morning, " & UCase(UserName()) & "!" & vbNewLine & vbNewLine & "Welcome to Client Profitability Reporting Self Service!" & vbNewLine & vbNewLine & "Are you currently connected to the DAN Network (Ethernet, Wireless, or VPN)?", vbQuestion + vbYesNo + vbDefaultButton2, "Welcome")
Case Is < TimeValue("18:00")
answer = MsgBox("Good afternoon, " & UCase(UserName()) & "!" & vbNewLine & vbNewLine & "Welcome to Client Profitability Reporting Self Service!" & vbNewLine & vbNewLine & "Are you currently connected to the DAN Network (Ethernet, Wireless, or VPN)?", vbQuestion + vbYesNo + vbDefaultButton2, "Welcome")
Case Else
answer = MsgBox("Good evening, " & UCase(UserName()) & "!" & vbNewLine & vbNewLine & "Welcome to Client Profitability Reporting Self Service!" & vbNewLine & vbNewLine & "Are you currently connected to the DAN Network (Ethernet, Wireless, or VPN)?", vbQuestion + vbYesNo + vbDefaultButton2, "Welcome")
End Select
If answer = vbYes Then
MsgBox "Thank you! I'll update the workbook so that you have the latest data.", vbOKOnly, "Data Refresh"
Call RefreshAllData
Else
MsgBox "Thank you! I cannot update the workbook with the latest data, but you can still run reports with data from the last refresh.", vbOKOnly, "Data Refresh"
End If
UserInputForm.Show'
End Sub
Когда я открываю книгу, я вижу, что процедура выполняется, однако запросы никогда не обновляются. Когда рабочая книга открыта, я могу запустить код вручную, и он работает без проблем. Есть что-то в начальном соединении с сервером SQL, которое, кажется, не работает должным образом, когда рабочая книга открыта. Ниже приведен код обновления.
Sub RefreshAllData()
ActiveWorkbook.Connections("Query - pro ClientMap").Refresh
ActiveWorkbook.Connections("Query - ClientProfAnalysisLocalCurrency").Refresh
Application.CalculateUntilAsyncQueriesDone
Application.DisplayStatusBar = True
Application.StatusBar = "Refreshed at: " & Now()
MsgBox "Data has been refreshed!"
End Sub
Параметр Включить фоновое обновление не отмечен для каждого запроса. Я пробовал разные способы обновления, и ни один из них не работает над открытой книгой. Тем не менее, каждый из них будет работать после того, как рабочая книга была открыта, и SQL-соединения каким-то образом были установлены.
Примечание: я получаю краткое сообщение «Загрузка .Net Framework» в строке состояния приложения, когда нажимаю кнопку «Запросы и соединения» на ленте данных. Кажется, это активирует соединение SQL.
Любая помощь будет принята с благодарностью!