none
Treeview no Excel 2007 RRS feed

  • Pergunta

  • Boas,

     Não preciso de ajuda, preciso mesmo do código porque não consigo lá chegar, ausente do vba há muitos anos, já não consigo perceber a lógica : 

    Tenho um userform com um treeview e com 4 textbox :

     
    ID Hierarquia Cor Descrição Origem
    1 Fruit Laranja Orange PT
    2 Fruit Vermelha Apple NHL
    3 Snack Amarela Bisquit USA
    4 Juice Verde Lemonade CB
    5 Fruit Rosa Mango BR

     ID será o principal e o restante os "filhos". O Treeview tem checkboxes, que ao selecionar o ID exibe os restantes nas 4 texbox ( Hierarquia, Cor, Descrição, Origem ), quer dizer deveria exibir, e irá exibir se me ajudarem.....


    Obrigado

    Jorge

    sexta-feira, 29 de março de 2013 17:16

Respostas

  • Quer dizer então que no exemplo acima você terá 5 nós, cada um com apenas um filho?

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    sábado, 30 de março de 2013 11:06
    Moderador
  • Boas, obrigado pela resposta.

    5 nós = ID, Hierarquia, Cor, Descrição, Origem

    Os filhos do ID são 1, 2, 3, 4, 5. Da Hierarquia, Fruit, Fruit, Snack, Juice, Fruit

    e assim sucessivamente..

    Jorge

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    sábado, 30 de março de 2013 16:14
  • Crie o formulário UserForm1 com um controle TreeView chamado TreeView1 e cole o código abaixo num módulo comum:

    Sub fMain()
    
        Dim frm As UserForm1
        Set frm = New UserForm1
        
        Dim lngLinLast As Long
        Dim lngColLast As Long
        Dim lngLin As Long
        Dim lngCol As Long
        Dim strNode As String
        Dim strHeader As String
        Dim wks As Worksheet
        
        Set wks = ThisWorkbook.Sheets("Plan1")
           
        With wks
            lngLinLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            lngColLast = .Cells(1, .Columns.Count).End(xlToLeft).Column
            
            For lngLin = 1 To lngLinLast
                For lngCol = 1 To lngColLast
                    strHeader = CStr(.Cells(1, lngCol))
                    strNode = CStr(.Cells(lngLin, lngCol))
                    If lngLin = 1 Then
                        frm.TreeView1.Nodes.Add , , strNode, strNode
                    Else
                        frm.TreeView1.Nodes.Add strHeader, tvwChild, , strNode
                    End If
                Next lngCol
            Next lngLin
        End With
        
        frm.Show
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    sábado, 30 de março de 2013 17:01
    Moderador
  • Está muito bom, muito obrigado. Já dá para perceber a lógica da coisa.

     Existe como passar os dados de uma linha para texbox, por exemplo :

     O treeview1 tem checkboxes e ao selecionar o node 1 (ID) irá retornar os restantes valores para as texboxes, neste caso Fruit, Laranja, Orange, PT, ou seja os valores da linha da planilha.

     Mais uma vez obrigado.

    Jorge


    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    sábado, 30 de março de 2013 20:30
  • Estou supondo que a propriedade Checkboxes do controle TreeView seja True.

    Estou assumindo que existam 5 caixas de texto, TextBox1 até TextBox5, e que nunca haja um valor diferente de 5 nós filhos.

    Cole o código abaixo num formulário com os controles supracitados:

    Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
        Dim lngNode As Long
        
        Set Node = Node.Child
        For lngNode = 1 To 5
            Controls("TextBox" & lngNode).Text = Node.Text
            Set Node = Node.Next
        Next lngNode
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim lngLinLast As Long
        Dim lngColLast As Long
        Dim lngLin As Long
        Dim lngCol As Long
        Dim strNode As String
        Dim strHeader As String
        Dim wks As Worksheet
        
        Set wks = ThisWorkbook.Sheets("Plan1")
           
        With wks
            lngLinLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            lngColLast = .Cells(1, .Columns.Count).End(xlToLeft).Column
            
            For lngLin = 1 To lngLinLast
                For lngCol = 1 To lngColLast
                    strHeader = CStr(.Cells(1, lngCol))
                    strNode = CStr(.Cells(lngLin, lngCol))
                    If lngLin = 1 Then
                        Me.TreeView1.Nodes.Add , , strNode, strNode
                    Else
                        Me.TreeView1.Nodes.Add strHeader, tvwChild, , strNode
                    End If
                Next lngCol
            Next lngLin
        End With
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    domingo, 31 de março de 2013 12:17
    Moderador
  • ....e está feito, muito obrigado pela ajuda e pela lucidez.

     Jorge

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    domingo, 31 de março de 2013 16:56

