3

我正尝试使用VBA中的自动化在表单上的按钮的onclick事件中更改函数调用。功能X已被硬编码到网页中,并且我无权更改该代码。 (该页面在我的公司内部,但我不在该部门)。JavaScript/VBA自动化:更改onclick属性

当我的情况合适时,我想用新函数Y替换函数X

我对这个问题似乎有类似的问题,但它似乎最引用了从JS代码中更改元素属性。我的问题是,我需要这样的VBA,我不知道如何到达那里。

This site有关于此过程(setAttribute,getAttribute等)的大量信息,包括有用的信息:使用一个浏览器与另一个浏览器时的注意事项。 我所有的代码都将与IE(公司提供的)接口,因此不需要担心其他浏览器选项。

当试图更改onclick属性时,VBE监视面板会显示该属性的更改,但其行为不像预期的那样。在我改变了属性后,当我点击时(无论是通过我的objButton.Click/objButton.onclick自动化还是实际上手动点击按钮)都没有发生任何事情。我也尝试了其他属性(即onfocus),结果相同。上面提到的链接IE浏览器遇到了一些困难,但我对JavaScript并不太熟悉,并且在遵循指南时遇到了问题。

我试过的是以下内容,所有这些都有相同的结果。

选项1:

Set TEST = myIEWindow.Document.createattribute("onclick") 
TEST.nodevalue = "function anonymous() {alert(""test""); };" 
objButton.setAttributeNode TEST 

选项2:

objButton.Attributes("onclick").value = "function anonymous() {alert(""test""); };" 

选项3:

objButton.Attributes("onclick").value = "alert(""test"");" 

选项4:

objButton.setAttribute "onclick", "alert(""test"");" 

方案5:

objButton.onclick = "function() { alert(""test""); };" 

在尝试这些不同的方法了,我也注意到,在VBE的onclick属性看从原来的以变/字符串Variant类型/对象的窗口改变试图迫使后按钮来调用新功能,我觉得这与我的问题有关。

有人可以请解释如何(如果可能)我可以得到这个工作?

回答

1

您可以直接在元素属性中更改它。

var objButton = document.getElementById("buttonId"); 
objButton.onclick = function() { alert("test"); }; 
+0

这看起来更像是JS,而不是VBA,而且我无法直接更改JS。我试着'objButton.onclick =“function(){alert(”“test”“);};”'根据你的回答,但是这不起作用,不幸的是。它与我列出的其他方法具有相同的效果。我可以在监视面板中看到属性值已经改变(同样,也是从Variant/Object到Variant/String的类型)并且当我单击时没有任何反应。 – Gaffi 2012-03-23 19:22:48

+1

调用myIEWindow.Document.execScript(“document.getElementById('buttonId')。onclick = function(){alert('test');};”) – Vyrx 2012-03-23 20:07:15

+0

这给了我一个“对象不支持这个属性或方法“错误。现在寻找更多信息RE:'execScript' ... – Gaffi 2012-03-23 20:12:18