马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在VBA里,AutoCAD的Application对象有一个函数Eval,这个函数的意义是在当前工程中不用创建过程或函数而执行一行VBA的代码。
用法:object.Eval(Expression)
object Application对象
Expression 要执行的代码
既然可以执行VBA的代码,那么就可以用来作公式计算器了,但它没有返回值,如何实现呢?在CAD中预留了15个用户使用的变量,可以临时保存数据,那我们就利用这些变量来实现吧。
看下面的过程,由于数据保存在字符串变量中,故在执行计算之前的Expr必须为字符串。
- [FONT=courier new]
- Private Function AcadEval(ByVal Expr As String) As String
- Dim s As String
-
- On Error Resume Next
- s = ThisDrawing.GetVariable("users1")
- Application.Eval "ThisDrawing.SetVariable ""users1""," & Expr '这里的Expr值必须为字符串,因而设置变量时不会自动转换数据的类型。
- If Err.Number = 0 Then AcadEval = ThisDrawing.GetVariable("users1")
- ThisDrawing.SetVariable "users1", s
- End Function
- [/FONT]
- [FONT=courier new]
- Sub Test()
- Debug.Print AcadEval("CStr(Abs(7-8-9))")
- Debug.Print AcadEval("Left(""AtuoCAD 2000"",7)")
- End Sub
- [/FONT]
上面的测试代码中,第一个是求7-8-9的绝对值,第二个是求"AtuoCAD 2000"的前七位字符。结果如下: |