Notifications
Clear all

Inserir formas (Linha) ou borda através de Macro

30 Posts
2 Usuários
0 Reactions
7,915 Visualizações
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

Galera, estou desenvolvendo um Diário Eletrônico para os professores de minha Escola e talvez esse Diário seja apresentado as demais escolas da rede estadual do meu estado. Para quem é familiarizado com diários de professor vai ser fácil entender e pra quem não é eu explico. Um exemplo apenas para coluna nomes.
Na coluna nomes nós temos 60 linhas B15:M74. Acontece que na maioria das vezes a quantidade de alunos não chega até 60. Suponhamos que tenhamos alunos até a linha de nº 50 (B64:M64), ou seja, dessa linha até a última fica vazio. Quando fechamos o bimestre nós, professores, temos que fazer um risco do vértice superior esquedo da primeira célula vazia até o vértice inferior direito da última célula vazia (No exemplo fica fácil de entender). Dessa forma fica evidente que nesse espaço riscado não pode existir nenhuma informação. Todo campo preenchido pelo professor ou pela secretaria após finalizado tem que receber esse risco. Enfim, o que eu quero saber é se existe a possibilidade de uma macro através de um atalho ou botão fazer esses riscos automaticamente para os professores, pois eles são péssimos com excel e como preenchem muitos diários não podem ficar perdendo tempo em fazer risco de caneta no mesmo.

Uma alternativa seria uma borda interna perpendicular tracejada dentro das células. Abaixo de cada coluna específica um botão para ela. Quando o professor clica as bordas internas acham as células vazias e fazem o serviço automaticamente. (Vou imprimir um modelo pra ver qual tracejado fica mais visível na impressora laser). Uma alternativa seria o botão retirar as bordas internas caso o professor fosse fazer alterações, tal como fazer uma recuperação ou a inserção de um aluno que se matriculou depois. Algo como um liga e desliga e com um aviso para o professor só usar esse recurso quando o diário estiver realmente finalizado e pronto pra impressão. É meio complexo pra exemplificar com palavras.

Apenas a planilha Janeiro está desbloqueada. As notas so são inseridas no mês seguinte e portanto na BH15 tem o risco característico que eu falei nessa planilha. Preenchi para que vocês tenham uma visão de como fica após o professor preencher as partes VERDES e como deveria ficar após a finalização.

 
Postado : 20/03/2012 12:22 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

maublues, aqui no serviço não temos excel 2007, mas pelo que entendi, quanto a questão das Bordas, ou até qualquer tipo de formatação, você poderia estar utilizando a "Formatação Condicional" sem necessitar de macros.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/03/2012 12:41 pm
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

Sim Mauro, entendo. O problema é que as células precisam ficar vazias antes do preenchimento por parte dos professores. Como essa é a condição para a formatação condicional, ou seja, estarem vazias elas vão estar já riscadas antes mesmo do professor começar a preencher e visualmente isso é muito ruim. Quando você ver a tabela vai ter uma noção. O meu plano é: ao clicar no botão o excel acha as céluas que FICARAM vazias e aplica a formatação. No caso de uma formatação condicional as céluas já vão estar vazias desde o princípio e aí tudo vai ficar riscado.

 
Postado : 20/03/2012 1:06 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Entendi, então podemos utilizar algo como abaixo :

    Sub FormataSoVazias()
    
        Dim sRange As Range
        'Defino a range
        Set sRange = Range("B15:M74")
            
            'Colorimos somante as Celulas vazias,
            'mas podemos adicinar qq tipo de formatação
            sRange.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 45
    
    End Sub

A mesma irá colorir o interior das celulas que estiverem vazias no Rangew definido "B15:M74", isto é somente um exemplo, logicamente podemos ajustar para Bordas ou outro tipo de formatação.

Faça um teste e veja se seria isto, assim quando eu tiver acesso ao seu arquivo procuro adaptar a rotina.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/03/2012 1:38 pm
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

Mauro, apesar de não entender muito de como aplicar a macro eu consegui aqui.
No seu exemplo ele pegou as células vazias e pintou de laranja. Bem, o princípio é esse mesmo, porém a formatação é apenas uma moldura interna (risco diagonal dentro da célula). As planilhas já possuem as bordas externas e algumas cores pra ajudar o professor a preencher somente no devido lugar, imitando assim um diário de professor real. Os botões vão executar as macros, pois os professores são totalmente leigos em excel. Cada botão vai executar essa formatação em uma coluna específica de dados, ou seja, na coluna nome, na coluna faltas e presenças, na coluna notas, na coluna média e faltas e na 2º página da planilha no conteúdo ministrado e observaçoes. Alem do mais a impressão do diário é preta e branco e todos os preenchimentos são descartados.
Obrigado de coração.

Detalhe: na coluna nome só eu tenho acesso, pois o diário já vai pronto para o professor e ele não pode alterar ou inserir alunos. Isso cabe a secretaria da escola.

 
Postado : 20/03/2012 2:48 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!
Olá,eu não baixei seu anexo, mas talvez até mesmo, o gravador de macro pode te ajudar!

