将Staad与VBS一起使用(将VBA文档转换为VBscript)

时间:2015-03-21 12:36:00

标签: vba vbscript strong-typing weak-typing

我正在尝试使用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

2 个答案:

答案 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尝试上述变体。