-1

使用 Excel VBA,我正在尝试创建一个宏。

目的是让它在 Internet Explorer 中导航以完成一项任务。

我试图从网页中的红色标记框(每个都是单独的条目)复制文本并将其粘贴到同一页面上方的输入框中。

源数据

比如说,应该将 08:28 复制到上面的文本框中。

同样,每个条目都应复制到它们上方的相应输入框中,如下所示:

预期产出

请告诉我如何使用 Excel VBA 查找、复制和粘贴数据。

4

1 回答 1

0

由于您没有发布 html 资源,所以我们不知道您使用的是哪个 HTML 元素,建议您参考以下通用方法复制和设置值。

通常,我们可以先使用getElementById()getElementsByClassName()getElementsByName()getElementsByTagName()querySelector()querySelectorAll()来查找网页元素,然后使用innerTextinnerHtml属性设置值。

从截图来看,您似乎正在创建一个时间表,所以,我假设它是一个 html 表格元素,并且您想将值从一行复制到目标行(可能使用输入文本或不使用输入文本),请参考以下示例代码:

网页资源:

<table >
    <tr>
        <td>11 MON</td>
        <td>12 TUE</td>
        <td>13 WED</td>
        <td>14 THU</td>
        <td>15 FRI</td>
        <td>16 SAT</td>
        <td>17 SUN</td>
    </tr>
    <tr>
        <td id="label2_1" class="class2_1"><input type="text" value="" /></td>
        <td id="label2_2" class="class2_2"><input type="text" value="" /></td>
        <td id="label2_3" name="wedtime2_3"><input type="text" value="" /></td>
        <td id="label2_4"></td>
        <td id="label2_5" class="class2_5"></td>
        <td id="label2_6" name="wedtime"></td>
        <td><input id="txt7" type="text" value="" /></td>
    </tr>
    <tr>
        <td id="label3_1">08:28</td>
        <td id="label3_2" class="class3_2">02:46</td>
        <td id="label3_3" name="wedtime3_3">03:46</td>
        <td id="label3_4">04:46</td>
        <td id="label3_5" class="class3_5">05:46</td>
        <td id="label3_6" name="wedtime">06:46</td>
        <td>07:46</td>
    </tr>
</table>

然后,使用以下 VBA 脚本复制数据:

Sub Test()
    Dim IE As Object

    Dim startDateText As Object, endDateText As Object

    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = True
        .Navigate "<web page url>"

        While IE.ReadyState <> 4
            DoEvents
        Wend

        'using getElementById() method to get the td tag, then using getElementsByTagName() method to get the input text box.
        'using the innertext property to set the input text box value, using the innerHtml property to get the value.
        IE.Document.getElementById("label2_1").getElementsByTagName("input")(0).innerText = IE.Document.getElementById("label3_1").innerHtml
        
        'using getElementsByClassName method to get the elements.
        IE.Document.getElementsByClassName("class2_2")(0).getElementsByTagName("input")(0).innerText = IE.Document.getElementsByClassName("class3_2")(0).innerHtml
        
        'using getElementsByName method to get the elements.
        IE.Document.getElementsByName("wedtime2_3")(0).getElementsByTagName("input")(0).innerText = IE.Document.getElementsByName("wedtime3_3")(0).innerHtml
       
       'Using innerHtml property to set the value.
        'using getElementsByClassName method to get the elements.
        IE.Document.getElementById("label2_4").innerHtml = IE.Document.getElementById("label3_4").innerHtml
        
        'using getElementsByClassName method to get the elements.
        IE.Document.getElementsByClassName("class2_5")(0).innerHtml = IE.Document.getElementsByClassName("class3_5")(0).innerHtml
        
        'using getElementsByName method to get the elements.
        IE.Document.getElementsByName("wedtime")(0).innerHtml = IE.Document.getElementsByName("wedtime")(1).innerHtml
       
    End With
    Set IE = Nothing
End Sub

此外,您还可以使用以下脚本循环遍历td标签并设置值

        'find all of the tr.           
        Dim TableRows As Object
        Set TableRows = IE.Document.getElementsByTagName("table")(0).getElementsByTagName("tr")
        'Debug.Print TableRows.Length
        
        Dim targetrow As Object
        Dim datarow As Object
        Set targetrow = TableRows(1).getElementsByTagName("td")
        Set datarow = TableRows(2).getElementsByTagName("td")
        
        Dim i As Integer
        Dim text As Object
        'loop through the td and set value.
        For i = 0 To targetrow.Length - 1
            Set text = targetrow(i).getElementsByTagName("input")(0)
            If Not text Is Nothing Then
                text.innerText = datarow(i).innerHtml
            Else
                targetrow(i).innerHtml = datarow(i).innerHtml
            End If
        Next i

结果如下:

在此处输入图像描述

有关使用这些方法的更多详细信息,请参阅常见的 VBA 方法或属性

如果还是不能解决您的问题,请贴出相关网页html资源,让我们了解您使用的是哪些HTML元素,帮助您解决问题。

于 2019-11-15T13:28:06.310 回答