none
Estrutura de Tópicos com VBA

    Pergunta

  • Como criar (em VBA) uma estrutura de tópicos (agrupar linhas), segundo os códigos(ID)?

    Ex.:

    1

    1.1

    1.1.1

    1.2

    1.2.1

    1.2.1.1

    1.2.1.2

    Onde 1.2.1.1, 1.2.1.2 estão agrupados em 1.2.1 e assim sussecivamente.

    Imagine isto como a estrutura de uma WBS.

    Grato


    • Editado orestejunior quinta-feira, 27 de setembro de 2012 23:18
    quinta-feira, 27 de setembro de 2012 00:00

Respostas

  • Seria possível eliminar apenas a coluna B de sua fórmula, já que o texto original se encontra na C. Na célula D2, você poderia usar a fórmula:

    =REPT("      ";NÚM.CARACT(A2)-NÚM.CARACT(SUBSTITUIR(A2;".";"")))&SUBSTITUIR(C2;"1 - ";"")

    No entanto, é possível você criar essa indentação numa macro. Use o código abaixo:

    Sub Indentar()
        Dim lRow As Long
        Dim lNível As Long
        Dim lOrigem As Long
        Dim lLast As Long
        Dim bOperação As Boolean
        
        With ActiveSheet
            .Cells.IndentLevel = 0
            lLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            
            For lRow = 2 To lLast
                .Rows(lRow).IndentLevel _
                = Len(.Cells(lRow, "A")) - Len(Replace(.Cells(lRow, "A"), ".", ""))
            Next lRow
        End With
            
    End Sub


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

    quarta-feira, 10 de outubro de 2012 01:41

Todas as Respostas

  • http://felipebenza.wordpress.com/2012/09/28/criar-estrutura-de-topicos-personalizada/

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

    • Marcado como Resposta orestejunior sábado, 29 de setembro de 2012 19:03
    • Não Marcado como Resposta orestejunior segunda-feira, 8 de outubro de 2012 17:45
    sexta-feira, 28 de setembro de 2012 23:52
  • http://felipebenza.wordpress.com/2012/09/28/criar-estrutura-de-topicos-personalizada/

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

    Felipe, você simplesmente brilhou. 

    Cara, não estava fácil encontrar alguma coisa sobre este assunto na net. Ainda bem que você apareceu.

    Muito obrigado amigo, este código vai me ajudar muito no meu dia a dia.

     

    sábado, 29 de setembro de 2012 19:09
  • http://felipebenza.wordpress.com/2012/09/28/criar-estrutura-de-topicos-personalizada/


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

    Felipe, você simplesmente brilhou. 

    Cara, não estava fácil encontrar alguma coisa sobre este assunto na net. Ainda bem que você apareceu.

    Muito obrigado amigo, este código vai me ajudar muito no meu dia a dia.

     

    Sr.s, a pouco tempo atras o colega Felipe me presenteou com um código que cria uma estrutura de dados segundo o ID desta atividade.

    Com a necessidade de visualizar estes níveis também na forma do texto, elaborei uma fórmula para fazê-la.

    Está funcionando perfeitamente, porém sei que se eu transformasse esta fórmula numa função, incluindo esta no código existente, eliminando a coluna B e C, a coisa ficaria mais profissional.

    Caso os colegas possam me ajudar, eu agradeço.

    Caso não consigam acessar o arquivo através do link, por favor retornem.

    Grato.

    http://www.4shared.com/account/home.jsp?sId=mOXj7GYQYoqhzJsk&&fau=1&ausk=Sh45Rvtl2melICyk&hlfid=2287748564#dir=419217404

    terça-feira, 9 de outubro de 2012 01:12
  • Não consegui baixar o arquivo através do link fornecido. Poderia postar do SkyDrive.com ou no Sendspace.com?

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

    terça-feira, 9 de outubro de 2012 21:38
  • Felipe, mais uma vez, obrigado.

    Andei navegando no seu site e percebi sua preocupação em ajudar quem realmente quer aprender VBA.

    Sei que não estou no processo adequado, mas é que estou inicializando e não quero passar o carro na frente dos bois. Embora não Eu não ser da área de TI, espero um dia poder utilizar bem o VBA. Gosto muito e como utilizo muito o excel no meu trabalho, com certeza vai ser, unir o útil ao agradável.

    Espero estar fazendo da forma correta. Vou postar os dois links.

    Vou estudar um pouco sobre o Skydrive.

    Grato.

    <font><font class="">http://www.sendspace.com/file/3kvdw4</font></font>

    <font><font>http://www.sendspace.com/delete/3kvdw4/221342c0e989c432292c4530a08641a4</font></font>

    quarta-feira, 10 de outubro de 2012 00:10
  • Seria possível eliminar apenas a coluna B de sua fórmula, já que o texto original se encontra na C. Na célula D2, você poderia usar a fórmula:

    =REPT("      ";NÚM.CARACT(A2)-NÚM.CARACT(SUBSTITUIR(A2;".";"")))&SUBSTITUIR(C2;"1 - ";"")

    No entanto, é possível você criar essa indentação numa macro. Use o código abaixo:

    Sub Indentar()
        Dim lRow As Long
        Dim lNível As Long
        Dim lOrigem As Long
        Dim lLast As Long
        Dim bOperação As Boolean
        
        With ActiveSheet
            .Cells.IndentLevel = 0
            lLast = .Cells(.Rows.Count, "A").End(xlUp).Row
            
            For lRow = 2 To lLast
                .Rows(lRow).IndentLevel _
                = Len(.Cells(lRow, "A")) - Len(Replace(.Cells(lRow, "A"), ".", ""))
            Next lRow
        End With
            
    End Sub


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

    quarta-feira, 10 de outubro de 2012 01:41
  • Rápido e rateiro. Perfeito.

    Fiz uma adaptação no código que me enviaste para desfazer o procedimento. Como disse antes, estou começando. Pretendo também unificar os códigos Gerar e Identar. Tenho também dois códigos que criam aos ID's. Só preciso encontrá-los nos meus organizados.

    Assim que eu alterar, enviarei para críticas, caso queira.

    Obrigado.

    quarta-feira, 10 de outubro de 2012 15:34
  • Rápido e rateiro. Perfeito.

    Fiz uma adaptação no código que me enviaste para desfazer o procedimento. Como disse antes, estou começando. Pretendo também unificar os códigos Gerar e Identar. Tenho também dois códigos que criam aos ID's. Só preciso encontrá-los nos meus organizados.

    Assim que eu alterar, enviarei para críticas, caso queira.

    Obrigado.

    For lRow = 2 To lLast
                .Rows(lRow).IndentLevel _
                = Len(.Cells(lRow, "A")) - Len(Replace(.Cells(lRow, "A"), ".", ""))
            Next lRow

    Desfazer identação

    For lRow = 2 To lLast
                .Rows(lRow).IndentLevel = True
                
            Next lRow

    quarta-feira, 10 de outubro de 2012 15:51