> Дарья
код Леонида не совсем то, что мне нужно:
Уверен, это именно то, что вам нужно. Может просто мало написал... Освоить построение программы, ее архитектуру важнее чем научиться работать с отдельными элементами предметной области, в нашем случае - с элементами AutoCAD.
Давайте попробуем сделать все как положено:
Форма у нас, как я понимаю, уже имеется. И на ней есть кнопка OK а также CheckBox1 и CheckBox1. Форму я бы назвал как-нибудь так:
F_MyForm.
Теперь вставим два модуля с именами:
M_Consant
M_Main.
В код формы поместим такую процедуру:
Private Sub CmdOK_Click()
If (Me.CheckBox1.Value) Then
Call Select1
ElseIf (Me.CheckBox2.Value) Then
Call Select2
ElseIf (Me.CheckBox1.Value) And (Me.CheckBox2.Value) Then
Call Select3
Else
Call Select4
End If
End Sub
В модуль M_Consant в секцию (General)(Declarations) поместим след. код -
Public Const SET_NAME As String = "MySet"
Public Const BLOCK_NAME As String = "MyBlock"
Public Const LAYER_1 As String = "MyLayer1"
Public Const LAYER_2 As String = "MyLayer2"
В модуль M_Main поместим след. код -
Option Explicit
'---------------------------------------------------
Public Sub Select1()
Dim gpCode(5) As Integer
Dim dataValue(5) As Variant
gpCode(0) = -4: dataValue(0) = "<AND"
gpCode(1) = 67: dataValue(1) = 1
gpCode(2) = 0: dataValue(2) = "INSERT"
gpCode(3) = 2: dataValue(3) = M_Constant.BLOCK_NAME
gpCode(4) = 8: dataValue(4) = M_Constant.LAYER_1
gpCode(5) = -4: dataValue(5) = "AND>"
Dim groupCode As Variant, dataCode As Variant
groupCode = gpCode
dataCode = dataValue
Call vSelect(groupCode, dataCode)
End Sub
Public Sub Select2()
Dim gpCode(5) As Integer
Dim dataValue(5) As Variant
gpCode(0) = -4: dataValue(0) = "<AND"
gpCode(1) = 67: dataValue(1) = 1
gpCode(2) = 0: dataValue(2) = "INSERT"
gpCode(3) = 2: dataValue(3) = M_Constant.BLOCK_NAME
gpCode(4) = 8: dataValue(4) = M_Constant.LAYER_2
gpCode(5) = -4: dataValue(5) = "AND>"
Dim groupCode As Variant, dataCode As Variant
groupCode = gpCode
dataCode = dataValue
Call vSelect(groupCode, dataCode)
End Sub
Public Sub Select3()
Dim gpCode(6) As Integer
Dim dataValue(6) As Variant
gpCode(0) = -4: dataValue(0) = "<AND"
gpCode(1) = 67: dataValue(1) = 1
gpCode(2) = 0: dataValue(2) = "INSERT"
gpCode(3) = 2: dataValue(3) = M_Constant.BLOCK_NAME
gpCode(4) = 8: dataValue(4) = M_Constant.LAYER_1
gpCode(5) = 8: dataValue(5) = M_Constant.LAYER_2
gpCode(6) = -4: dataValue(6) = "AND>"
Dim groupCode As Variant, dataCode As Variant
groupCode = gpCode
dataCode = dataValue
Call vSelect(groupCode, dataCode)
End Sub
Public Sub Select4()
Dim gpCode(4) As Integer
Dim dataValue(4) As Variant
gpCode(0) = -4: dataValue(0) = "<AND"
gpCode(1) = 67: dataValue(1) = 1
gpCode(2) = 0: dataValue(2) = "INSERT"
gpCode(3) = 2: dataValue(3) = M_Constant.BLOCK_NAME
gpCode(4) = -4: dataValue(4) = "AND>"
Dim groupCode As Variant, dataCode As Variant
groupCode = gpCode
dataCode = dataValue
Call vSelect(groupCode, dataCode)
End Sub
Private Sub vSelect(groupCode As Variant, dataCode As Variant)
Dim ss As AcadSelectionSet
On Error Resume Next
ThisDrawing.SelectionSets.Item(M_Constant.SET_NAME).Delete
Set ss = ThisDrawing.SelectionSets.Add(M_Constant.SET_NAME)
Dim mode As Integer
mode = acSelectionSetAll
ss.Select mode, , , groupCode, dataCode
MsgBox ss.Count
End Sub
И попробуйте мне сказать, что эта конструкция не работает!
Еще пара слов попутно.
Для работы программы (в нашем случае) неважно в каком порядке расположены условия в конструкции:
If () then
-----
ElseIf
------
End if
Располагайте их так, чтобы вам было легче читать код.
Я выбрал более лаконичный вариант, чтобы избежать трудно воспринимаемых выражений типа:
If Not (IsEmpty(fData(0))) Or fData(0) <> "" Then