Olá Sandro,
SandroLima escreveu:Continuo testando a planilha e por enquanto fiquei restrito à macro de desdobramentos.
Percebi que ao executar na minha planilha a macro inseriu as linhas filhas mas não copiou os dados da linha mãe e a coluna Sub está recebendo a numeração do tipo A-99, por exemplo.
Também percebi que as linhas foram inseridas acima da linha mãe diferente do que aconteceu na sua planilha... Inicialmente achei que era por causa da macro "Ordenar Tabela" mas vi que ela está na forma comentada... o que fiz de errado?
O motivo disso é o que você apontou. A macro responsável por acertar numerações e ordenar a planilha de Atividades é a Ordena_AtivDiarias. Por isso, é necessário descomentar a linha que a aciona. Eu não sei porque, mas a tabela de atividades nessa planilha última que você postou, teve ser nome alterado de TB_AtividadesDiarias, para TB_AtivDiarias. Isso não está refletido na macro Ordena_Diaria. Logo, é necessário entrar nessa macro e mandar substituir todos os errados para os corretos.
Onde entra a Macro Desdobramento2 ? Quado ela é executada? Vi que a macro Desdobra está vinculada ao botão.... e a macro Desdobramento 2?
A Macro Desdobramento2 é lixo, guardado apenas até que os testes estejam concluídos. Ai pode ser apagada. Aliás, recomendo que você inclua um módulo chamado LIXO e mova tudo pra lá, pra sabermos o que estamos guardando apenas temporariamente, e o que está em produção.
O que seria a Variável TipoT (uma nomenclatura para eu entender e deixarcomentado)? TipoM entendi que seria tipo "mãe".
O TipoM será o tipo da linha mãe, a princípio, baseado no tipo escolhido no formulário. O TipoT é o tipo que consta na Tabela. Se TipoT é vazio, então TipoM fica com o tipo escolhido no formulário mesmo, porém, se TipoT tiver conteúdo, isso quer dizer que já havia um Tipo na Tabela quando a rotina da desdobramento foi acionada, já havia sido feito um desdobramento. Assim, se o tipo que já existia na tabela é diferente do que está sendo inserido agora, o TipoM não pode continuar a ter A ou P, e deve passar a ter #.
O que seria a Variável Idx ?
IDX é um mnemónico que eu uso para Indexador. Quando, por exemplo, você define uma matriz de 10 elementos, e usa MAT(5) = “aaa”, o 5 é o indexador (o que dá o endereço) da matriz MAT. No Excel, há vários objetos que possuem indexadores, por exemplo:
rows(5); Columns(22); Sheets(2); etc.
Se eu tenho que percorrer as colunas da planilha, por exemplo, geralmente eu uso a variável COL, mas as vezes uso de uma forma mais genérica IDX.
For Idx = LinhaM To 2E+22 ?
Código: Selecionar todosFor Idx = LinMae To 2E+22
If RngTabela.Cells(Idx + 1, ColReg).Value <> ValRegistro Then Exit For
Next
Isso é um FOR que faz a variável Idx iniciar em LinhaM e não ter valor final de parada. Não ter valor de parada porque eu encerro o FOR usando o Exit For, quando o Registro muda. Como eu não sei quando o Registro mudará, não tenho como colocar valor final do IDX no próprio FOR, e encerro o FOR pelo Exit For.
O problema é que o FOR exige valor final, o que eu não quero colocar. Assim coloco como valor final um valor bem grande, que jamais será atingido, pois fatalmente, o Exit For encerrará o FOR.
Uma forma de digitar rapidamente um valor bem grande é usar a notação científica. O número 2E22 significa 2 seguido de 22 zeros. Então, com 4 digitadas eu escrevo um número enorme. Mas porque 2E22 e não 8E17 ou 3E24, que também seriam números grandes? Porque durante a digitação, como já estou com o dedo no 2, e a tecla E é próxima ao 2, digitar 2e22 é rápido. Parece meio ridículo, mas é assim que faço kkkkkkkk. Detalhe: 1E11 também é fácil de digitar, mas o Excel expande para 100000000000, e eu acho esteticamente feio ter isso na macro. Kkkk
2- No código "RngTabela.Range(Cells(LinIni + 1, ColReg), Cells(LinIni + Qtd, ColQtd)).Formula = _
RngTabela.Range(Cells(LinMae + 0, ColReg), Cells(LinMae + --0, ColQtd)).Formula" o que significa o "--0"?
Agora vem a pior parte kkkkkkk. Você encontrou o meu TOC.
Na verdade não é bem um TOC, mas uma estética nas macros que eu uso, e que me ajuda a bater o olho e rapidamente ver a diferença entre 2 linhas.
Compare:
Código: Selecionar todos RngTabela.Range(Cells(LinIni + 1, ColReg), Cells(LinIni + Qtd, ColQtd)).Formula = _
RngTabela.Range(Cells(LinMae + 0, ColReg), Cells(LinMae + --0, ColQtd)).Formula
e
Código: Selecionar todos RngTabela.Range(Cells(LinIni + 1, ColReg), Cells(LinIni + Qtd, ColQtd)).Formula = _
RngTabela.Range(Cells(LinMae, ColReg), Cells(LinMae, ColQtd)).Formula
Na primeira forma, eu rapidamente vejo que algo está sendo copiado para algum lugar, e que as colunas são as mesmas, a tabela é a mesma, de Fórmula para Fórmula, e as únicas diferenças estão nas linhas. Na segunda forma enxergar isso, pra mim, não é tão automático, embora seja também muito fácil de ver.
LinMae + 0 é igual a LinMae, porque somar zero não altera nada, e faz com que + 0 fique alinhado com + 1 da linha de cima. Porém, no segundo Cell, o valor somado na linha de cima é + QTD. Se eu colocar + 0 ainda assim não fica alinhado. Se colocar + 000 ou + 0.0 o Excel troca pra + 0, e não fica alinhado. Então coloquei + --0, pois somar o negativo do negativo de zero não altera nada, mas fica alinhadinho. Foi só uma forma inócua de alinhar.