我相信我已经彻底研究了这个问题(对不起,如果你看到了答案,请耐心等待我。)
真的是VBA / Macros的新手,甚至完全不知道在哪里“放置”这些留言板中提供的代码,这就是我更喜欢公式的原因。
我的工作表中有单元格,这些单元格会输入超链接(即A1 = JFK,B1:CVG,C1 = HYPERLINK(“http://www.gcmap.com/dist?p=”& A1&“ - ”& B1,“我的航班”)。
如果您访问该链接(http://www.gcmap.com/dist?P=jfk-cvg),则会显示这两个点之间的飞行距离 - 589英里。
我要做的是根据单元格C1中提供的链接在Excel中执行Web查询,然后让Web查询指向链接中包含的总距离 - 然后填充我工作表上的另一个单元格( D1)有那个距离。
任何和所有帮助将不胜感激!
答案 0 :(得分:1)
这是怎么回事:
Sub getMiles()
'Thanks to http://stackoverflow.com/questions/16975506/how-to-download-source-code-from-a-website-with-vba for idea
Dim k As Long, s
Dim URL2 As String
Dim ws As Worksheet, newWS As Worksheet
Set ws = ActiveSheet
Application.ScreenUpdating = False
URL2 = ws.Cells(1, 3) 'Cell C1 is the URL
' to get data from the url we need to creat a win Http object_
' tools > references > select Windows Win Http Services 5.1
Dim Http2 As New WinHttpRequest
'open the url
Http2.Open "GET", URL2, False
' send request
Http2.Send
'MsgBox Http2.ResponseText
Debug.Print s
'Debug.Print Http2
Debug.Print URL2
Dim Resp As String: Resp = Http2.ResponseText
Dim Lines2 As Variant: Lines2 = Split(Resp, ">")
Worksheets.Add after:=Sheets(Sheets.Count)
Set newWS = ActiveSheet
newWS.Name = "Temp for source code"
k = 0
For k = LBound(Lines2) To UBound(Lines2)
newWS.Cells(1 + k, 1).Value = Lines2(k)
k = k + 1
Next k
Dim findString As String, stringCell As Range
findString = " mi"
Set stringCell = newWS.Columns(1).Find(what:=findString)
Dim milesFlown As String
milesFlown = Left(stringCell.Value, WorksheetFunction.Search("&", stringCell, 1) - 1)
'MsgBox ("You would fly " & milesFlown)
ws.Cells(1, 4).Value = milesFlown
Application.DisplayAlerts = False
newWS.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
它有点迂回,但它的作用是获取您的URL的源代码,并在该源代码中,查找仅在给出里程(“mi”)之前似乎发生的字符串,然后找到&左侧的数字,并将其设置为您的里程。您需要调整宏以正确指向包含您网址的单元格。如果您需要任何帮助,请告诉我们!
编辑:啊,要使用此代码,打开Excel,按ALT + F11,这将打开VB编辑器。我想你可以将这段代码(只是复制/粘贴)插入“Sheet1(Sheet1)”部分。如果没有,您需要右键单击“VBAProject([yourbook])”并插入模块,然后将代码放在那里。然后它应显示在您的宏列表中(“视图”选项卡 - >“宏”)。
Edit2:此外,您还需要在VBA中添加最有可能的参考。按ALT + F1打开VB编辑器,然后按工具 - >引用,查找“Microsoft WinHTTP Services,版本5.1”并添加复选标记,然后单击“确定”以添加此引用。否则,您将收到错误。
Edit3:更新了代码。它现在将源代码放在一个新工作表上,因此不会删除您在Col. A中的任何内容。