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 文档:

获取节点数

VB 语法

整数 GetNodesCount(整数 pnNodes)

参数

pn节点

一个整数变量,用于存储函数检索到的节点数。

评论

此函数检索当前打开的 STAAD 文件中的节点数。

例子

将 pnNodes 变暗为整数

objOpenSTAAD.GetNodesCount pnNodes

4

2 回答 2

0

您的代码的问题可能是您没有为pnNodes. 在 VBA 中,这没关系,因为它被强类型化为 an ,这意味着它被隐式地Integer赋予了默认值。0在 VBScript 中,它没有被赋予默认值,因为没有类型。您可以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)

第三个想法:

根据这篇文章,pnNodes 参数所需的数据类型可能Long(而不是 Integer)。因此,请尝试上述变体,CLng而不是CInt

于 2015-03-21T13:43:36.207 回答