Se bem que você teria que limpar essa sujeira que o G faz!

Sub diagonal()
'
    With Selection.Borders(xlDiagonalDown)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("B2").Select
    With Selection.Borders(xlDiagonalDown)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("C3").Select
    With Selection.Borders(xlDiagonalDown)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/03/2012 4:14 pm
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

Alexandre, consegui inserir sua macro aqui, mas ela bagunçou outras células e pra dizer a verdade não sei o que sua macro pretende fazer (não entendo todos os códigos). Quando você abrir o meu exemplo vai encontrar um risco na parte fechamento do bimestre na planilha janeiro. Ele pega a primeira célula vazia e vai até a última vazia. Assim você vai entender. Nos outros campos eu inserir a borda interna diagonal, mas na hora de imprimir na impressora a laser fica muito poluído. Quem tem dificuldade pra enxergar não vai gostar.

 
Postado : 20/03/2012 4:41 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Maublues, estive dando uma olhada em seu modelo, e preciso tirar algumas duvidas :

No modelo temos as Inscrições referentes aos Botões :
Pelo que entendi você quer uma Rotina associada a cada Botão, então me confirme se seria o seguinte :

BOTÃO DOS NOMES AQUI - Refere-se ao cjto de celulas que vai de : B15 até M74

BOTÃO DAS PRESENÇAS E FALTAS AQUI - Refere-se ao cjto de celulas que vai de : N15 até BF74

BOTÃO DAS NOTAS AQUI - Refere-se ao cjto de celulas que vai de : BH15 até BM74

Botão da média e falta aqui - Refere-se ao cjto de celulas que vai de : BN15 até BO74 - Nestas Colunas temos Formulas e os resultados de algumas é "0", iremos considera-las como Vazias e aplicar a linha diagonal conforme está no modelo ?

quanto a : conteúdo ministrado e observaçoes, é uma rotina expecifica para cada ? ou pode ser uma para os dois ?

Sobre a questão : "Alem do mais a impressão do diário é preta e branco e todos os preenchimentos são descartados."
Você se refere somente ás celulas pintadas ou as que foram formatadas com as linhas diagonais tambem ?

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/03/2012 5:13 pm
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

Mauro, sim para todas as suas 4 primeiras respostas. Sobre os "0" tem como esconder através de uma fórmula, assim como tem na coluna Média. Mas ainda não vi necessidade de deixá-los escondidos, pois todo aluno começa com zero falta.
O interessante seria essa linha diagonal e não as margens internas em cada célula, pois eu fiz uma impressão e fica muito carregado por conta da quantidade de células pequenas.
O conteúdo ministrado e observações a gente deixa pra segundo plano, por enquanto.
Na opção imprimir em preto e branco somem todos os preenchimentos e só ficam caracteres e linhas, pois a impressora é preto e branco a laser. Mais tarde eu vou postar um exemplo aqui de como eu queria que ficasse.

 
Postado : 21/03/2012 5:42 am
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

Maublues, estive dando uma olhada em seu modelo, e preciso tirar algumas duvidas :

No modelo temos as Inscrições referentes aos Botões :
Pelo que entendi você quer uma Rotina associada a cada Botão, então me confirme se seria o seguinte :

BOTÃO DOS NOMES AQUI - Refere-se ao cjto de celulas que vai de : B15 até M74

BOTÃO DAS PRESENÇAS E FALTAS AQUI - Refere-se ao cjto de celulas que vai de : N15 até BF74

BOTÃO DAS NOTAS AQUI - Refere-se ao cjto de celulas que vai de : BH15 até BM74

Botão da média e falta aqui - Refere-se ao cjto de celulas que vai de : BN15 até BO74 - Nestas Colunas temos Formulas e os resultados de algumas é "0", iremos considera-las como Vazias e aplicar a linha diagonal conforme está no modelo ?

quanto a : conteúdo ministrado e observaçoes, é uma rotina expecifica para cada ? ou pode ser uma para os dois ?

Sobre a questão : "Alem do mais a impressão do diário é preta e branco e todos os preenchimentos são descartados."
Você se refere somente ás celulas pintadas ou as que foram formatadas com as linhas diagonais tambem ?

[]s

Mauro, fiz os exemplos que disse que ia fazer e está em anexo. Você tem que se atentar nas planilhas Janeiro e 1º Bimestre, pois na planilha janeiro as notas não são inseridas. A notas só são inseridas no 1 bimestre.
Os professores precisam fazer esses riscos e eu queria que uma macro descobrise a primeira célula vazia abaixo e/ou abaixo e do lado e inserisse uma linha de ponta a ponta. Os botões em baixo seriam específicos de cada coluna.

 
Postado : 21/03/2012 10:56 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Maublue, como ja disse anteriormente, não tenho 2007 aqui na pref., e hoje está um pouco corrido pois estamos em fase de transição de secretarias.

Se eu chegar cedo em casa hj, vou ver se consigo mexer no seu exemplo, por isso peço um puco de paciência que será um passo de cada vez.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 21/03/2012 11:13 am
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

