2
  1. HTA の JavaScript から Excel の VBA コードに引数を渡す必要があります。

    1. VBA 関数を正常に呼び出すことはできますが、文字列引数を正しく渡すことができません。
    2. JavaScript 関数は、さまざまな文字列引数を渡すことができます。
    3. 以下は、単純なデモ形式のコードです。
    4. 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 を文字列として入力しますが、「テスト文字列」をテキストとして入力しません。

4

1 に答える 1

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がパラメーターとしての受け渡しを壊すため、必要だと思います。

于 2013-01-24T21:30:33.030 に答える