vla-runmacro的使用问题
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">下面的<span lang="EN-US">VBA小程序在IDE环境下可以正常运行, 可用</span><font face="Century">vla-runmacro</font>调用时<span lang="EN-US">,不能正常运行, 不知道是什么原因.<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">1. VBA小程序<span lang="EN-US"><p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">内容: 连续指定圆心<span lang="EN-US">, 画半径5的圆, 画错时输入u删除, 按回车健中止程序.<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Century">'</font>文件名设定为 <font face="Century">uuu.dvb, </font>内容如下<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">Option Explicit<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">Public Sub UUU()<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Dim circleObj As AcadCircle<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Dim centerPoint(0 To 2) As Double<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Dim radius As Double<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Dim keywordList As String<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Dim inputString As String<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Dim i As Integer<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Dim ifloop As Integer<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Dim returnPnt As Variant<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> keywordList = "Undo"<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> radius = 5#<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> ifloop = 0<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> i = 0<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">Do<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> ThisDrawing.StartUndoMark<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">MARKUNDO:<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> On Error GoTo myerror<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> ThisDrawing.Utility.InitializeUserInput 128, keywordList<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> returnPnt = ThisDrawing.Utility.GetPoint(, "</span>圆心:")<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> centerPoint(0) = returnPnt(0)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> centerPoint(1) = returnPnt(1)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> centerPoint(2) = returnPnt(2)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> ThisDrawing.EndUndoMark<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">Loop While ifloop = 0<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">myerror:<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> If Err Then<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Err.Clear<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> inputString = ThisDrawing.Utility.GetInput<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Select Case inputString<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Case "Undo"<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> ThisDrawing.EndUndoMark<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> ThisDrawing.SendCommand "_Undo 2 "<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> ThisDrawing.StartUndoMark<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Resume MARKUNDO<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Case ""<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> </span>Exit Sub<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Case Else<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> MsgBox "</span>无效关键字:" & inputString, vbOKOnly, "Input keyword"<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> </span>ThisDrawing.Utility.InitializeUserInput 128, keywordList<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> i = i + 1<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> If i <= 1 Then<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Resume<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Else<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> ThisDrawing.EndUndoMark<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> Exit Sub<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> End If<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> End Select<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;"> End If<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">End Sub<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><p> </p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">2. 用<font face="Century">vla-runmacro</font>调用上面的<span lang="EN-US">VBA宏(我把上面的VBA文件uuu.dvb定义在硬盘的C的根目录下)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Century"><span style="mso-spacerun: yes;"> (vl-load-com)</span><p></p></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Century"><span style="mso-spacerun: yes;"> (vla-runmacro (vlax-get-acad-object) "c:\\uuu.dvb!uuu")</span><p></p></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">运行时<font face="Century">,</font>可以正常画圆<font face="Century">, </font>但当画错要修改时<font face="Century">, </font>输入<font face="Century">u, </font>就出错<font face="Century">.<p></p></font></p><p>错误总是与<span style="mso-spacerun: yes;"> </span>ThisDrawing.SendCommand "_Undo 2 "<span style="mso-spacerun: yes;"> </span>语句有关<span lang="EN-US">, 不知道什么原因,</span></p><p><span lang="EN-US">恳请指教.</span></p><p><span lang="EN-US"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-language: ZH-CN;"><font face="Century">下面的附加</font>文件为 <font face="Century">uuu.dvb</font></span></span></p><p></p> <p>自己编写撤消机制,不要用undo。</p><p>这应该很简单。可以这样做,添加对象时记住对象的ID,撤消时就删除指定的ID的对象。</p>
页:
[1]