Показать сообщение отдельно
Непрочитано 05.03.2009, 20:14 #1
VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка
Alexey_02
 
Москва
Регистрация: 23.05.2007
Сообщений: 94

В ниже приведенном коде создается объект в нулевом слое. После построения происходит возврат в начальное состояние слоев и возврат активного слоя. Предусмотрено, что если нулевой слой был выключен, заморожен или заблокирован, то вернуть его в это же состояние. вкл./выкл., блок./разбл. работает, а вот когда нулевой слой был заморожен, при его возврате возникает ошибка возникает.
run-time error '-2145386348(80200094)
Неверный слой. Помогите, пожалуйста, разобраться, где ошибка, что не предусмотрел.
Код:
[Выделить все]
Private Sub CmdOK_Click()
    Dim dblStartPointX0 As Double
    Dim dblStartPointY0 As Double
    Dim dblStartPointZ0 As Double
    Dim dblStartPoint(0 To 2) As Double
    Dim dblEndPoint(0 To 2) As Double
    Dim boolLayer0On As Boolean
    Dim boolLayer0Freeze As Boolean
    Dim boolLayer0Lock As Boolean
    Dim objLine As AcadLine
    Dim strCurrentActiveLayer As String

    dblStartPointX0 = 0: dblStartPointY0 = 0: dblStartPointZ0 = 0
    
    strCurrentActiveLayer = ThisDrawing.ActiveLayer.Name
    
    With ThisDrawing.Layers(0)
        If .LayerOn = False Then
            boolLayer0On = False
            .LayerOn = True
        Else
            boolLayer0On = True
        End If
        If .Freeze = True Then
            .Freeze = False
            boolLayer0Freeze = True
        Else
            boolLayer0Freeze = False
        End If
        If .Lock = True Then
            .Lock = False
            boolLayer0Lock = True
        Else
            boolLayer0Lock = False
        End If
        .color = acWhite
        .Linetype = "continuous"
        .Lineweight = acLnWt025
    End With

    If ThisDrawing.ActiveLayer.Name <> "0" Then
        ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
    End If

    'Построение объекта
    dblStartPoint(0) = dblStartPointX0: dblStartPoint(1) = dblStartPointY0: dblStartPoint(2) = dblStartPointZ0
    dblEndPoint(0) = dblStartPointX0 + 100: dblEndPoint(1) = dblStartPointY0 + 100: dblEndPoint(2) = dblStartPointZ0
    Set objLine = ThisDrawing.ModelSpace.AddLine(dblStartPoint, dblEndPoint)


    With ThisDrawing.Layers(0)
    If boolLayer0On = False Then
        .LayerOn = False 'ThisDrawing.Layers(0).LayerOn = False
        MsgBox "Вставлено в 0 слой, но он выключен. Для просмотра вставленного включите 0 слой."
    End If
    If boolLayer0Freeze = True Then
        .Freeze = True  'ТУТ ВОЗНИКАЕТ ОШИБКА
        MsgBox "Вставлено в 0 слой, но он заморожен. Для просмотра вставленного разморозте 0 слой."
    End If
    If boolLayer0Lock = True Then
        .Lock = True 'ThisDrawing.Layers(0).Lock = True
    End If
    End With

    ThisDrawing.ActiveLayer = ThisDrawing.Layers(strCurrentActiveLayer)
    ZoomAll
End Sub
__________________
Вот так вот, ...
Просмотров: 2495
 
Реверс. Автоматическая пакетная печать множества рамок (форматов) из пространства модели и листов
Размещение рекламы