JavaScript to call a VBA routine with parameters

女生的网名这么多〃 提交于 2019-12-02 02:46:56

问题


  1. I need to pass arguments to a Excel VBA code from JavaScript of HTA.

    1. I can successfully call VBA function, but unable to pass string arguments correctly.
    2. JavaScript function can pass different string arguments.
    3. Below is code in simple and demo form.
    4. Excel-VBA code

    Sub subTest(strName As String)
    MsgBox strName
    End Sub
    

HTA code with Javascript

<!DOCTYPE html>
<html>
<head>
<title>HTA</title>
<hta:application 
id="oHta"
applicationname="htaNavi"
border="1"
borderstyle = normal
contextmenu = "yes"
caption="Navigator"
sysmenu="yes"
WINDOWSTATE="maximize"
>
</head>
<body>
<input type="button" value="testing" onclick="funRun('testng string')" />
<input type="button" value="testing second" onclick="funRun('testng')" />
</body>

<script>

var objExl;
var objWb;
var objExl =new ActiveXObject("Excel.Application");
objExl.Visible = true;
var objWb = objExl.Workbooks;
var strpath = '\path\testing_excel_web.xls';
objWb.Open(strpath);

function funRun(strName)
{
alert(strName);
objWb.Application.Run('testing_excel_web.xls!subTest(strName)');
}
</script>
</html>

I can call subTest, but message box populates strName as string but not 'testing string' as text.


回答1:


I'm thinking you want:

objWb.Application.Run('testing_excel_web.xls!subTest("' + strName + '")');

This way, the value of the variable strName is concatenated to the command you are attempting to run.

I know nothing about this calling of a VBA function, so I'm not sure if you need the " around the strName like I provided or not.

In addition, to be safe, in case your strName value contains ", you should use this:

objWb.Application.Run('testing_excel_web.xls!subTest("' + strName.replace(/"/g, "\"") + '")');

Hopefully with this, the value of strName could be

The word "testing" here
or
"Here's a quote"

and it will still work.

The point is that if the string contains ", the Javascript would/could fail. If it would absolutely never contain ", then forget about it. But I think it's needed since any " in the value of strName will break the passing of it as a parameter.



来源:https://stackoverflow.com/questions/14511109/javascript-to-call-a-vba-routine-with-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!