Тема: Как записать найденные результаты в переменные?

Доброе утро всем!!!
В этом примере Кулик Алексей очень помог мне с поиском блоков и принадлежащих к ним атрибутов.
Результататы выводятся на MsgBox.
Помогите пожалуйста доработать код чтобы он записывал найденные результаты в переменные.
Схема должна быть такой:
1) Код работает и находит все блоки с атрибутами
2)Затем идет проверка найденных блоков
3)Если имя блока совпадает с желаемым первым блоком, то количество этих блоков заносится в переменную n1
4)Значение первого атрибута записываются в переменную k1
5)Значение второго атрибута записываются в переменную p1
6)Значение первого атрибута записываются в переменную t1
и т.д.
7)Далее все повторяется с 2 пункта. Если имя блока совпадает с желаемым ВТОРЫМ блоком, то количество этих блоков заносится в переменную n2
И Т.Д.

Option Explicit
Dim EffectiveNameAvailable As Boolean
Private Sub fun_ClearSelectionSetByName(sName As String)
Dim lCounter As Long
  On Error Resume Next
  With ThisDrawing.SelectionSets
    For lCounter = 0 To .SelectionSets.count
      If UCase(.Item(lCounter).Name) Like UCase(sName) Then
        .Item(lCounter).Clear
        .Item(lCounter).Delete
      End If
    Next
  End With
End Sub
Function fun_GetBlockName(objBlockRef As AcadBlockReference) As String
  If EffectiveNameAvailable Then
    fun_GetBlockName = objBlockRef.EffectiveName
  Else
    fun_GetBlockName = objBlockRef.Name
    End If
End Function
Sub GetBlockattr()
  EffectiveNameAvailable = CInt(Left(ThisDrawing.GetVariable("acadver"), _
    2)) >= 16
Dim objBlock As AcadBlock, objBlockRef As AcadBlockReference, _
  objAttr As AcadAttribute
Dim SelSet As AcadSelectionSet
Dim fType(1) As Integer, fData(1) As Variant
Dim sAttr As String, sTmpAttr As String, arAttr() As AcadAttributeReference
  fType(0) = 0: fData(0) = "INSERT"
  fType(1) = 66: fData(1) = 1
  Dim sSelSetName As String
  sSelSetName = "SelectionForGetBlockAttr"
  fun_ClearSelectionSetByName sSelSetName
  On Error GoTo lErrorSelect
  Set SelSet = ThisDrawing.SelectionSets.Add(sSelSetName)
  SelSet.SelectOnScreen fType, fData
  Dim objSelSet As AcadEntity, lCounter As Long
  For Each objBlockRef In SelSet
    If sAttr = "" Then
      sAttr = "Имя опоры" & " - " & fun_GetBlockName(objBlockRef)
    Else
      sAttr = sAttr & vbCr & "Имя опоры" & " - " & fun_GetBlockName(objBlockRef)
    End If
    arAttr = objBlockRef.GetAttributes
    For lCounter = 0 To UBound(arAttr)
      sAttr = sAttr & vbCr & arAttr(lCounter).TagString & " - " & arAttr(lCounter).TextString
    Next 'lCounter
  Next 'objBlockRef
  MsgBox sAttr
  Exit Sub
lErrorSelect:
  MsgBox "Ничего не выбрано"
  fun_ClearSelectionSetByName sSelSetName
  Exit Sub
End Sub

Re: Как записать найденные результаты в переменные?

Помогите пожалуйста........

Re: Как записать найденные результаты в переменные?

Откликнитесь кто-нибудь....

Re: Как записать найденные результаты в переменные?

