Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 以相同名称的网页元素为目标_Excel_Vba - Fatal编程技术网

Excel 以相同名称的网页元素为目标

Excel 以相同名称的网页元素为目标,excel,vba,Excel,Vba,简短版本: 我需要一种方法来使用Excel的VBA脚本与页面上的下拉列表小部件交互,该页面上有许多这样的小部件,每个小部件都具有相同的类名 长版本: 我正在尝试编写一个vba脚本,该脚本将提供指向以下站点文档的链接: 上面的链接是针对单个产品的。 显然,我希望脚本能够获得任何产品的文档 我遇到的问题是,我需要与嵌套在文档中较远位置的下拉列表交互。 我可以创建一个循环来定位页面中的列表: 'Dim NamePeek Set ie = New InternetExplorer ie.Visible

简短版本:

我需要一种方法来使用Excel的VBA脚本与页面上的下拉列表小部件交互,该页面上有许多这样的小部件,每个小部件都具有相同的类名

长版本:

我正在尝试编写一个vba脚本,该脚本将提供指向以下站点文档的链接:

上面的链接是针对单个产品的。 显然,我希望脚本能够获得任何产品的文档

我遇到的问题是,我需要与嵌套在文档中较远位置的下拉列表交互。 我可以创建一个循环来定位页面中的列表:

'Dim NamePeek
Set ie = New InternetExplorer
ie.Visible = 1
ie.navigate "https://support.industry.siemens.com/cs/products/6es7516-3an01-0ab0/cpu-1516-3-pn-dp-1mb-prog-5mb-data?pid=578298&mlfb=6ES7516-3AN01-0AB0&mfn=ps&lc=en-WW"
Set Divs = ie.document.getElementsByTagName("div")
For Each Div In Divs
    'NamePeek = Div.className
    If Div.className = "productfilter mfn" Then
        Trigger01 = True
        Trigger02 = False
        Trigger03 = False
    End If
    If Div.className = "filtertitle" Then
        Trigger02 = True
        Trigger03 = False
    End If
    If Div.className = "dropdown" Then
        Trigger03 = True
    End If
    If Trigger01 And Trigger02 And Trigger03 Then
        'This is where the list I'd like to interact with is located.
        'Div.selectedIndex = 2
        Trigger01 = False
        Trigger02 = False
        Trigger03 = False
    End If
Next Div
我知道'Div.selectedIndex=2将不起作用,因为在Excel中加载网站数据的HtmlLevel对象没有可用的.selectedIndex方法

我尝试用一个下拉列表创建一个简单的测试网页,并使用以下方法成功地与之交互:

Dim target As MSHTML.IHTMLSelectElement

Set ie = New InternetExplorer
ie.Visible = 1

ie.navigate "file:///C:/xxxxxx/dropdowntestwebsite.html"

Set target = ie.document.getElementById("DDList")
target.selectedIndex = 3

因此,我想知道是否可以使用IHTMLSelectElement与Siemens站点上的下拉列表交互,因为没有ID,而且IHTMLSelectElement对象不支持.getElement ByTagName方法。

Siemens站点看起来像是在使用某种jquery插件来控制其元素。widgets是addin吗?选择框不是硬编码的,所以不能像简单的选择框那样控制它们,比如说like

ie.getelementbyid("selectbox_div").selectedindex = 2.  
您必须找到删除并填充下拉列表的javascript命令,然后通过vba发出该命令,如

Call IE.document.parentWindow.execScript("nameofFunctionHere()", "JavaScript") 

我在使用加载项“Select2”作为下拉框的网站上遇到了类似的问题。

我刚刚花了几个星期试图使用Select2下拉框修复一个网页,所以我知道您正在经历什么。我不知道MSHTML不能使用getelementbyTagname。也许你应该试着换一种方式。下面是我用来控制打开的网页的代码。当然,页面必须已经在MSIE中打开,并且您必须至少知道文档标题的一部分

下面的代码将为您设置它,然后您可以使用getElementByTagName。有时,您可以将所需元素的父元素作为parentsID.firschild

Sub getSiemensBrowserAlreadyOpen()

    Set objShell = CreateObject("Shell.Application")
    Set objAllWindows = objShell.Windows

    Boolean_indicator = False

    Do While Not Boolean_indicator
    For Each ow In objAllWindows
        If (InStr(1, ow, "Internet Explorer", vbTextCompare)) Then

            Set objIterator = CreateObject("Shell.Application")
            For x = 0 To objIterator.Windows.Count
                On Error Resume Next
                current_title = objIterator.Windows(x).Document.Title
                current_url = objIterator.Windows(x).Document.Location

                If InStr(1, current_title, "Industry Support Siemens") > 0 Then 'is this my webpage?
                    Set IE = objIterator.Windows(x)
                    MsgBox "IE was properly set"
                    GoTo startProcess
                     Boolean_indicator = True
                    Exit For
                End If
            Next x
        End If
        Set objIterator = Nothing
    Next ow
    Boolean_indicator = True
    Loop
    MsgBox "Webpage was not found."
    Exit Sub 
startProcess:
    Set myDoc = IE.Document

'****************************************
'   Your operative code here






'****************************************/
    Set objShell = Nothing
    Set myDoc = Nothing
    Set IE = Nothing
 End Sub

好的,我将查找javascript函数。代码中的链接正确地选择了所需的产品代码。我在西门子网站上更改了几个其他选择框,然后复制了新的url。当我把它粘贴到一个新标签页时,它打开了页面,显示了我的新更改。也许您可以使用url来选择需要选择的内容。尝试选择单个项目所需的所有内容,然后复制该url。您应该能够找出url的哪一部分控制哪些选择框。找出url代码并将您的选择插入其中可能更容易。我也注意到了这一点。然而,url中有一部分几乎不可能按程序确定:…/cpu-1516-3-pn-dp-1mb-prog-5mb-data?pid=578298。。。我当然可以使用url来选择某些框,但这种方法的问题是试图选择一个算术产品。我不知道这个简单的英语描述会是什么。