Тема: Точка вставки блока

Указываю точку вставки блока
ThisDrawing.Utility.GetPoint(, "Укажите точку вставки:")
При нажатии escape выдает ошибку. Как этого избежать ?

Re: Точка вставки блока

Отловить ошибку с помощью On Error. Узнать ее номер Err.Number. А в дальнейшем при появлении ошибки с этим номером, выполнять заранее спланированоое действие (выход из программы, продолжение работы и т.д.)

Re: Точка вставки блока

Вот она  и не ловится потому что останавливается на строке ThisDrawing.Utility.GetPoint(, "Укажите точку вставки:")

Re: Точка вставки блока

Так напишите до вашего кода, например

On Error Resume Next

Re: Точка вставки блока

Можно отловить нажатие клавиши Esc с помошью API-функции GetAsyncKeyState:
http://www.cad.dp.ua/stats/a_vba/content.php?
content=acentity1.html#GetAsyncKeyState

Re: Точка вставки блока

> Romik
именно для этого случая лучше не On Error Resume Next, а On Error Goto Error_Control
вот примерно так:

Sub MyGetPoint()
On Error GoTo error_control
 insPnt = ThisDrawing.Utility.GetPoint(, "Укажите начальную точку:")
'какой-то код
 Exit Sub
error_control:
 If ErrorHandler Then
  Exit Sub
 Else
  Resume Next
 End If

Re: Точка вставки блока

да, забыл
End Sub
и самое важное - функцию обработки переменной Err

Function ErrorHandlerA() As Boolean
 Dim varCancel As Variant
 ErrorHandlerA = False
 Select Case Err.Number
  Case -2147352567
   varCancel = ThisDrawing.GetVariable("LASTPROMPT")
   If InStr(1, varCancel, "*Cancel*") <> 0 Or InStr(1, varCancel, "*&#207;&#240;&#229;&#240;&#226;&#224;&#237;&#238;*") <> 0 Then
    Err.Clear
    ErrorHandlerA = True
     GoTo Exit_Here
   Else
    Err.Clear
    'Resume Next
   End If
  Case -2145320928
   Err.Clear
   GoTo Exit_Here
  Case Else
   MsgBox Err.Description & " " & Err.Number
   Err.Clear
 End Select
Exit_Here:
End Function

Re: Точка вставки блока

хм....
вместо
"*&#207;&#240;&#229;&#240;&#226;&#224;&#237;&#238;*"
должно быть написано "*Прервано*"
сайтописатели перемудрили где-то...

Re: Точка вставки блока

Всем спасибо , вроде разобрался !!!

Re: Точка вставки блока

Предлагаемый вариант не лучше вышеизложенного, но несколько определенней и наглядней. Да и вообще всегда неплохо иметь варианты:

Option Explicit
Public Const VK_ESCAPE = &H1B
Declare Function GetAsyncKeyState Lib "user32" _
(ByVal vKey As Long) As Integer
Sub Example_GetPoint()
    Dim returnPnt As Variant
    On Error GoTo error_control
    ' Return a point using a prompt
    returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ")
    Exit Sub
error_control:
  ' в случае ошибки проверяем
  ' не нажата ли клавиша ESC:
  If CheckKey(VK_ESCAPE) Then
     MsgBox "Программа прервана по клавише Esc!"
     Exit Sub
  End If
End Sub
Function CheckKey(lngKey As Long) As Boolean
  If GetAsyncKeyState(lngKey) Then
    CheckKey = True
  Else
    CheckKey = False
  End If
End Function

Re: Точка вставки блока

Чёйто вы народ мудрите, вот:
Private Sub ккк()
Dim точка
On Error Resume Next
точка = ThisDrawing.Utility.GetPoint(, "Укажите точку вставки:")
MsgBox CStr(точка(1))
End Sub
'при нажатии ESC выдает:
'Command: Укажите точку вставки:*Cancel*