我需要将参数传递给来自HTA的JavaScript的Excel VBA代码。
Sub subTest(strName As String)
MsgBox strName
End Sub
使用Javascript的HTA代码
<!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>
我可以调用subTest,但是消息框将strName填充为字符串,但不会将'testing string'填充为文本。
答案 0 :(得分:1)
我想你想要:
objWb.Application.Run('testing_excel_web.xls!subTest("' + strName + '")');
这样,变量strName
的值将连接到您尝试运行的命令。
我对VBA函数的调用一无所知,所以我不确定你是否需要像我提供的"
一样strName
。
此外,为了安全起见,如果您的strName
值包含"
,则应使用此项:
objWb.Application.Run('testing_excel_web.xls!subTest("' + strName.replace(/"/g, "\"") + '")');
希望有了这个,strName
的值可能是
The word "testing" here
or
"Here's a quote"
它仍然可以使用。
关键是如果字符串包含"
,则Javascript会/可能会失败。如果绝对不会包含"
,那么就忘了它。但我认为这是必要的,因为"
值中的任何strName
都会破坏它作为参数的传递。