jkbanana 发表于 2007-4-23 08:44:00

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;">&nbsp;&nbsp;&nbsp; Dim circleObj As AcadCircle<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; Dim centerPoint(0 To 2) As Double<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp; &nbsp;Dim radius As Double<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; Dim keywordList As String<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; Dim inputString As String<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; Dim i As Integer<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; Dim ifloop As Integer<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; Dim returnPnt As Variant<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; keywordList = "Undo"<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; radius = 5#<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; ifloop = 0<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp; 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;">&nbsp; 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;">&nbsp; On Error GoTo myerror<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp; ThisDrawing.Utility.InitializeUserInput 128, keywordList<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp; returnPnt = ThisDrawing.Utility.GetPoint(, "</span>圆心:")<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp; centerPoint(0) = returnPnt(0)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp; centerPoint(1) = returnPnt(1)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp; centerPoint(2) = returnPnt(2)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp; Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp; 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;">&nbsp; If Err Then<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp; Err.Clear<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp; inputString = ThisDrawing.Utility.GetInput<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp; Select Case inputString<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case "Undo"<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.EndUndoMark<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.SendCommand "_Undo 2 "<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.StartUndoMark<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resume MARKUNDO<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case ""<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Exit Sub<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case Else<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "</span>无效关键字:" &amp; inputString, vbOKOnly, "Input keyword"<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ThisDrawing.Utility.InitializeUserInput 128, keywordList<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i + 1<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If i &lt;= 1 Then<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resume<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThisDrawing.EndUndoMark<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp; End Select<p></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><span style="mso-spacerun: yes;">&nbsp; 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>&nbsp;</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;">&nbsp;&nbsp; (vl-load-com)</span><p></p></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;"><font face="Century"><span style="mso-spacerun: yes;">&nbsp;&nbsp; (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;">&nbsp; </span>ThisDrawing.SendCommand "_Undo 2 "<span style="mso-spacerun: yes;">&nbsp; </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>

mccad 发表于 2007-5-1 21:14:00

<p>自己编写撤消机制,不要用undo。</p><p>这应该很简单。可以这样做,添加对象时记住对象的ID,撤消时就删除指定的ID的对象。</p>
页: [1]
查看完整版本: vla-runmacro的使用问题