填写在线表格 - 未保存的值

时间:2018-06-17 15:37:11

标签: html excel vba excel-vba textarea

早上好,

我在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访问权限让我知道,我可以为您设置网站和更多详细信息)

1 个答案:

答案 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表单中来修改代码