Usuário com melhor resposta
Treeview no Excel 2007

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
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
-
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
-
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
-
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
-
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
-
....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
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
-
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
-
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
-
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
-
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
-
....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