首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VBS中使用Staad (将VBA文档转换为VBscript)

在VBS中使用Staad (将VBA文档转换为VBscript)
EN

Stack Overflow用户
提问于 2015-03-21 12:36:00
回答 2查看 1K关注 0票数 2

我试图使用vbscript从Staad (一个结构分析程序)中提取数据。

Staad有一个API来允许这一点,然而,所有的文档都在VBA中。因此,我试图将VBA转换为VBscript,但我得到了错误。

例如,下面是Staad文档中的一些VBA,用于获取模型中节点的总数:

代码语言:javascript
复制
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运行,我所做的唯一改变就是从变量中删除数据类型。我得到的错误是:

代码语言:javascript
复制
Type mismatch: 'GetNodesCount'

有人能提供任何想法吗?如果有帮助,下面是GetNodesCount函数的Staad文档:

GetNodesCount

VB语法

整数GetNodesCount (整数pnNodes)

参数

pnNodes

用于存储函数检索的节点数的整数变量。

备注

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

示例

Dim pnNodes作为整数

objOpenSTAAD.GetNodesCount pnNodes

EN

回答 2

Stack Overflow用户

发布于 2015-03-21 12:38:57

代码的问题可能是您没有将任何东西分配给pnNodes。在VBA中,这是可以的,因为它是强类型的Integer,这意味着它被隐式地赋予了0的默认值。在VBScript中,没有给出默认值,因为没有类型。您可以提前为它分配一个0,它可能会工作:

代码语言:javascript
复制
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 :)

票数 0
EN

Stack Overflow用户

发布于 2015-03-21 13:43:36

使用CInt(pnNodes)作为参数将函数的结果(而不是可写变量)传递给.GetNodesCount。巫毒,但很容易检验:

代码语言:javascript
复制
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)“消除错误”,尝试

代码语言:javascript
复制
nNodes = objOpenSTAAD.GetNodesCount(CInt(pnNodes)) 

并希望nNodes得到无法写入CInt(pnNodes)的结果。

On third third:

根据这个职位,pnNodes参数所需的数据类型可能是Long (而不是Integer)。因此,使用CLng而不是CInt来尝试上面的变体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29182776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档