使用 Excel VBA,我正在尝试创建一个宏。
目的是让它在 Internet Explorer 中导航以完成一项任务。
我试图从网页中的红色标记框(每个都是单独的条目)复制文本并将其粘贴到同一页面上方的输入框中。
比如说,应该将 08:28 复制到上面的文本框中。
同样,每个条目都应复制到它们上方的相应输入框中,如下所示:
请告诉我如何使用 Excel VBA 查找、复制和粘贴数据。
使用 Excel VBA,我正在尝试创建一个宏。
目的是让它在 Internet Explorer 中导航以完成一项任务。
我试图从网页中的红色标记框(每个都是单独的条目)复制文本并将其粘贴到同一页面上方的输入框中。
比如说,应该将 08:28 复制到上面的文本框中。
同样,每个条目都应复制到它们上方的相应输入框中,如下所示:
请告诉我如何使用 Excel VBA 查找、复制和粘贴数据。
由于您没有发布 html 资源,所以我们不知道您使用的是哪个 HTML 元素,建议您参考以下通用方法复制和设置值。
通常,我们可以先使用getElementById()、getElementsByClassName()、getElementsByName()、getElementsByTagName()、querySelector()和querySelectorAll()来查找网页元素,然后使用innerText或innerHtml属性设置值。
从截图来看,您似乎正在创建一个时间表,所以,我假设它是一个 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元素,帮助您解决问题。