如何使用Excel VBA在网站上执行js函数

时间:2019-07-29 22:42:18

标签: excel vba

尝试使用Excel VBA填写表单(文本框)。第一个问题是表格无法识别值。

我尝试使用下面的代码,但是,同样的问题,它仍然无法正常工作,因为该表单引发了一个自定义验证“必需”错误

Set inputBox = document.getElementById("company_name")
inputBox.Focus
inputBox.FireEvent ("onchange")
inputBox.Value = somevalue.Value

检查html,发现有一个自定义的onchange函数

<input name="company_name" tabIndex="1" id="company_name" spellcheck="false"  onselect="ControlSelect(this, event);" onfocus="ControlFocus(this, event);" onblur="ControlBlur(this, event);" onchange="ControlChange(this, event);" oncut="stdControlCut(this, event);" onpaste="stdControlPaste(this, event);" type="text" size="68" maxLength="40" value="company" autocomplete="off" control_owner="PAGE" program_id="CEN100" screen_id="sid0007" page_name="main" control_owner_id="main" defaultvalue="" extendedchars="false" wildcards="false" securitytype="" security="COM_NAME" spellchecker="false" referential="" datatype="" changecase="" paste="true" server_change_enabled="true" valid="undefined" hasChanged="false">

如何从VBA致电ControlChange(this, event);

我认为它涉及到eval函数,但不确定如何将参数传递给ControlChange

1 个答案:

答案 0 :(得分:1)

您可以使用vba中的(“ InternetExplorer.Application”)对象的ExecScript方法,可以自定义javascript函数变量,以使用所需的值触发事件onchange。

Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.navigate "http://www.javascripter.net/faq/confirm.htm"
ie.Visible = True
While ie.Busy
DoEvents
Wend
ie.Document.ParentWindow.execScript code:="window.confirm = function(){return true;};"
ie.Document.GetElementsByTagName("input")(0).Click

此代码将window.confirm设置为true,从而避免了该文档上按钮上的“ onclick”方法上出现的提示。 (您可以尝试点击该按钮以确认是否有效)

无论如何,您也可以尝试使用线路

inputBox.Focus
inputBox.Value = somevalue.Value
inputBox.FireEvent ("onchange")

首先在输入框中设置值,然后触发事件(“ onchange”),我建议您添加一个等待循环以等待javascript函数完成。