找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 616|回复: 0

[讨论]:在VBA中实现公式计算

[复制链接]

已领礼包: 181个

财富等级: 日进斗金

发表于 2002-11-20 14:26:16 | 显示全部楼层 |阅读模式

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

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

×
在VBA里,AutoCAD的Application对象有一个函数Eval,这个函数的意义是在当前工程中不用创建过程或函数而执行一行VBA的代码。
    用法:object.Eval(Expression)
object Application对象
Expression 要执行的代码
    既然可以执行VBA的代码,那么就可以用来作公式计算器了,但它没有返回值,如何实现呢?在CAD中预留了15个用户使用的变量,可以临时保存数据,那我们就利用这些变量来实现吧。
    看下面的过程,由于数据保存在字符串变量中,故在执行计算之前的Expr必须为字符串。

  1.   [FONT=courier new]
  2. Private Function AcadEval(ByVal Expr As String) As String
  3.     Dim s As String
  4.    
  5.     On Error Resume Next
  6.     s = ThisDrawing.GetVariable("users1")
  7.     Application.Eval "ThisDrawing.SetVariable ""users1""," & Expr '这里的Expr值必须为字符串,因而设置变量时不会自动转换数据的类型。
  8.     If Err.Number = 0 Then AcadEval = ThisDrawing.GetVariable("users1")
  9.     ThisDrawing.SetVariable "users1", s
  10. End Function
  11.   [/FONT]


  1.   [FONT=courier new]
  2. Sub Test()
  3.     Debug.Print AcadEval("CStr(Abs(7-8-9))")
  4.     Debug.Print AcadEval("Left(""AtuoCAD 2000"",7)")
  5. End Sub
  6.   [/FONT]

上面的测试代码中,第一个是求7-8-9的绝对值,第二个是求"AtuoCAD 2000"的前七位字符。结果如下:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-22 06:28 , Processed in 0.202025 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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