早上好,
我在Excel中创建了一个基本的VBA程序,可以使用以下内容自动填写在线表单:IE.Document.getElementById(Worksheets("Sheet1").Range("A1")).Value = Worksheets("Sheet1").Range("B1")
当在线表单使用textareas时(即在我看到的检查元素下),这样可以正常工作:
<div class = "fields-container">
<div class = "name long-field">
<textarea id = "random-name" placeholder= "randomstuff" style="height: 24px;: ></textarea>
但是,并非此表单上的所有框都是textareas。我需要填写的一些框在inspect元素下看起来像这样:
<label class="has-float-label shadow" for="random-name"> == $0
<div style="display: inline-block;">
<input value id="random-name" style="box-sizing: content-box; 2px;">
每当我尝试使用相同的IE.Document.getElementById(Worksheets("Sheet1").Range("A1")).Value = Worksheets("Sheet1").Range("B1")
时,它可能会填写一两个字母,但是当我点击表单上的任何其他框时,它输入的几个字母将被删除。
查看inspect元素时,即使填写了这些两个字母,它也会显示为空白。我已经尝试过测试&#34; TEST&#34;在在线表单中,然后使用该程序替换它,虽然它显示它被替换(至少是几个字母),但在inspect元素下,Value仍然是&#34; TEST&#34;。
我希望有一个简单的解决方案,但任何帮助将非常感激。如果您需要查看代码或InspectElement
,请告诉我 UPDATE 我尝试使用.setAtrribute("value","RandomText")
,现在在inspect元素下,它将值显示为&#34; RandomText&#34;但是它并没有改变什么&#39 ; s实际上在框中,当页面刷新时,它将恢复为之前框中的内容
我还测试过手动更改值(在Inspect Element下),文本框会改变,但是当点击时,它将恢复到之前的状态
UPDATE2 这里有一些来自Inspect Element的代码
<input id="randomID" style="width:40px; box-sizing: content-box;" value="ProgramValue" />
<div style="left 0px; top 0px; text-transform:none; letter-spacing: normal; overflow: scroll; font-family: -apple-systm, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 18px; font-style: normal; font-weight: 400; white-space: pre; visibility: hidden; position: absolute;">TEST</div>
正如您所看到的,实际值是vba程序所放置的,但是在样式结束时它仍然具有&#34; TEST&#34;文本(这就是显示在实际网页上的内容)。有没有办法改变那个文本?
(如果您碰巧有SIPR访问权限让我知道,我可以为您设置网站和更多详细信息)
答案 0 :(得分:0)
我遇到了类似的问题,经过一番研究,我提出了以下解决方案:
Set itemName = ieDoc.getElementById("dynamicLineItems").getElementsByClassName("InputBox")(0)
itemName.Focus
itemName.FireEvent ("onchange")
itemName.Value = somevalue.Value
在要使用的输入框上使用Inspect Element(带有IE)后,我添加的使其起作用的是.FireEvent(“ onchange”)(请参见下图)。 IE screenshot
也许您可以尝试将事件重现到HTML表单中来修改代码