2

vbscript を使用して、Staad (構造解析プログラム) からデータを取得しようとしています。

Staad にはこれを可能にする API がありますが、すべてのドキュメントは VBA です。そのため、VBA を VBscript に変換しようとしていますが、エラーが発生します。

たとえば、モデル内のノードの総数を取得するための Staad ドキュメントの VBA を次に示します。

Dim objOpenSTAAD As Output
Dim pnNodes As Integer
Set objOpenSTAAD = CreateObject("OpenSTAAD.Output.1")
objOpenSTAAD.SelectSTAADFile "C:\SPRO2003\STAAD\Examp\US\examp08.std"
objOpenSTAAD.GetNodesCount pnNodes

これを vbscript として実行しようとしましたが、変数からデータ型を削除しただけです。私が得ているエラーは次のとおりです。

Type mismatch: 'GetNodesCount'

誰でもアイデアを提供できますか?役立つ場合は、GetNodesCount 関数の Staad ドキュメントを次に示します。

GetNodesCount

VB 構文

整数 GetNodesCount (整数 pnNodes)

パラメーター

pnノード

関数によって取得されたノードの数を格納する整数変数。

備考

この関数は、現在開いている STAAD ファイルのノード数を取得します。

Dim pnNodes を整数として

objOpenSTAAD.GetNodesCount pnNodes

4

2 に答える 2

0

コードの問題は、おそらく に何も割り当てていないことですpnNodes。VBA では、暗黙的Integerに のデフォルト値が与えられることを意味するとして厳密に型指定されているため、問題ありません。0VBScript では型がないため、既定値は与えられません。事前に割り当てることができ、0おそらくうまくいくでしょう:

Dim objOpenSTAAD As Output
Dim pnNodes As Integer
Set objOpenSTAAD = CreateObject("OpenSTAAD.Output.1")
objOpenSTAAD.SelectSTAADFile "C:\SPRO2003\STAAD\Examp\US\examp08.std"
pnNodes = 0
objOpenSTAAD.GetNodesCount pnNodes

ただし、ほとんどの場合、あなたの意図はこの値にすることではありません0(私は推測しています)。これは、この変換プロセスがバグを見つけるのに役立ったことを意味します :)

于 2015-03-21T12:38:57.920 に答える
0

CInt(pnNodes) をパラメーターとして使用すると、書き込み可能な変数ではなく、関数の結果が .GetNodesCount に渡されます。Voodoo ですが、テストは簡単です。

Dim objOpenSTAAD : Set objOpenSTAAD = CreateObject("OpenSTAAD.Output.1")
Dim pnNodes : pnNodes = CInt(0) ' initialized to sub type Integer
Dim nNodes ' uninitialized (Empty)
objOpenSTAAD.SelectSTAADFile "C:\SPRO2003\STAAD\Examp\US\examp08.std"
objOpenSTAAD.GetNodesCount pnNodes ' may work
nNodes = objOpenSTAAD.GetNodesCount(pnNodes) ' fallback

wrt コメントを更新:

objOpenSTAAD.GetNodesCount CInt(pnNodes)「エラーを取り除きました」を使用して言ったように、試してください

nNodes = objOpenSTAAD.GetNodesCount(CInt(pnNodes)) 

nNodesに書き込めなかった結果が得られることを願っていますCInt(pnNodes)

3番目の考えについて:

この投稿によると、pnNodes パラメーターに必要なデータ型は(整数ではなく) Longである可能性があります。したがって、代わりに を使用して上記のバリエーションを試してください。CLngCInt

于 2015-03-21T13:43:36.207 に答える