JavaScript 调用带有参数的 VBA 例程
JavaScript to call a VBA routine with parameters
-
我需要将参数从HTA的JavaScript传递给Excel VBA代码。
- 我可以成功调用VBA函数,但无法正确传递字符串参数。
- JavaScript 函数可以传递不同的字符串参数。
- 下面是简单和演示形式的代码。
- Excel-VBA代码
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>
我可以调用 subTest,但消息框将 strName 填充为字符串,但不将"测试字符串"填充为文本。
我想你想要:
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
值中的任何"
都会破坏它作为参数的传递。
相关文章:
- 多个JavaScript子例程的实时DOM显示
- 支持 JavaScript 的检查例程适用于 Chrome/Opera/IE,但不适用于 Firefox/Safari
- 更合乎逻辑的设置超时例程
- 当访问文件时,我可以自动调用例程或函数吗
- 访问Chrome'的内部gzip例程
- Django:如何将模板变量传递给JavaScript OnClick例程
- 使用“;调解员”;作为侦听块例程中的汇点
- 看不到如何将洪水填充例程更改为 DFS 例程
- 使用异步子例程对一组函数进行计时
- 使用 attributes.add 在客户端更改文本框时调用例程
- 一个按钮上的多操作与javascript例程
- Facebook 信用回调例程未调用
- 我将如何使用闭包在 C# 中重写此 JavaScript 例程
- 如何将动画例程转换为通用的、可重用的 jQuery 函数
- 鼠标左键单击与 JavaScript 中的右键单击例程冲突
- Javascript 模态窗口例程每次单击都会执行更多时间
- 使用 Node.JS 设计机器人,这些机器人以随机超时和通用例程运行
- 如何将烦人的“for”循环转换为“Object.keys”例程或类似例程(JSLint)
- 有时不会发送电子邮件(如果必须运行第一个子例程,则会跳过第二个子例程)
- JavaScript 调用带有参数的 VBA 例程