Sem problemas, sou professor da rede estadual de Goiás e aqui está de greve e a greve continua. Não tenho pressa amigo, pois a pressa é a inimiga da perfeição.

 
Postado : 21/03/2012 11:16 am
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

Galera, quem puder ajudar eu ficaria muito agradecido.
Eu tentei gravar uma macro aqui só pra ver qual era o tipo de texto que saia no VB. Saiu isso.

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A1:B15").Select
    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 0.75, 0.75, 120, 225). _
        Select
End Sub

Pra simplificar bastaria que o professor ao fazer a seleção das células vazias. Cria um botão que aciona a macro que apenas insere uma linha perpendicular entre a primeira célula superior a esquerda e a última célula inferior direita. Pra cada conjunto de colunas um botão que faz a mesma coisa. Tenho que entregar essas tabelas amanhã pra inserir os alunos e seria muito bom ter esse recurso.

 
Postado : 22/03/2012 9:05 am
(@maublues)
Posts: 50
Trusted Member
Topic starter
 

No arquivo em anexo tem o exemplo. Se o professor preencheu a planilha e está pronta pra imprimir, basta ele fazer a seleção do espaço vazio das células desbloqueadas verdes e clicar no botão pra aparecer uma linha (inserir, forma, linha) perpendicular da esquerda para a direita de cima para baixo.

 
Postado : 22/03/2012 9:30 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

maublues, acabou a greve ?

Ontem não tive como mexer em seu modelo, eu salvei em 2003, e contrui agora rapidinho algumas instruções, cole-as em modulo, crie os botões e associeas macros.

Quanto a macro que você postou, utilazr "AddConnector", é um pouco mais complicado, pois se trata de shape, e precisamos informar as coordenadas corretas para serem criadas, não cheguei ainda a utilizar este recursso, mas vou pesquisar a respeito, por enquanto veja se as rotinas abaixo ajudam, será adicionado a borda Diagonal nas celulas vazias :

Sub BOTAO_DoS_NOMES()
       
    Dim sJaneiro As Worksheet
    Dim sRange As Range
    
    Set sJaneiro = Sheets("Janeiro")
    
    'Defino a range
    Set sRange = sJaneiro.Range("B15:B74")
                   
        'Colocamos com Borda na Diagonal somante nas Celulas vazias,
        With sRange.SpecialCells(xlCellTypeBlanks).Borders(xlDiagonalDown)
            .LineStyle = xlContinuous
            .Weight = xlHairline
            .ColorIndex = xlAutomatic
        End With
        
End Sub

    Sub BOTAO_DaS_PRESENCAS()
           
    Dim sJaneiro As Worksheet
    Dim sRange As Range
    
    Set sJaneiro = Sheets("Janeiro")
    
    'Defino a range
    Set sRange = sJaneiro.Range("N15:BF74")
                   
        'Colocamos com Borda na Diagonal somante nas Celulas vazias,
        With sRange.SpecialCells(xlCellTypeBlanks).Borders(xlDiagonalDown)
            .LineStyle = xlContinuous
            .Weight = xlHairline
            .ColorIndex = xlAutomatic
        End With
            
    End Sub

Sub BOTAO_DaS_NOTAS()
       
    Dim sJaneiro As Worksheet
    Dim sRange As Range
    
    Set sJaneiro = Sheets("Janeiro")
    
    'Defino a range
    Set sRange = sJaneiro.Range("BH15:BM74")
                   
        'Colocamos com Borda na Diagonal somante nas Celulas vazias,
        With sRange.SpecialCells(xlCellTypeBlanks).Borders(xlDiagonalDown)
            .LineStyle = xlContinuous
            .Weight = xlHairline
            .ColorIndex = xlAutomatic
        End With
        
End Sub

Sub BOTAO_DaS_MEDIAS()
       
    Dim sJaneiro As Worksheet
    Dim sRange As Range
    
    Set sJaneiro = Sheets("Janeiro")
    
    'Defino a range
    Set sRange = sJaneiro.Range("BN15:BO74")
                   
        'Colocamos com Borda na Diagonal somante nas Celulas vazias,
        With sRange.SpecialCells(xlCellTypeBlanks).Borders(xlDiagonalDown)
            .LineStyle = xlContinuous
            .Weight = xlHairline
            .ColorIndex = xlAutomatic
        End With
        
End Sub

Sub BOTAO_CONTEUDO_MINISTRADO()
       
    Dim sJaneiro As Worksheet
    Dim sRange As Range
    
    Set sJaneiro = Sheets("Janeiro")
    
    'Defino a range
    Set sRange = sJaneiro.Range("BR7:BR66")
                   
        'Colocamos com Borda na Diagonal somante nas Celulas vazias,
        With sRange.SpecialCells(xlCellTypeBlanks).Borders(xlDiagonalDown)
            .LineStyle = xlContinuous
            .Weight = xlHairline
            .ColorIndex = xlAutomatic
        End With
        
End Sub

Veja que é um macro para cada cjto de celulas.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/03/2012 1:17 pm
Página 1 / 2