我有一个工作表,该工作表具有到两个Web服务器的连接,每个Web服务器都返回一个JSON字符串并将其格式化为表格。一个连接到Google Maps,另一个连接到USGS Seismic数据库。
我正在使用Excel的内置查询功能,并且我通过“查询和连接”工具设置了两个连接。工作表的用户每次更新工作表中的地址字段时,都会运行一个宏,该宏更新查询URL以包括新参数。之所以可以在我的机器上运行,是因为我最初设置了连接。
当其他人在另一台机器上使用工作表时,他们必须手动选择如何连接到每个外部连接。这是通过“访问Web内容”对话框(见下文)进行的,在该对话框中,他们必须为每个连接选择“匿名”。如果用户在更改地址字段之前未执行此操作,则宏将运行,但Excel将冻结并崩溃,因为“访问Web内容”对话框会尝试打开但无法打开。
我需要通过VBA自动设置外部连接以匿名连接并运行,而无需尝试打开上述对话框。
用于重置其中一个查询(至USGS)的代码:
Sub ResetSeismicJSONQuery()
Application.ScreenUpdating = False
Dim wb As Workbook: Set wb = ActiveWorkbook
Dim urlRange As Range: Set urlRange = Application.Range("URL_USGS")
Dim jsonQuery As WorkbookQuery: Set jsonQuery = wb.Queries("USGSQuery")
Dim newQueryFormula As String
Dim seismicTable As ListObject: Set seismicTable = wb.Sheets("jsonQueryResults").ListObjects("USGSQuery")
' Get query formula
newQueryFormula = ReplaceURL(jsonQuery.Formula, urlRange.Text)
jsonQuery.Formula = newQueryFormula
seismicTable.Refresh
Application.CalculateUntilAsyncQueriesDone
Application.ScreenUpdating = True
End Sub
是否可以通过编程方式修改查询以自动进行匿名连接,以便在新计算机上运行时“访问Web内容”对话框不会尝试打开?
值得注意的是,一旦有人浏览过“访问Web内容”对话框,他们就不必为该特定连接再次进行操作。