Olá. Minha dúvida deve ser muito tola, mas o fato é que não sei programar em VBA.
Adaptei um código de uma TreeView, obtida aqui mesmo no fórum fornecida pelo usuário "PILOTO" Link
Estou fazendo com que ela possa ser utilizada facilmente para diversos fins. Dentre eles, uma TreeView com CheckBoxes.
Gostaria de criar um botão "Botao1" que, quando clicado, enviasse as informações das Tags dos dados selecionados da minha "MyTreeView", por exemplo, para uma Caixa de Texto "Texto1", todos separados por ponto e vírgula, exemplo: tag1; tag7; tag23; etc
Não encontro nada da Net a respeito de como utilizar estas Checkboxes
Alguém poderia ajudar?!
O código é o seguinte(por enquanto!):
Adaptei um código de uma TreeView, obtida aqui mesmo no fórum fornecida pelo usuário "PILOTO" Link
Estou fazendo com que ela possa ser utilizada facilmente para diversos fins. Dentre eles, uma TreeView com CheckBoxes.
Gostaria de criar um botão "Botao1" que, quando clicado, enviasse as informações das Tags dos dados selecionados da minha "MyTreeView", por exemplo, para uma Caixa de Texto "Texto1", todos separados por ponto e vírgula, exemplo: tag1; tag7; tag23; etc
Não encontro nada da Net a respeito de como utilizar estas Checkboxes
Alguém poderia ajudar?!
O código é o seguinte(por enquanto!):
- Código:
'====================================
'Funções para treeView
'------------------------------------
' Define public objects
Dim rsPrimeira As DAO.Recordset
Dim rsSegunda As DAO.Recordset
Dim rsTerceira As DAO.Recordset
Dim rsQuarta As DAO.Recordset
Dim StrSQL As String
Dim Selecionado As Boolean
Private Sub Form_Load()
With Me.MyTreeView
' set style property to value that allows pictures
'.Style = tvwTreelinesPlusMinusPictureText
' set to automatically expand selected node and collapse previous node
'.SingleSel = True ' Single Selection
End With
' initialize tree
TreeInit
Selecionado = False
End Sub
Private Sub TreeInit()
Dim trvTree As Control
Dim imgList As Control
Dim nodObject As Node
Dim I As Integer
Dim rcount As Integer
Dim strPrimeira As String
Dim strSegunda As String
Dim strTerceira As String
Dim strQuarta As String
Dim Db As DAO.Database
Dim TabConsult1 As String
Dim TabConsult2 As String
Dim TabConsult3 As String
Dim TabConsult4 As String
Dim CampoTxtInit1 As String
Dim CampoTxtInit2 As String
Dim CampoTxtInit3 As String
Dim CampoTxtInit4 As String
Dim CampoTxtDescr1 As String
Dim CampoTxtDescr2 As String
Dim CampoTxtDescr3 As String
Dim CampoTxtDescr4 As String
Dim Chave1 As String
Dim Chave2 As String
Dim Chave3 As String
Dim Chave4 As String
Dim ChaveRelacional2x1 As String
Dim ChaveRelacional3x2 As String
Dim ChaveRelacional4x3 As String
Dim TreeObjeto As String
Dim TreeChk As String
Dim TreeChkStats As String
'Não esqueça de configurar a TreeView no próprio Formulário,
'clicando com o botão direito do mouse, em modo Design, e
'escolhendo "Objeto TreeCtrl/Properties"
'Aqui deve-se informar o nome da TreeView que está no formulário
TreeObjeto = "MyTreeView" 'Nome do objeto da TreeView
'Aqui deve-se informar as Tabelas ou Consultas que irão popular a TreeView
TabConsult1 = "1_CLIENTE" 'Nome da Tabela ou Consulta que irá popular o nível 1 da Treeview
TabConsult2 = "3_CONTRATOS" 'Nome da Tabela ou Consulta que irá popular o nível 2 da Treeview
TabConsult3 = "4_PROJETOS" 'Nome da Tabela ou Consulta que irá popular o nível 3 da Treeview
TabConsult4 = "CONSUNIDPROJ" 'Nome da Tabela ou Consulta que irá popular o nível 4 da Treeview
'Aqui deve-se informar os nomes dos campos das Tabelas ou Consultas, conforme a hierarquia da TreeView
Chave1 = "CLIENTE_PK" 'Nome do campo chave (que está na Tabela ou Consulta) do nível 1 da Treeview
Chave2 = "CodCONTRATOS_PK" 'Nome do campo chave (que está na Tabela ou Consulta) do nível 2 da Treeview
Chave3 = "CodPROJETOS_PK" 'Nome do campo chave (que está na Tabela ou Consulta) do nível 3 da Treeview
Chave4 = "INT_PK" 'Nome do campo chave (que está na Tabela ou Consulta) do nível 4 da Treeview
ChaveRelacional2x1 = "CodCLIENTE_FK" 'Campo do Nível 2 que coincide com o campo chave do nível 1
ChaveRelacional3x2 = "CodCONTRATOS_FK" 'Campo do Nível 3 que coincide com o campo chave do nível 2
ChaveRelacional4x3 = "CodPROJETOS_FK" 'Campo do Nível 4 que coincide com o campo chave do nível 2
CampoTxtInit1 = "CLIENTE_PK" 'Campo XYZ do texto "XYZ - DESCRIÇÃOABC" que constará no texto do nível 1 da TreeView
CampoTxtInit2 = "CONTRATO" 'Campo XYZ do texto "XYZ - DESCRIÇÃOABC" que constará no texto do nível 2 da TreeView
CampoTxtInit3 = "PROJETO" 'Campo XYZ do texto "XYZ - DESCRIÇÃOABC" que constará no texto do nível 3 da TreeView
CampoTxtInit4 = "UNIDADE" 'Campo XYZ do texto "XYZ - DESCRIÇÃOABC" que constará no texto do nível 4 da TreeView
'Nota para os campos abaixo: Caso não haja necessidade de dois campos para a descrição, deixar como ""
CampoTxtDescr1 = "NOME" 'Campo DESCRIÇÃOABC do texto "XYZ - DESCRIÇÃOABC" que constará no texto do nível 1 da TreeView
CampoTxtDescr2 = "DESCRIÇÃO" 'Campo DESCRIÇÃOABC do texto "XYZ - DESCRIÇÃOABC" que constará no texto do nível 2 da TreeView
CampoTxtDescr3 = "DESCRIÇÃO" 'Campo DESCRIÇÃOABC do texto "XYZ - DESCRIÇÃOABC" que constará no texto do nível 3 da TreeView
CampoTxtDescr4 = "UNIDADE" 'Campo DESCRIÇÃOABC do texto "XYZ - DESCRIÇÃOABC" que constará no texto do nível 4 da TreeView
'A partir daqui não há necessidade de alterações de código.
'seta o banco de dados
Set Db = CurrentDb
Set trvTree = Me(TreeObjeto) 'Me.TreeView0
'Set imgList = Me.MyImageList
' trvTree.ImageList = imgList.Object
With trvTree.Nodes
' limpa os possíveis nós existentes
.Clear
'==========================================================================================================================
'PARA O PRIMEIRO NÓ
'==========================================================================================================================
'Seta o recordset para o primeiro nó
Set rsPrimeira = Db.OpenRecordset(TabConsult1, dbOpenSnapshot)
rsPrimeira.MoveLast
rcount = rsPrimeira.RecordCount
rsPrimeira.MoveFirst
'executa o loop pelo recorset adicionando a lista de dados principal à treeview
Do While Not rsPrimeira.EOF
strPrimeira = rsPrimeira.Fields(CampoTxtInit1)
'strPrimeira = rsPrimeira!CLIENTE_PK
'Concatena os campos para criar o texto do nó
If Len(Trim(Nz(rsPrimeira.Fields(CampoTxtDescr1)))) > 0 Then
strPrimeira = Format(strPrimeira, ">") & " - " & rsPrimeira.Fields(CampoTxtDescr1)
End If
'Adiciona o ícone do tipo de conta no Treeview. O número representa o desenho escolhido
Set nodObject = .Add(, , "A" & CStr(rsPrimeira.Fields(CampoTxtInit1)), strPrimeira, 0)
'cria o nó e a propriedade tag
trvTree.Nodes("A" & rsPrimeira.Fields(Chave1)).Tag = rsPrimeira.Fields(Chave1)
'==========================================================================================================================
'PARA O SEGUNDO NÓ
'==========================================================================================================================
'Seta o recordset para o segundo nó, observe que ele é filtrado pelo parâmetro do recordset anterior
Set rsSegunda = Db.OpenRecordset("SELECT * FROM " & TabConsult2 & " WHERE [" & ChaveRelacional2x1 & "] = '" & rsPrimeira.Fields(Chave1) & "'", dbOpenSnapshot)
'executa o loop pelo recorset adicionando a lista de dados secundária à treeview
Do While Not rsSegunda.EOF
strSegunda = rsSegunda.Fields(CampoTxtInit2)
'se o recordset tiver valor nulo vai para a linha NoSegunda
If IsNull(rsSegunda.Fields(Chave2)) Then GoTo NoSegunda
If Len(Trim(Nz(rsSegunda.Fields(CampoTxtDescr2)))) > 0 Then
strSegunda = Format(strSegunda, ">") & " - " & rsSegunda.Fields(CampoTxtDescr2)
End If
'Adiciona os nós conforme o segundo recordset
Set nodObject = .Add("A" & rsPrimeira.Fields(Chave1), tvwChild, "B" & rsSegunda.Fields(Chave2), strSegunda, 0)
'.. cria o nó e a propriedade tag
trvTree.Nodes("B" & rsSegunda.Fields(Chave2)).Tag = rsSegunda.Fields(Chave2)
'==========================================================================================================================
'PARA O TERCEIRO NÓ
'==========================================================================================================================
Set rsTerceira = Db.OpenRecordset("SELECT * FROM " & TabConsult3 & " WHERE [" & ChaveRelacional3x2 & "] = '" & rsSegunda.Fields(Chave2) & "'", dbOpenSnapshot)
Do While Not rsTerceira.EOF
strTerceira = rsTerceira.Fields(CampoTxtInit3)
'se o recordset tiver valor nulo vai para a linha NoTerceira
If IsNull(rsTerceira.Fields(Chave3)) Then GoTo NoTerceira
'Concatena os campos para criar o texto do nó
If Len(Trim(Nz(rsTerceira.Fields(CampoTxtDescr3)))) > 0 Then
strTerceira = Format(strTerceira, ">") & " - " & rsTerceira.Fields(CampoTxtDescr3)
End If
'Adiciona os nós conforme o segundo recordset
Set nodObject = .Add("B" & rsSegunda.Fields(Chave2), tvwChild, "C" & rsTerceira.Fields(Chave3), strTerceira, 0)
'cria o nó e a propriedade tag
trvTree.Nodes("C" & rsTerceira.Fields(Chave3)).Tag = rsTerceira.Fields(Chave3)
'-------------------------------------------------------------------------------------------------------------------------
'==========================================================================================================================
'PARA O QUARTO NÓ
'==========================================================================================================================
Set rsQuarta = Db.OpenRecordset("SELECT * FROM " & TabConsult4 & " WHERE [" & ChaveRelacional4x3 & "] = '" & rsTerceira.Fields(Chave3) & "'", dbOpenSnapshot)
Do While Not rsQuarta.EOF
'se o recordset tiver valor nulo vai para a linha NoQuarta
If IsNull(rsQuarta.Fields(Chave4)) Then GoTo NoQuarta
'Concatena os campos para criar o texto do nó
If Len(Trim(Nz(rsQuarta.Fields(CampoTxtDescr4)))) > 0 Then
strQuarta = rsQuarta.Fields(CampoTxtDescr4)
End If
'Adiciona os nós conforme o segundo recordset
Set nodObject = .Add("C" & rsTerceira.Fields(Chave3), tvwChild, "D" & rsQuarta.Fields(Chave4), strQuarta, 0)
'cria o nó e a propriedade tag
trvTree.Nodes("D" & rsQuarta.Fields(Chave4)).Tag = rsQuarta.Fields(Chave4)
'-------------------------------------------------------------------------------------------------------------------------
NoQuarta:
rsQuarta.MoveNext
Loop
NoTerceira:
rsTerceira.MoveNext
Loop
NoSegunda:
rsSegunda.MoveNext
Loop
rsPrimeira.MoveNext
Loop
End With
'Limpa os recordset's envolvidos
Set rsPrimeira = Nothing
Set rsSegunda = Nothing
Set rsTerceira = Nothing
Set rsQuarta = Nothing
End Sub