ı是新的vba,在这里。我正在做股票,我需要您的帮助。 所以首先,正如您在标题上所看到的,我想在下拉列表中自动选择我在Excel中写的内容。因此,我需要从此网站website中的“MALİTABLOLAR”页面中获得摊销信息。土耳其语中的摊销是amortisman,它是页面的末尾。 ı可以只进入“马里语”页面,而ı不能从下拉列表中选择日期。
Sub Düğme2_Tıkla()
sirketismi = Range("A2")
昏暗即作为新的InternetExplorer 即可见=真 ie.navigate(“ https://www.isyatirim.com.tr/tr-tr/analiz/hisse/Sayfalar/sirket-karti.aspx?hisse=”&sirketismi)
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.document
Do Until Not ie.Busy
DoEvents
Loop
ie.document.all("page-4").Click
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
End Sub
在缩影中,我将写入a2单元,并且此宏将采用正确的日期进行摊销。 对不起,英语不好。 我希望你能理解我 谢谢你的帮助
答案 0 :(得分:1)
您可以避免打开浏览器并使用更快的方法。这些页面构造了一个查询字符串,该字符串在xhr requests中用于更新表值。响应是您可以解析的json。例如,按如下所示设置左右下拉菜单,您可以在“网络”标签中查看xhr
查询字符串参数示例:
左侧的下拉列表生成:
权利产生:
请注意,币种由(mn $
对mn TL
)定义:
exchange: USD
或exchange=TRY
使用JSONConverter.bas解析json,然后将.bas添加到项目以及通过vbe>工具>引用> Microsoft Scripting Runtime
进行引用,您可以从JSON解析出值。还需要引用Microsoft HTML Object Library
。
例如第一个网址的 json响应
VBA:
Option Explicit
Public Sub GetInfo()
Dim html As HTMLDocument, col As Collection
Set html = New HTMLDocument: Set col = New Collection
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/Common/Data.aspx/MaliTabloShortTable?companyCode=EGEEN&exchange=TRY&year1=2018&period1=6&_=1547055336791", False
.send
col.Add JsonConverter.ParseJson(.responseText)("value")
.Open "GET", "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/Common/Data.aspx/MaliTabloShortTable?companyCode=EGEEN&exchange=TRY&year1=2018&period1=3&_=1547055336792", False
.send
col.Add JsonConverter.ParseJson(.responseText)("value")
End With
EmptyDict col
End Sub
Public Sub EmptyDict(ByVal col As Object)
Dim item As Object, item2 As Object
For Each item In col
For Each item2 In item
Debug.Print item2("KT_TANIMI"), item2("value1")
Next
Next
End Sub
输出:
答案 1 :(得分:0)
ı用`
做到了
Set HTMLdoc = ie.document
Set evtChange = HTMLdoc.createEvent("HTMLEvents")
evtChange.initEvent "change", True, False
Set selectElement = HTMLdoc.getElementById("ddlMaliTabloDonem1")
selectElement.Value = Range("B2")
selectElement.dispatchEvent evtChange`
它现在可以工作,但现在还有另一个问题:D
我想获取数据“ amortisman giderleri”,但我不知道我怎么能从td获取数据(没有java pls:D)
答案 2 :(得分:0)
有效
For i = 0 To ie.document.getElementsByTagName("td").Length - 1
If ie.document.getElementsByTagName("td")(i).innerText = "Amortisman Giderleri" Then
result = ie.document.getElementsByTagName("td")(i + 1).innerText
Range("B11").Value = result
End If
Next i