使用参数调用VBA例程的JavaScript

时间:2013-01-24 21:27:08

标签: javascript excel-vba hta vba excel

  1. 我需要将参数传递给来自HTA的JavaScript的Excel VBA代码。

    1. 我可以成功调用VBA函数,但无法正确传递字符串参数。
    2. JavaScript函数可以传递不同的字符串参数。
    3. 以下是简单和演示形式的代码。
    4. Excel-VBA代码
    5. 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'填充为文本。

1 个答案:

答案 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都会破坏它作为参数的传递。