我试图使用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作为整数
objOpenSTAAD.GetNodesCount pnNodes
发布于 2015-03-21 12:38:57
代码的问题可能是您没有将任何东西分配给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 :)
发布于 2015-03-21 13:43:36
使用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更新wrt注释:
正如您所说的使用objOpenSTAAD.GetNodesCount CInt(pnNodes)“消除错误”,尝试
nNodes = objOpenSTAAD.GetNodesCount(CInt(pnNodes)) 并希望nNodes得到无法写入CInt(pnNodes)的结果。
On third third:
根据这个职位,pnNodes参数所需的数据类型可能是Long (而不是Integer)。因此,使用CLng而不是CInt来尝试上面的变体。
https://stackoverflow.com/questions/29182776
复制相似问题