2017-10-17 66 views
0

我目前正在为AutoCAD生成图形代码,为了生成图形,必须选择某些选项,并且当选择了错误的选项时,该人员可以点击返回去纠正这个选项。下面是我的代码,问题是代码不会在单击“返回”时删除之前选择的数据,例如,如果我选择“SBPP”点击输入并且需要我选择“Louvres”选项,则I想回去,并从“SBPP”到“STD管道”,先前选择“SBPP”改变,必须先擦除:删除以前选择的数据

Sub DWG() 
    Pump: ans = InputBox("1 = STD Piping" & vbCrLf & _ 
       "2 = Omit Pump" & vbCrLf & _ 
       "3 = SBPP", "Pump Piping") 

    Select Case ans 

    Case "1": 
    : Set layerObj = ThisDrawing.Layers.Add("PUMP_PIPING_" & Size) 
       layerObj.LayerOn = True 
    Case "2": 

    : Set layerObj = ThisDrawing.Layers.Add("OMIT_PUMP_" & Size) 
       layerObj.LayerOn = True 
    Case "3": 

    : Set layerObj = ThisDrawing.Layers.Add("STBP_" & Size) 
       layerObj.LayerOn = True 


    Case Else: MsgBox "Wrong Input Dude.", vbCritical, MSG: Exit Sub 

    End Select 

'______________________________________________________________________________ 
    'Option for Louvres 

     Louver: ans = InputBox("1 = STD Louvers" & vbCrLf & _ 
       "2 = IND louvers" & vbCrLf & _ 
       "3 = Back ", "Pump Piping") 

    Select Case ans 

    Case "1": 

    : Set layerObj = ThisDrawing.Layers.Add("LOUVRES_STD") 
       layerObj.LayerOn = True 

    Case "2": 

    : Set layerObj = ThisDrawing.Layers.Add("LOUVRES_INDUS") 
       layerObj.LayerOn = True 

    Case "3": 

    If ans = 3 Then 
    GoTo Pump 
    End If 

    Case Else: MsgBox "Wrong Input Dude.", vbCritical, MSG: Exit Sub 

    End Select 
End Sub 

我怎么能修改此代码,这样,当“背”点击是它以前将清除选择的数据?

回答

1

这是一个流程逻辑问题。你必须使用周期来完成你的目标。 “撤消”你以前的选项不是由您定义,我猜:

Sub DWG() 
    Dim ans1 As String, ans2 As String, err_msg As String 

    Do 'This cycle will begin and repeat when [Back] is choosen 

     Select Case ans1 'Undo previous operation 
     Case 1 
      ThisDrawing.Layers("PUMP_PIPING_" & size).Delete 
     Case "2" 
      ThisDrawing.Layers.Add("OMIT_PUMP_" & size).Delete 
     Case "3" 
      ThisDrawing.Layers.Add("STBP_" & size).Delete 
     End Select 


     err_msg = "" 

     Do 'This cycle will repeat until first answer is accepted 
      ans1 = InputBox(err_msg & _ 
          "1 = STD Piping" & vbCrLf & _ 
          "2 = Omit Pump" & vbCrLf & _ 
          "3 = SBPP", "Pump Piping") 

      Select Case ans1 
      Case "1" 
       Set layerObj = ThisDrawing.Layers.Add("PUMP_PIPING_" & size) 
       layerObj.LayerOn = True 
      Case "2" 
       Set layerObj = ThisDrawing.Layers.Add("OMIT_PUMP_" & size) 
       layerObj.LayerOn = True 
      Case "3" 
       Set layerObj = ThisDrawing.Layers.Add("STBP_" & size) 
       layerObj.LayerOn = True 
      Case "" '[Cancel] button 
       Exit Sub 
      Case Else 
       err_msg = "Wrong Input Dude." & vbCrLf & vbCrLf 
       ans1 = "" 
      End Select 
     Loop While ans1 = "" 

     err_msg = "" 
     Do 
      ans2 = InputBox(err_msg & _ 
          "1 = STD Louvers" & vbCrLf & _ 
          "2 = IND louvers" & vbCrLf & _ 
          "3 = Back ", "Pump Piping") 

      Select Case ans2 
      Case "1" 
       Set layerObj = ThisDrawing.Layers.Add("LOUVRES_STD") 
       layerObj.LayerOn = True 
      Case "2" 
       Set layerObj = ThisDrawing.Layers.Add("LOUVRES_INDUS") 
       layerObj.LayerOn = True 
      Case "3" 
       'Do nothing, loop control 
      Case "" '[Cancel] button 
       Exit Sub 
      Case Else 
       err_msg = "Wrong Input Dude." & vbCrLf & vbCrLf 
       ans2 = "" 
      End Select 
     Loop While ans2 = "" 
    Loop While ans2 = "3" 
End Sub 

也做了一些改变:

  1. 手柄[取消]按钮;
  2. 在输入框中合并错误消息,因此用户在错误完成时不必按很多按钮;
  3. 取得了较为传统的代码格式

第二部分 - 替代

Sub DWG() 
    Dim ans1, ans2 

    ans1 = Choose(Val(InputBox("1 = STD Piping" & vbCrLf & "2 = Omit Pump" & vbCrLf & "3 = SBPP", "Pump Piping")), "PUMP_PIPING_", "PUMP_PIPING_", "PUMP_PIPING_") 
    If IsNull(ans1) Then MsgBox "Wrong Input Dude.": Exit Sub 

    ans2 = Choose(Val(InputBox("1 = STD Louvers" & vbCrLf & "2 = IND louvers")), "LOUVRES_STD", "LOUVRES_INDUS") 
    If IsNull(ans2) Then MsgBox "Wrong Input Dude.": Exit Sub 

    ThisDrawing.Layers.Add(ans1 & Size).LayerOn = True 
    ThisDrawing.Layers.Add(ans2).LayerOn = True 

End Sub 
+0

感谢变化@LS_ᴅᴇᴠ但代码“做之前询问”还在做着同样的事情,当选项是在输入框中选择的,该图层是通过图形打开的,当您点击后,它不会删除先前的图层,而是在其上创建一个不同的图形并创建一个笨拙的图形。 – Kwezi

+0

当然它不......那个“撤销”代码不是你指定的。让我检查 –

+0

在这个 – Kwezi