
' Макрос отмеченные узлы, ветви и генераторы записывает в виде строки и копирует результат в буфер обмена
' Например, 15504; 15075; 15105,15113; 15038,15041,1; g=205; g=204;

Sub DumpSelectedElements()
    Dim nodeList, vetvList, genList
    Dim result
    
    nodeList = ""
    vetvList = ""
    genList = ""
    result = ""
    
    ' ---------- Обработка таблицы node ----------
    Dim tnode, sel_node, ny_col
    Set tnode = Rastr.Tables("node")
    Set sel_node = tnode.Cols("sel")
    Set ny_col = tnode.Cols("ny")
    
    Dim i, firstNode
    firstNode = True
    For i = 0 To tnode.Size - 1
        If sel_node.Z(i) <> 0 Then
            If firstNode Then
                nodeList = CStr(ny_col.Z(i))
                firstNode = False
            Else
                nodeList = nodeList & "; " & CStr(ny_col.Z(i))
            End If
        End If
    Next
    
    ' ---------- Обработка таблицы vetv ----------
    Dim tvetv, sel_vetv, ip_col, iq_col, np_col
    Set tvetv = Rastr.Tables("vetv")
    Set sel_vetv = tvetv.Cols("sel")
    Set ip_col = tvetv.Cols("ip")
    Set iq_col = tvetv.Cols("iq")
    Set np_col = tvetv.Cols("np")
    
    Dim firstVetv
    firstVetv = True
    For i = 0 To tvetv.Size - 1
        If sel_vetv.Z(i) <> 0 Then
            Dim vetvStr
            If np_col.Z(i) = 0 Then
                vetvStr = CStr(ip_col.Z(i)) & "," & CStr(iq_col.Z(i))
            Else
                vetvStr = CStr(ip_col.Z(i)) & "," & CStr(iq_col.Z(i)) & "," & CStr(np_col.Z(i))
            End If
            
            If firstVetv Then
                vetvList = vetvStr
                firstVetv = False
            Else
                vetvList = vetvList & "; " & vetvStr
            End If
        End If
    Next
    
    ' ---------- Обработка таблицы Generator ----------
    Dim tgen, sel_gen, num_col
    Set tgen = Rastr.Tables("Generator")
    Set sel_gen = tgen.Cols("sel")
    Set num_col = tgen.Cols("Num")
    
    Dim firstGen
    firstGen = True
    For i = 0 To tgen.Size - 1
        If sel_gen.Z(i) <> 0 Then
            Dim genStr
            genStr = "g=" & CStr(num_col.Z(i))
            
            If firstGen Then
                genList = genStr
                firstGen = False
            Else
                genList = genList & "; " & genStr
            End If
        End If
    Next
    
    ' ---------- Формирование итоговой строки ----------
    If nodeList <> "" Then
        result = nodeList
    End If
    
    If vetvList <> "" Then
        If result <> "" Then
            result = result & "; " & vetvList
        Else
            result = vetvList
        End If
    End If
    
    If genList <> "" Then
        If result <> "" Then
            result = result & "; " & genList
        Else
            result = genList
        End If
    End If
    
    ' ---------- Вывод в консоль ----------
    If result <> "" Then
        Rastr.Printp result
    Else
        Rastr.Printp "no_selected_elements;"
    End If
    
    ' ---------- Копирование в буфер обмена ----------
    If result <> "" Then
        Dim objHTML
        Set objHTML = CreateObject("htmlfile")
        objHTML.ParentWindow.clipboardData.SetData "text", result
        Set objHTML = Nothing
    End If
End Sub

' Вызов макроса
DumpSelectedElements