Todas as Respostas

  • Quer dizer então que no exemplo acima você terá 5 nós, cada um com apenas um filho?

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    sábado, 30 de março de 2013 11:06
    Moderador
  • Boas, obrigado pela resposta.

    5 nós = ID, Hierarquia, Cor, Descrição, Origem

    Os filhos do ID são 1, 2, 3, 4, 5. Da Hierarquia, Fruit, Fruit, Snack, Juice, Fruit

    e assim sucessivamente..

    Jorge

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    sábado, 30 de março de 2013 16:14
  • Crie o formulário UserForm1 com um controle TreeView chamado TreeView1 e cole o código abaixo num módulo comum:

    Sub fMain()
    
        Dim frm As UserForm1
        Set frm = New UserForm1
        
        Dim lngLinLast As Long
        Dim lngColLast As Long
        Dim lngLin As Long
        Dim lngCol As Long
        Dim strNode As String
        Dim strHeader As String
        Dim wks As Worksheet
        
        Set wks = ThisWorkbook.Sheets("Plan1")
           
        With wks
            lngLinLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            lngColLast = .Cells(1, .Columns.Count).End(xlToLeft).Column
            
            For lngLin = 1 To lngLinLast
                For lngCol = 1 To lngColLast
                    strHeader = CStr(.Cells(1, lngCol))
                    strNode = CStr(.Cells(lngLin, lngCol))
                    If lngLin = 1 Then
                        frm.TreeView1.Nodes.Add , , strNode, strNode
                    Else
                        frm.TreeView1.Nodes.Add strHeader, tvwChild, , strNode
                    End If
                Next lngCol
            Next lngLin
        End With
        
        frm.Show
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    sábado, 30 de março de 2013 17:01
    Moderador
  • Está muito bom, muito obrigado. Já dá para perceber a lógica da coisa.

     Existe como passar os dados de uma linha para texbox, por exemplo :

     O treeview1 tem checkboxes e ao selecionar o node 1 (ID) irá retornar os restantes valores para as texboxes, neste caso Fruit, Laranja, Orange, PT, ou seja os valores da linha da planilha.

     Mais uma vez obrigado.

    Jorge


    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    sábado, 30 de março de 2013 20:30
  • Estou supondo que a propriedade Checkboxes do controle TreeView seja True.

    Estou assumindo que existam 5 caixas de texto, TextBox1 até TextBox5, e que nunca haja um valor diferente de 5 nós filhos.

    Cole o código abaixo num formulário com os controles supracitados:

    Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
        Dim lngNode As Long
        
        Set Node = Node.Child
        For lngNode = 1 To 5
            Controls("TextBox" & lngNode).Text = Node.Text
            Set Node = Node.Next
        Next lngNode
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim lngLinLast As Long
        Dim lngColLast As Long
        Dim lngLin As Long
        Dim lngCol As Long
        Dim strNode As String
        Dim strHeader As String
        Dim wks As Worksheet
        
        Set wks = ThisWorkbook.Sheets("Plan1")
           
        With wks
            lngLinLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            lngColLast = .Cells(1, .Columns.Count).End(xlToLeft).Column
            
            For lngLin = 1 To lngLinLast
                For lngCol = 1 To lngColLast
                    strHeader = CStr(.Cells(1, lngCol))
                    strNode = CStr(.Cells(lngLin, lngCol))
                    If lngLin = 1 Then
                        Me.TreeView1.Nodes.Add , , strNode, strNode
                    Else
                        Me.TreeView1.Nodes.Add strHeader, tvwChild, , strNode
                    End If
                Next lngCol
            Next lngLin
        End With
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    domingo, 31 de março de 2013 12:17
    Moderador
  • ....e está feito, muito obrigado pela ajuda e pela lucidez.

     Jorge

    • Marcado como Resposta Jorge F. Costa domingo, 31 de março de 2013 16:56
    domingo, 31 de março de 2013 16:56