Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从Internet页面的下拉列表中选择_Vba_Web Scraping_Drop Down Menu - Fatal编程技术网

Vba 从Internet页面的下拉列表中选择

Vba 从Internet页面的下拉列表中选择,vba,web-scraping,drop-down-menu,Vba,Web Scraping,Drop Down Menu,我是新vba,在这里。我在做股票,需要你的帮助。 所以首先,正如你们在标题上看到的,我想在下表中自动选择我在excel上写的内容。因此,我们需要从这个网站的“MALİTABLOLAR”页面中获取摊销信息。土耳其语中的摊销是摊销人,这是页面的结尾。我们编写的代码可以工作一半 ı只能进入“mali tablolar”页面,而ı无法从下拉列表中选择日期 Sub Düğme2_Tıkla() sirketismi = Range("A2") Dim ie成为新的InternetExplorer 可见=

我是新vba,在这里。我在做股票,需要你的帮助。 所以首先,正如你们在标题上看到的,我想在下表中自动选择我在excel上写的内容。因此,我们需要从这个网站的“MALİTABLOLAR”页面中获取摊销信息。土耳其语中的摊销是摊销人,这是页面的结尾。我们编写的代码可以工作一半 ı只能进入“mali tablolar”页面,而ı无法从下拉列表中选择日期

Sub Düğme2_Tıkla()
sirketismi = Range("A2")
Dim ie成为新的InternetExplorer 可见=真实 ie.navigate(“”&sirketismi)

在缩略中,我将写入a2单元,该宏将获取具有正确日期的摊销信息。 对不起,英语不好。 我希望你能理解我
感谢您的帮助

您可以避免打开浏览器并使用更快的方法。该页面构造一个查询字符串,用于更新表值。响应是可以解析的json。例如,使用如下设置的“左”和“右”下拉列表,您可以在“网络”选项卡中查看xhr

查询字符串参数的示例:

左侧下拉列表生成:

权利产生:

请注意,货币定义为(
mn$
mn TL
):

exchange:USD
exchange=TRY

使用解析json,并将.bas添加到项目中,以及通过vbe>tools>references>
MicrosoftScriptingRuntime
进行引用,您可以解析json中的值。还需要对Microsoft HTML对象库的引用

例如,第一个url的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

输出:

我是用`

Set HTMLdoc=ie.document
设置evtChange=HTMLdoc.createEvent(“HTMLEvents”)
evtChange.initEvent“change”,True,False
设置selectElement=HTMLdoc.getElementById(“ddlmailabledonem1”)
选择元素。值=范围(“B2”)
选择Element.dispatchEvent evtChange`
它可以工作

i=0到ie.document.getElementsByTagName(“td”).Length的

如果ie.document.getElementsByTagName(“td”)(i).innerText=“摊销人Gidereri”,则
结果=ie.document.getElementsByTagName(“td”)(i+1).innerText
范围(“B11”)。值=结果
如果结束

接下来,我
我的朋友感谢你的评论,但ı学习vba才几天,你的评论让我很难理解:(所以ıguessı应该学习vba json语言是的。但是如果您以后对代码有具体问题,请询问。是的。正如我上面所示。它是用vba编写的。它需要对xmlhttp和json有一点了解。在json中,[]表示每个over和{}的集合)是一个循环键的字典。我想我以前使用过相同的JSON解析器:D。不过,在VBA中解析JSON并不是一件有趣的事task@K.Dᴀᴠɪ这就是我目前对Json和python的看法。我想我一定是错过了某个窍门。这似乎是对一个新问题的回答,而不是对您现有问题的回答
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