Тема: Обработка полученных результатов поиска
Передо мной стоит задача, которую я никак не могу решить.
Мне надо проделать с результатом математические действия. Но для этого надо получить результат в наглядной форме.
К примеру он находит ДЕТАЛЬ №1. Нужно чтобы количество деталей №1 всегда попадало строго в TextBox 1, а затем разложить эту деталь на составляющие и вставить результат в TextBox 2 и TextBox 3. Примерная схема:
ПОИСК –> ДЕТАЛЬ №1 : 2ШТ (всегда в TextBox 1) –> БОЛТОВ : 4ШТ
(всегда в TextBox 2), ГАЕК : 2ШТ (всегда в TextBox 1)
–> ДЕТАЛЬ №2 : 2ШТ (всегда в TextBox 3) - БОЛТОВ : 4ШТ (всегда в TextBox 4),
ГАЕК : 2ШТ (всегда в TextBox 5)
–> ДЕТАЛЬ №3 : 2ШТ (всегда в TextBox 6) - БОЛТОВ : 4ШТ (всегда в TextBox 7),
ГАЕК : 2ШТ (всегда в TextBox 8)
И Т.Д. И Т.П.
Можно ли решить эту задачу???
Option Explicit
Option Base 0
Public Type typRes
sName As String
lRange As Long
End Type
Private Sub CommandButton2_Click()
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("10кВ")
layerObj.Freeze = True
Call CountBlockWithNames
End Sub
Public Sub CountBlockWithNames()
Dim oSelSet As AcadSelectionSet, SelSetName As String
Dim fType(0) As Integer, fData(0) As Variant
Dim oAcadEnt As AcadEntity
Dim Result() As typRes, lCounter As Long, AddNew As Boolean
Unload Me
SelSetName = "bc"
For Each oSelSet In ThisDrawing.SelectionSets
If oSelSet.Name = SelSetName Then
oSelSet.Delete
Exit For
End If
Next oSelSet
Set oSelSet = ThisDrawing.SelectionSets.Add(SelSetName)
fType(0) = 0: fData(0) = "INSERT"
oSelSet.SelectOnScreen fType, fData
For Each oAcadEnt In oSelSet
On Error GoTo lErrorReDim
If UBound(Result) < 0 Then
ReDim Result(0)
'On Error GoTo 0
Result(0).sName = oAcadEnt.Name
Result(0).lRange = 1
Else
AddNew = True
For lCounter = 0 To UBound(Result)
If Result(lCounter).sName = oAcadEnt.Name Then
Result(lCounter).lRange = Result(lCounter).lRange + 1
AddNew = False
Exit For
End If
Next lCounter
If AddNew Then
ReDim Preserve Result(UBound(Result) + 1)
Result(UBound(Result)).sName = oAcadEnt.Name
Result(UBound(Result)).lRange = 1
End If
End If
Next oAcadEnt
oSelSet.Delete
' Сервисная часть — показать MsgBox
Dim MessageString As String
For lCounter = 0 To UBound(Result)
If MessageString = "" Then
MessageString = Result(lCounter).sName & " : " & CStr(Result(lCounter).lRange)
Else
MessageString = MessageString & vbCrLf & _
Result(lCounter).sName & " : " & CStr(Result(lCounter).lRange)
End If
UserForm5.Show
Next lCounter
MsgBox MessageString
Exit Sub
lErrorReDim:
ReDim Result(0)
Err.Clear
Resume Next
End Sub