我正在尝试使用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)
参数
pnNodes
一个整数变量,用于存储函数检索的节点数。
说明
此函数检索当前打开的STAAD文件中的节点数。
示例
Dim pnNodes As Integer
objOpenSTAAD.GetNodesCount pnNodes
答案 0 :(得分:0)
您的代码问题可能是您没有向pnNodes
分配任何内容。在VBA中,这没关系,因为它强类型为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
(我只是猜测),这意味着这个转换过程帮助你找到了一个bug :)
答案 1 :(得分:0)
使用CInt(pnNodes)作为参数将函数的结果(而不是可写变量)传递给.GetNodesCount。巫毒教,但很容易测试:
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
更新评论:
如你所说使用objOpenSTAAD.GetNodesCount CInt(pnNodes)
"摆脱错误",试试
nNodes = objOpenSTAAD.GetNodesCount(CInt(pnNodes))
并希望nNodes
获得无法写入CInt(pnNodes)
的结果。
第三个想法:
根据this post,pnNodes参数所需的数据类型可能 长(而不是整数)。因此,请使用CLng
代替CInt
尝试上述变体。