找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 917|回复: 5

[VBA函数]:请教一个问题!!!

[复制链接]
发表于 2003-8-28 16:22:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
请问VBA中的GetCExpressionValue和SetCExpressionValue是什么意思?后面的参数是宏命令,请问这些命令在那里找啊???还有顺便解释一下CadInputQueue对象吧。求VBA的其他帮助,不盛感激!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-8-28 17:20:20 | 显示全部楼层
An MDL program must first create and publish a variable before it can be accessed by a VBA application. Once this is done, a VBA program can use the GetCExpressionValue method of the Application object to retrieve the value of the variable. The Visual Basic programmer must know at design time the name of the published variable, though its type is not necessary. A variant is used to receive the value of the named variable.

To set the value of a published variable, a similar method of the Application object is used, SetCExpressionValue
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-28 17:43:16 | 显示全部楼层
转贴Bentley技术邮件

VBA可以通过共享结构以及MDL函数和命令和MDL进行通讯。

例子代码:
VBA程序bentley\workspace\system\vba\examples\mdl2vba.mvba
MDL程序mdl\examples\vba2mdl

预备知识:C表达式计算器
C表达式函数用于在运行时分析和处理C表达式。MicroStation对话框管理器使用这些函数来计算存取字符串,设置和获取对话框条目的值。MDL调试器用这些函数来计算调试时输入的表达式。一个表达式中可以包含变量和函数引用。在一个变量或函数可以在表达式中使用之前,它们的名称必须作为一个符号使用mdlCExpression_symbolPublish函数公布。符号使用符号集来管理。一个MDL程序必须先创建一个符号集后才能发布一个符号。当符号集释放的时候,里面所有发布符号的定义都会被去除。一个符号集和创建它的MDL程序相关连,当MDL程序卸载了,对应的符号集也被释放。mdlCExpression_initializeSet指明符号集是全局的还是私有的。如果是全局的,那么所有的MDL程序都可以使用这个集合中的符号。当解析一个符号时,C表达式计算器首先查找对应的MDL程序的私有符号集,然后找全局符号集。如果都没找到,它会继续搜索MicroStation的内建函数列表。如果希望符号可以被对话框管理器的存取字符串使用,那么符号集要设置可视属性VISIBILITY_DIALOG_BOX。如果要被MicroStation的key-in预处理器使用,必须设置为全局的,可视属性为VISIBILITY_CALCULATOR。

Vba2mdl这个MDL程序中提供了两个函数和一个keyin命令让vba程序使用。
一个是mdl2VbaInfo_printStructure,功能是打印出共享的一个结构。
另一个是mdl2VbaInfo_function,功能是打印出vba调用时传递的三个参数值,并且将第二个参数值+3返回。
命令vba2mdlCommand的功能是将keyin调用时的字符串参数拷贝到共享结构中的一个字符串变量中。

还有个命令runVbaMacro是用于运行vba测试程序mdl2vba,其中可以看到一个有用的mdl函数mdlVBA_runMacro(项目名,模块名,宏名),用于在MDL程序中调用一个VBA写的宏。

让我们看看MDL程序中的main函数:
1.        使用mdlCExpression_initializeSet创建了一个可视属性为VISIBILITY_CALCULATOR的符号集。
2.        使用mdlCExpression_typeFromRsc从资源文件中读取共享结构mdl2VbaInfo,生成在内存中的定义。
3.        使用mdlCExpression_symbolPublish发布内存中的共享结构和前面提到的两个函数,使它们可以被vba程序访问和使用。

mdl2vba中只有一个宏Vba2MdlTest:
1.        使用GetCExpressionValue获取共享结构mdl2VbaInfo中的值
例如GetCExpressionValue("mdl2VbaInfo.d1", "vba2mdl")
2.        使用GetCExpressionValue调用MDL程序中的函数
例如result = GetCExpressionValue("mdl2VbaInfo_function (100.5, 10, 20)", "vba2mdl")
3.        使用SetCExpressionValue直接设置共享结构mdl2VbaInfo的值
例如SetCExpressionValue "mdl2VbaInfo.asciiString", "FOR THE ASCII STRING", "vba2mdl"
4.        通过执行keyin访问MDL程序中的命令
例如CadInputQueue.SendKeyin "mdl command vba2mdlCommand COPY THIS STRING"

至此我们可以看到VBA和MDL之间通过C表达式的通讯还是很简便易用的。




LiuJun
Bentley Shanghai
GeoSpatial AE
Tel: +86 21 3311 0228
Fax:+86 21 6375 8298
Email: jun.liu@Bentley.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-29 10:16:59 | 显示全部楼层
还是不明白!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-29 10:39:36 | 显示全部楼层
我也是看的不明白 不过是vba和mdl的接口 用处不大 函数那么多 我看还是看看那些用到的把
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-29 11:05:25 | 显示全部楼层
gp341不要误导其他人,mdlCExpression_XXX又不是仅仅只用来做VBA的接口,用它建立一种VBA访问mdl中结构和函数的渠道只是一方面。上面不是说得很明白:MicroStation对话框管理器使用这些函数来计算存取字符串,设置和获取对话框条目的值。而且mdl debuger也需要用到。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 16:25 , Processed in 0.378044 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表