我在更改单元格中的值时尝试执行GET请求。
此处的链接:
https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=(PARAMETER SHOULD BE HERE)&hoursBeforeNow=1
因此,此单元格中的内容应该更改此查询。 这是可能的,如果是这样,有没有人有一个很好的解决方案呢? 一直试图谷歌整夜,但似乎找不到任何人做过同样的事情。
答案 0 :(得分:2)
从this answer改编,这是一个两步过程。
首先,为存储将传递给查询的值的单元格创建命名范围。有关如何执行此操作的详细信息,请here。我使用" StationName"作为范围的名称,但您可以使用任何您喜欢的名称。
其次,我们需要将命名范围合并到查询的源中。为此:
Name="StationName"
中显示的Excel范围的名称更改为您使用的任何名称 = Xml.Tables(Web.Contents("https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=" & Excel.CurrentWorkbook(){[Name="StationName"]}[Content]{0}[Column1] & "&hoursBeforeNow=1"))
这张照片展示了现在的样子:
现在转到Home并点击Close&负荷。
您可能会收到有关隐私设置的警告 - 为了解决这个问题,我选择将Excel文件和aviationweather.gov网站同时提供给公众"隐私程度。
您可以通过选择数据表中的单元格,进入查询并选择编辑,转到主页并选择数据源设置,选择全局权限,然后在相关条目上使用编辑权限来访问隐私设置。
要在单元格值更改时自动刷新查询,我们需要使用一些VBA。我们需要知道单元格所在的工作表,引用该单元格的命名范围的名称以及我们要刷新的查询的名称。前两个应该是直截了当的,查询的名称只是"查询 - "然后是Queries&中显示的名称。连接面板。
使用ALT-F11打开VBA编辑器,双击Project Explorer中的相关工作表对象以打开相关代码模块并粘贴以下代码(但更改命名范围的名称和名称与您的名字匹配的查询):
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, ThisWorkbook.Names("StationName").RefersToRange) _
Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
ThisWorkbook.Connections("Query - Get station from aviationweather dot gov").Refresh
Application.EnableEvents = True
End If
End Sub
现在更改单元格值会导致查询自动刷新
这是一些简单的代码,用于列出工作簿中每个连接的名称。在VBA编辑器中,使用Insert>用于创建新模块的模块,然后粘贴以下代码:
Option Explicit
Sub listConnections()
Dim c As WorkbookConnection
For Each c In ThisWorkbook.Connections
MsgBox c.Name
Next c
End Sub
每个连接名称都会弹出一个消息框,如下所示:
你可以在弹出时复制你需要的名字。您只需按CTRL-C即可复制消息框内容,但粘贴时需要编辑一些额外的内容。复制上面显示的消息框会导致以下文本放在剪贴板上:
---------------------------
Microsoft Excel
---------------------------
Query - Get station from aviationweather dot gov
---------------------------
OK
---------------------------
答案 1 :(得分:1)
我以这种方式从cbr.ru获取每日汇率数据。
http://www.cbr.ru/eng/currency_base/daily/?UniDbQuery.Posted=True&UniDbQuery.To=[“股票行情”]
我将日期用作excel单元格中的变量的方式是,一旦单元格值更改,它就会自动刷新。 (将该参数命名为股票代码)
希望这种简单的方法会有所帮助。