Тема: Точка вставки блока
Указываю точку вставки блока
ThisDrawing.Utility.GetPoint(, "Укажите точку вставки:")
При нажатии escape выдает ошибку. Как этого избежать ?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Точка вставки блока
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Указываю точку вставки блока
ThisDrawing.Utility.GetPoint(, "Укажите точку вставки:")
При нажатии escape выдает ошибку. Как этого избежать ?
Отловить ошибку с помощью On Error. Узнать ее номер Err.Number. А в дальнейшем при появлении ошибки с этим номером, выполнять заранее спланированоое действие (выход из программы, продолжение работы и т.д.)
Вот она и не ловится потому что останавливается на строке ThisDrawing.Utility.GetPoint(, "Укажите точку вставки:")
Так напишите до вашего кода, например
On Error Resume Next
Можно отловить нажатие клавиши Esc с помошью API-функции GetAsyncKeyState:
http://www.cad.dp.ua/stats/a_vba/content.php?
content=acentity1.html#GetAsyncKeyState
> 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
да, забыл
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, "*Ïðåðâàíî*") <> 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
хм....
вместо
"*Ïðåðâàíî*"
должно быть написано "*Прервано*"
сайтописатели перемудрили где-то...
Предлагаемый вариант не лучше вышеизложенного, но несколько определенней и наглядней. Да и вообще всегда неплохо иметь варианты:
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
Чёйто вы народ мудрите, вот:
Private Sub ккк()
Dim точка
On Error Resume Next
точка = ThisDrawing.Utility.GetPoint(, "Укажите точку вставки:")
MsgBox CStr(точка(1))
End Sub
'при нажатии ESC выдает:
'Command: Укажите точку вставки:*Cancel*
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Точка вставки блока
Форум работает на PunBB, при поддержке Informer Technologies, Inc