Мне очень нужен этот код. Просто необходим. Уделите пожалуйста мне немного Вашего времени :(

Re: Как записать найденные результаты в переменные?

Ну что Вам стоит помочь бедной девушке???
:(

Re: Как записать найденные результаты в переменные?

Дарья у Вас задача самой научиться работать в VBA или использовать готовые программы?
Если первое, то Вы же сами расписали алгоритм действий, осталось реализовать. Можете использовать массив из собственного типа переменной type

Type Opors
     BlockName as string
     Kolvo as integer
     Attributes() as string
End Type

Можно использовать коллекции с объектами описанными в собственном классе.
Если второе, то "надейтесь и ждите". Я бы мог попробовать написать, но каряво получится. Я же только учусь.

Re: Как записать найденные результаты в переменные?

> Vildar
Я хочу  сама научиться.
Я учусь глядя на примеры
>Я бы мог попробовать написать, но каряво >получится. Я же только учусь.
Напишите пожалуйста если Вам не трудно!!! Буду Вам очень благодарна!!!

Re: Как записать найденные результаты в переменные?

Информации по VBA в AutoCAD крайне мало. Есть много готовых примеров. Но часто сталкиваюсь с проблемой невозможности переделать готовый код из-за непонимания принципа его работы.
Иногда я пробую удалять из кода строчку и смотрю что происходит. Так вот и учусь.
Еще теорию немного читаю по самому языку.
Помогите разобраться с этим кодом пожалуйста :(

Re: Как записать найденные результаты в переменные?

Ну что???

Re: Как записать найденные результаты в переменные?

Вот, накалякал.
Ahtung!!! Не проверял! Можгут быть косяки.
Если дадите файлик с блоками, то проверю.
В General Declaration поместите описание type:

 Type Opora
     BlockName As String
     Kolvo As Integer
     Attributes() As String
End Type

Ну и процедуру в том же модуле:

Private Sub Создание_массива_описания_опор(SelSetName)
   'я так понял речь о блоках "опор"
   Public typeOpors() As Opora' глобальная, чтобы был доступ где угодно!
   Dim objBlockRef As AcadBlockReference
   Dim varAttributes As Variant
   Dim strBlockName As String
   Dim lCounter As Long
   Dim lCounter2 As Long 'можно поменьше переменную взять, но так для стилистики
   Dim bolYesNo As Boolean
   selSetOpors = ThisDrawing.SelectionSets.Item(SelSetName)
   ReDim typeOpors(0)
   For Each objBlockRef In selSetOpors
      bolYesNo = False 'входящее значение
      For lCounter = 0 To UBound(typeOpors)
         If typeOpors(lCounter).BlockName = objBlockRef.Name Then
            typeOpors(lCounter).Kolvo = typeOpors(lCounter).Kolvo + 1
            bolYesNo = True
         End If
      Next
      If bolYesNo = False Then
         ReDim Preserve typeOpors(intNum)
         typeOpors(intNum).BlockName = objBlockRef.Name
         typeOpors(intNum).Kolvo = 1
         varAttributes = objBlockRef.GetAttributes
         For lCounter2 = 0 To UBound(varAttributes)
            ReDim typeOpors(intNum).Attributes(lCounter2)
            typeOpors(intNum).Attributes(lCounter2) = varAttributes(lCounter2).TextString
         Next 'lCounter2 = 0 To UBound(varAttributes)
         intNum = intNum + 1
      End If 'bolYesNo = False Then
   Next ' Each objBlockRef In selSetOpors
   'должны получить массив typeOpors
End Sub

'В основной процедуре записать:

Создание_массива_описания_опор sSelSetName

Перед:

 Exit Sub
lErrorSelect:

Удачи!

Re: Как записать найденные результаты в переменные?

> Vildar
Вот записала код таким образом по Вашей инструкции:

Option Explicit
'Вот, накалякал.
'Ahtung!!! Не проверял! Можгут быть косяки.
'Если дадите файлик с блоками, то проверю.
'В General Declaration поместите описание type:
 Type Opora
     BlockName As String
     Kolvo As Integer
     Attributes() As String
End Type
Dim EffectiveNameAvailable As Boolean
Private Sub fun_ClearSelectionSetByName(sName As String)
Dim lCounter As Long
  On Error Resume Next
  With ThisDrawing.SelectionSets
    For lCounter = 0 To .SelectionSets.count
      If UCase(.Item(lCounter).Name) Like UCase(sName) Then
        .Item(lCounter).Clear
        .Item(lCounter).Delete
      End If
    Next
  End With
End Sub
Function fun_GetBlockName(objBlockRef As AcadBlockReference) As String
  If EffectiveNameAvailable Then
    fun_GetBlockName = objBlockRef.EffectiveName
  Else
    fun_GetBlockName = objBlockRef.Name
    End If
End Function
Sub GetBlockattr()
  EffectiveNameAvailable = CInt(Left(ThisDrawing.GetVariable("acadver"), _
    2)) >= 16
Dim objBlock As AcadBlock, objBlockRef As AcadBlockReference, _
  objAttr As AcadAttribute
Dim SelSet As AcadSelectionSet
Dim fType(1) As Integer, fData(1) As Variant
Dim sAttr As String, sTmpAttr As String, arAttr() As AcadAttributeReference
  fType(0) = 0: fData(0) = "INSERT"
  fType(1) = 66: fData(1) = 1
  Dim sSelSetName As String
  sSelSetName = "SelectionForGetBlockAttr"
  fun_ClearSelectionSetByName sSelSetName
  On Error GoTo lErrorSelect
  Set SelSet = ThisDrawing.SelectionSets.Add(sSelSetName)
  SelSet.SelectOnScreen fType, fData
  Dim objSelSet As AcadEntity, lCounter As Long
  For Each objBlockRef In SelSet
    If sAttr = "" Then
      sAttr = "Имя опоры" & " - " & fun_GetBlockName(objBlockRef)
    Else
      sAttr = sAttr & vbCr & "Имя опоры" & " - " & fun_GetBlockName(objBlockRef)
    End If
    arAttr = objBlockRef.GetAttributes
    For lCounter = 0 To UBound(arAttr)
      sAttr = sAttr & vbCr & arAttr(lCounter).TagString & " - " & arAttr(lCounter).TextString
    Next 'lCounter
  Next 'objBlockRef
 'В основной процедуре записать:
Создание_массива_описания_опор sSelSetName
  Exit Sub
lErrorSelect:
  MsgBox "Ничего не выбрано"
  fun_ClearSelectionSetByName sSelSetName
  Exit Sub
End Sub
'Ну и процедуру в том же модуле:
Private Sub Создание_массива_описания_опор(SelSetName)
   'я так понял речь о блоках "опор"
   Public typeOpors() As Opora ' глобальная, чтобы был доступ где угодно!
   Dim objBlockRef As AcadBlockReference
   Dim varAttributes As Variant
   Dim strBlockName As String
   Dim lCounter As Long
   Dim lCounter2 As Long 'можно поменьше переменную взять, но так для стилистики
   Dim bolYesNo As Boolean
   selSetOpors = ThisDrawing.SelectionSets.Item(SelSetName)
   ReDim typeOpors(0)
   For Each objBlockRef In selSetOpors
      bolYesNo = False 'входящее значение
      For lCounter = 0 To UBound(typeOpors)
         If typeOpors(lCounter).BlockName = objBlockRef.Name Then
            typeOpors(lCounter).Kolvo = typeOpors(lCounter).Kolvo + 1
            bolYesNo = True
         End If
      Next
      If bolYesNo = False Then
         ReDim Preserve typeOpors(intNum)
         typeOpors(intNum).BlockName = objBlockRef.Name
         typeOpors(intNum).Kolvo = 1
         varAttributes = objBlockRef.GetAttributes
         For lCounter2 = 0 To UBound(varAttributes)
            ReDim typeOpors(intNum).Attributes(lCounter2)
            typeOpors(intNum).Attributes(lCounter2) = varAttributes(lCounter2).TextString
         Next 'lCounter2 = 0 To UBound(varAttributes)
         intNum = intNum + 1
      End If 'bolYesNo = False Then
   Next ' Each objBlockRef In selSetOpors
   'должны получить массив typeOpors
End Sub

Выдается ошибка

Re: Как записать найденные результаты в переменные?

Ошибка: Invalid attribut in Sub or Function

Re: Как записать найденные результаты в переменные?

> Vildar
Я вышлю Вам на мыло чертежик с блоками и аттрибутами

Re: Как записать найденные результаты в переменные?

VildarK"собачка"yandex.ru
Я читал у Вас интересный метод проверки кода - удалением строчки!
А пошагово чем не устраивает?

Re: Как записать найденные результаты в переменные?

> Vildar
Отправила Вам чертеж.
Пошагово еще не научилась. У меня большая книженция по VBA и там есть глава про окошко в котором видно как работает программа.

Re: Как записать найденные результаты в переменные?

Плохо что VBA под AtoCAD книжки специальной не могу найти. Все кусочки какие-то, да обрывки.
Купила книгу Полещука. В ней хорошо написано по этой теме, но к сожалению очень-очень мало.
Вот нахожу хороший код и не могу расшифровать его принцип работы.
Приходится обращаться за помощью на этом сайте. Программисты помогают, но они люди очень занятые и у них нет времени расшифровать код для меня и объяснить принцип его работы.

Re: Как записать найденные результаты в переменные?

Поэтому когда Вы спросили что мне нужно готовая программа или научиться делать программу я даже не знала что Вам ответить...
Какой-то добрый человек создал вот этот сайт
http://vbamaker.narod.ru/index.html
где подробно описывается для начинающих, но что-то этот человек куда-то пропал и его хороший сайт не обновляется....
Эх....одним словом....

Re: Как записать найденные результаты в переменные?

> Vildar
Ну что, получилось что-нибудь???

Re: Как записать найденные результаты в переменные?

Да... накосипорил, ща поправим:

Private Sub Создание_массива_описания_опор(SelSetName)
   'я так понял речь о блоках "опор"
   Dim typeOpors() As Opora
   Dim objBlockRef As AcadBlockReference
   Dim selSetOpors As AcadSelectionSet
   Dim varAttributes As Variant
   Dim strBlockName As String
   Dim lCounter As Long
   Dim lCounter2 As Long 'можно поменьше переменную взять, но так для стилистики
   Dim bolYesNo As Boolean
   Dim intNum As Integer
   Set selSetOpors = ThisDrawing.SelectionSets.Item(SelSetName)
   ReDim typeOpors(0)
   For Each objBlockRef In selSetOpors
      bolYesNo = False 'входящее значение
      For lCounter = 0 To UBound(typeOpors)
         If typeOpors(lCounter).BlockName = objBlockRef.Name Then
            typeOpors(lCounter).Kolvo = typeOpors(lCounter).Kolvo + 1
            bolYesNo = True
         End If
      Next
      If bolYesNo = False Then
         ReDim Preserve typeOpors(intNum)
         typeOpors(intNum).BlockName = objBlockRef.Name
         typeOpors(intNum).Kolvo = 1
         varAttributes = objBlockRef.GetAttributes
         For lCounter2 = 0 To UBound(varAttributes)
            ReDim Preserve typeOpors(intNum).Attributes(lCounter2)
            typeOpors(intNum).Attributes(lCounter2) = varAttributes(lCounter2).TextString
         Next 'lCounter2 = 0 To UBound(varAttributes)
         intNum = intNum + 1
      End If 'bolYesNo = False Then
   Next ' Each objBlockRef In selSetOpors
   'должны получить массив typeOpors
End Sub

Далее действуйте самостоятельно. Я удаляюсь. Если будет ошибка, пройдитесь пошагово до места преступления и разберитесь.
Пока, пока...
PS У меня вылезла ошибка в процедуре fun_GetBlockName. Поставил просто objBlockRef.Name, без выполнения этой процедуры.

Re: Как записать найденные результаты в переменные?

И еще напоследок. Если у заранее известно что у всех опор строго определено количество атрибутов и их Tagи. То можно явно прописать переменные под каждый атрибут в описании типа.
Например:

Type Opora
     BlockName As String
     Kolvo As Integer
     Тип_опоры() As String ' типа (4*1*1)
     Номер_опоры() As Integer
     Состояние_заземления as Boolean' или String, разберетесь
End Type

Английские имена сами подберите. А можно и так оставиь
Ну соответствующие замены произвести в процедуре.
Усё, я помчался.

Re: Как записать найденные результаты в переменные?

> Vildar
Спасибо. Сейчас попробую код

Re: Как записать найденные результаты в переменные?

> Vildar
Не получается. Та же самая ошибка вылазит.
Вот код:

Option Explicit
 Type Opora
     BlockName As String
     Kolvo As Integer
4 х1х1() As String ' типа (4*1*1)
     Номер_опоры() As Integer
     Состояние_заземления As Boolean ' или String, разберетесь
End Type
Dim EffectiveNameAvailable As Boolean
Private Sub fun_ClearSelectionSetByName(sName As String)
Dim lCounter As Long
  On Error Resume Next
  With ThisDrawing.SelectionSets
    For lCounter = 0 To .SelectionSets.count
      If UCase(.Item(lCounter).Name) Like UCase(sName) Then
        .Item(lCounter).Clear
        .Item(lCounter).Delete
      End If
    Next
  End With
End Sub
Function fun_GetBlockName(objBlockRef As AcadBlockReference) As String
  If EffectiveNameAvailable Then
    fun_GetBlockName = objBlockRef.EffectiveName
  Else
    fun_GetBlockName = objBlockRef.Name
    End If
End Function
Sub GetBlockattr()
  EffectiveNameAvailable = CInt(Left(ThisDrawing.GetVariable("acadver"), _
    2)) >= 16
Dim objBlock As AcadBlock, objBlockRef As AcadBlockReference, _
  objAttr As AcadAttribute
Dim SelSet As AcadSelectionSet
Dim fType(1) As Integer, fData(1) As Variant
Dim sAttr As String, sTmpAttr As String, arAttr() As AcadAttributeReference
  fType(0) = 0: fData(0) = "INSERT"
  fType(1) = 66: fData(1) = 1
  Dim sSelSetName As String
  sSelSetName = "SelectionForGetBlockAttr"
  fun_ClearSelectionSetByName sSelSetName
  On Error GoTo lErrorSelect
  Set SelSet = ThisDrawing.SelectionSets.Add(sSelSetName)
  SelSet.SelectOnScreen fType, fData
  Dim objSelSet As AcadEntity, lCounter As Long
  For Each objBlockRef In SelSet
    If sAttr = "" Then
      sAttr = "Имя опоры" & " - " & fun_GetBlockName(objBlockRef)
    Else
      sAttr = sAttr & vbCr & "Имя опоры" & " - " & fun_GetBlockName(objBlockRef)
    End If
    arAttr = objBlockRef.GetAttributes
    For lCounter = 0 To UBound(arAttr)
      sAttr = sAttr & vbCr & arAttr(lCounter).TagString & " - " & arAttr(lCounter).TextString
    Next 'lCounter
  Next 'objBlockRef
 'В основной процедуре записать:
Создание_массива_описания_опор sSelSetName
  Exit Sub
lErrorSelect:
  MsgBox "Ничего не выбрано"
  fun_ClearSelectionSetByName sSelSetName
  Exit Sub
End Sub
'Ну и процедуру в том же модуле:
Private Sub Создание_массива_описания_опор(SelSetName)
   'я так понял речь о блоках "опор"
   Public typeOpors() As Opora ' глобальная, чтобы был доступ где угодно!
   Dim objBlockRef As AcadBlockReference
   Dim varAttributes As Variant
   Dim strBlockName As String
   Dim lCounter As Long
   Dim lCounter2 As Long 'можно поменьше переменную взять, но так для стилистики
   Dim bolYesNo As Boolean
   selSetOpors = ThisDrawing.SelectionSets.Item(SelSetName)
   ReDim typeOpors(0)
   For Each objBlockRef In selSetOpors
      bolYesNo = False 'входящее значение
      For lCounter = 0 To UBound(typeOpors)
         If typeOpors(lCounter).BlockName = objBlockRef.Name Then
            typeOpors(lCounter).Kolvo = typeOpors(lCounter).Kolvo + 1
            bolYesNo = True
         End If
      Next
      If bolYesNo = False Then
         ReDim Preserve typeOpors(intNum)
         typeOpors(intNum).BlockName = objBlockRef.Name
         typeOpors(intNum).Kolvo = 1
         varAttributes = objBlockRef.GetAttributes
         For lCounter2 = 0 To UBound(varAttributes)
            ReDim typeOpors(intNum).Attributes(lCounter2)
            typeOpors(intNum).Attributes(lCounter2) = varAttributes(lCounter2).TextString
         Next 'lCounter2 = 0 To UBound(varAttributes)
         intNum = intNum + 1
      End If 'bolYesNo = False Then
   Next ' Each objBlockRef In selSetOpors
   'должны получить массив typeOpors
End Sub

Где ошибка???

Re: Как записать найденные результаты в переменные?

Вроде как работает, но кое-что необходимо исправить.

Re: Как записать найденные результаты в переменные?

Привет,
Интерсно, а каким макаром атрибуты созданы? В редакторе блоков тоько кружок и все. Поэтому, проверить как следует не могу. На полученном чертеже только один блок П11, а надо бы несколько.
Теперь по делу.
Предлагау заменить функцию fun_ClearSelectionSetByName, мутная она какая-то, на:

For Each selSet In ThisDrawing.SelectionSets
      If selSet.Name = sSelSetName Then
         selSet.Clear
         selSet.Delete
         Exit For
      End If
  Next

И тупо вставить это в основной процедуре fun_GetBlockName, вместо вызова функции.
Главное. Сделал подмассивы для трех атрибутов. У всех блоков ведь по три атрибута, так!
Вот:

Private Sub Создание_массива_описания_опор(SelSetName)
   'я так понял речь о блоках "опор"
   Dim typeOporsCur As Opora
   Dim objBlockRef As AcadBlockReference
   Dim selSetOpors As AcadSelectionSet
   Dim varAttributes As Variant
   Dim strBlockName As String
   Dim lCounter As Long
   Dim lCounter2 As Long 'можно поменьше переменную взять, но так для стилистики
   Dim bolYesNo As Boolean
   Dim intNum As Integer
   Dim intKolvo As Integer
   Dim strAttrValue As String
   Set selSetOpors = ThisDrawing.SelectionSets.Item(SelSetName)
   ReDim typeOpors(0)
   For Each objBlockRef In selSetOpors
      varAttributes = objBlockRef.GetAttributes
      bolYesNo = False 'входящее значение
      For lCounter = 0 To UBound(typeOpors)
         If typeOpors(lCounter).BlockName = objBlockRef.Name Then
            intKolvo = typeOpors(lCounter).Kolvo
            typeOpors(lCounter).Kolvo = intKolvo + 1
            bolYesNo = True
            ReDim Preserve typeOpors(lCounter).Тип_опоры(intKolvo)
            ReDim Preserve typeOpors(lCounter).Номер_опоры(intKolvo)
            ReDim Preserve typeOpors(lCounter).Состояние_заземления(intKolvo)
            For lCounter2 = 0 To UBound(varAttributes)
               strAttrValue = varAttributes(lCounter2).TextString
               Select Case varAttributes(lCounter2).TagString
                  Case objBlockRef.Name
                     typeOpors(lCounter).Тип_опоры(intKolvo) = strAttrValue
                  Case "Номер опоры"
                     typeOpors(lCounter).Номер_опоры(intKolvo) = strAttrValue
                  Case "Состояние заземления"
                     typeOpors(lCounter).Состояние_заземления(intKolvo) = strAttrValue
                  Case Else
                     MsgBox "Неизвестный тэг атрибута -" & varAttributes(lCounter2).TagString
               End Select
            Next 'lCounter2 = 0 To UBound(varAttributes)
            Exit For
         End If
      Next
      If bolYesNo = False Then 'т.е. нет такого блока в массве typeOpors
         intNum = UBound(typeOpors)
         If typeOpors(intNum).Kolvo <> 0 Then
            intNum = intNum + 1
            ReDim Preserve typeOpors(intNum)
         End If
         typeOpors(intNum).BlockName = objBlockRef.Name
         typeOpors(intNum).Kolvo = 1
         ReDim typeOpors(intNum).Тип_опоры(0)
         ReDim typeOpors(intNum).Номер_опоры(0)
         ReDim typeOpors(intNum).Состояние_заземления(0)
         For lCounter2 = 0 To UBound(varAttributes)
            strAttrValue = varAttributes(lCounter2).TextString
            Select Case varAttributes(lCounter2).TagString
               Case objBlockRef.Name
                  typeOpors(intNum).Тип_опоры(0) = strAttrValue
               Case "Номер опоры"
                  typeOpors(intNum).Номер_опоры(0) = strAttrValue
               Case "Состояние заземления"
                  typeOpors(intNum).Состояние_заземления(0) = strAttrValue
               Case Else
                  MsgBox "Неизвестный тэг атрибута -" & varAttributes(lCounter2).TagString
            End Select
         Next 'lCounter2 = 0 To UBound(varAttributes)
      End If 'bolYesNo = False Then
   Next ' Each objBlockRef In selSetOpors
   'обязаны получить массив typeOpors
End Sub

И в General Declarations:

Type Opora
     BlockName As String
     Kolvo As Integer
     Тип_опоры() As String ' типа (4*1*1)
     Номер_опоры() As Integer
     Состояние_заземления() As String
End Type
Dim typeOpors() As Opora

По поводу поиска ошибок. На панельке "Debug" есть все нужные для этого кнопки. Пошагово доходите до места ошибки и разбирайтесь.
PS Дарья=Дашуля???

Re: Как записать найденные результаты в переменные?

> Vildar
Код работает, но я никак не могу решить основную проблему.
Я хочу объяснить мою логику.
1) Код находит все блоки, которые например называются "П11". Допустим их 3 штуки.
2)Далее проверяем значение их первого Тага.
У первого блока к примеру это значение "(2х1х1)",  у второго "(4х1х1)", а у третьего то же самое что и у первого - "(2х1х1)".
3) Проверяем значение второго Тага. У первого это значение №1, у второго - №2, у третьего №3.
4) Последний Таг - проверка заземления. Проверяем наличие у них заземления.
В конце всего этого формируется таблица, в которую вносятся данные.
Для чего я затеяла канитель с присвоением переменным количества найденных атрибутов - ответ очень прост, через эти переменные я хочу математическим путем рассчитать другие детали, а также занести данные в таблицу (я нашла код где вносятся в ячейки таблицы переменные, другого способа внесения данных в таблице я не знаю).