José luis leal Posted June 8, 2014 at 08:18 AM Report #558619 Posted June 8, 2014 at 08:18 AM (edited) Bom dia! há quem se disponha a ajudar um autodidacta maçarico? o problema é o seguinte: Estou a tentar fazer com que uma linha no Excel, que tem um incremento de datas que representa o dia 29/fev/aa, fique oculta, a ideia é a seguinte a célula estaria oculta enquanto o ano não mudar para bissexto , e quando fosse bissexto voltaria a ficar visível. Já tentei de variadas formas mas a minha dificuldade, ou aselhice veio ao de cima, e fez com que eu não consiga resolver este problema, estou convicto que a grande maioria dos utilizadores deste fórum o resolvem com certa facilidade. Desde já um grande OBRIGADO a QUEM se der ao trabalho de me ajudar. Edited June 8, 2014 at 10:48 AM by José luis leal
Wagner Morel Posted June 8, 2014 at 01:41 PM Report #558651 Posted June 8, 2014 at 01:41 PM José luis leal, Bom Dia! Como você não dá muitos detalhes da sua planilha, vou fazer suposições, pois em programação, os mínimos detalhes são importantíssimos: 1 - Supondo que a linha que você quer ocultar seja a linha 2 - Supondo que seu ficheiro se chama Teste.xlsm 3 - Supondo que a Guia onde você tem essa linha 5 que quer ocultar se chame Folha1 4 - Supondo que o cabeçalho dos seus dados começa na linha 1 5 - Supondo que as linhas restantes começa na linha 2 6 - Supondo que os dados começam na coluna A 7 - Supondo que os dados vão até a coluna G 8 - Supondo que os dados vão até a linha 10 9 - Supondo que a data de 29/02/aa esteja na célula B5 Assim, a primeira coisa que você precisa fazer é utilizar uma função que lhe diga se o ano da célula onde está a data de 29/02/aa é um ano Bissexto. Você passa esse ano para a função e ela lhe devolverá TRUE se ano for Bissexto e FALSE se o ano não for Bissexto. Eu utilizo uma função como esta: Public Function Bissexto(intAno As Integer) As Boolean '==================================================================================== 'FUNÇÃO DESENVOLVIDA POR WAGNER MOREL EM 08/06/2014 QUE FAZ A VERIFICAÇÃO SE UM ANO _ É BISSEXTO OU NÃO '==================================================================================== 'Inicializa a função como Falsa Bissexto = False 'Pega o ano passado e verifica se o resto da divisão dele por 4 é igual a Zero If intAno Mod 4 = 0 Then 'Caso positivo, verifica se o resto da divisão desse ano por 100 também é igual a Zero If intAno Mod 100 = 0 Then 'Caso positivo,verifica se o resto da divisão desse ano por 400 também é igual a Zero If intAno Mod 400 = 0 Then 'Caso positivo é porque o ano é um ano Bissexto. atribui verdadeiro à função Bissexto = True End If Else 'Se a divisão do ano por 100 não for igual a zero, o ano também é Bissexto. Bissexto = True End If End If End Function Depois, na sua planilha, você pode ter um módulo que chame a função Bissexto para testar os anos que você quiser e Ocultar as linhas correspondentes que tiverem anos Bissextos, como esse código abaixo: Sub OcultarLinhas() 'Cria variável contadora do tipo Long que armazenará as iterações do laço FOR Dim i As Long 'Cria variável do tipo Long que armazenará o número da ùltima linha com dados da planilha Dim UltimaLinha As Long 'Desabilita as atualizações de tela do Excel Application.ScreenUpdating = False 'Armazena na variável o número da última linha com dados pela coluna A UltimaLinha = Sheets("Folha1").Cells(Cells.Rows.Count, 1).End(xlUp).Row 'Inicia o laço para percorrer todas as linhas da planilha For i = 2 To UltimaLinha 'Passa o ano contido em cada uma célula da coluna B e verifica se esse ano é Bissexto ou não If Bissexto(CInt(Year(Range("B" & i).Value))) = True Then 'Se o ano for Bissexto, seleciona a linha correspondente Rows(i & ":" & i).Select 'Oculta a linha correspondente Selection.EntireRow.Hidden = True End If Next 'Seleciona a célula A1 Range("A1").Select 'Volta a habilitar as atualizações de tela do Excel Application.ScreenUpdating = True 'Exibe mensagemde Sucesso da ocultação de linhas que tenham ano Bissexto MsgBox "Linhas com Ano Bissexto fora Ocultadas!", vbDefaultButton1, "OCULTAR LINHAS" End Sub Esse foi um pequeno exemplo que fiz em razão da ausência de dados mais concretos e reais seus. Todavia, acredito que você possa fazer as necessárias adatpações. Veja que no exemplo, estou ocultandom apenas a linha 5 que [e a única que tem uma data de um ano Bissexto. Você pode alterar as datas e fazer vários testes. Para voltar a exibir novamente as linhas, basta selecioná-las, clicar com o botão direito do mouse em cima da seleção e escolher Reexibir no menu suspenso que surge. Para melhor entendimento, faça o Download do exemplo no link abaixo: http://www.sendspace.com/file/lx6c9p Espero que seja isso e que tenha lhe ajudado!
José luis leal Posted June 9, 2014 at 03:09 PM Author Report #558757 Posted June 9, 2014 at 03:09 PM (edited) Boa tarde! Wagner Morel, Muito Obrigado pela sua resposta, Funciona na perfeição, mas, tenho mais uma questão, será possível atribuir, a macro a uma célula, em vez do botão? Célula essa que será onde eu irei colocar o ano. e sempre que essa célula for editada corre a macro. Edited June 9, 2014 at 03:10 PM by José luis leal
Wagner Morel Posted June 10, 2014 at 10:45 PM Report #558949 Posted June 10, 2014 at 10:45 PM Sim José Luís! É possível. Imaginemos que você colocará o ano na célula B3 da Folha1. Então, basta que você coloque o seguinte código no evento WorkSheet_Change da Folha1, no caso do mesmo exemplo que lhe enviei. Private Sub Worksheet_Change(ByVal Target As Range) 'Desabilita os eventos automáticos da Folha Application.EnableEvents = False 'Cria variável contadora do tipo Long que armazenará as iterações do laço FOR Dim i As Long 'Cria variável do tipo Long que armazenará o número da ùltima linha com dados da planilha Dim UltimaLinha As Long 'Desabilita as atualizações de tela do Excel Application.ScreenUpdating = False 'Verifica se a célula ativa modificada (a que recebeu dado) é a célula do ano (B3) If Target.Address = "$B$3" Then 'Armazena na variável o número da última linha com dados pela coluna A UltimaLinha = Sheets("Folha1").Cells(Cells.Rows.Count, 1).End(xlUp).Row 'Inicia o laço para percorrer todas as linhas da planilha For i = 2 To UltimaLinha 'Passa o ano contido em cada uma célula da coluna B e verifica se esse ano é Bissexto ou não If Bissexto(CInt(Year(Range("B" & i).Value))) = True Then 'Se o ano for Bissexto, seleciona a linha correspondente Rows(i & ":" & i).Select 'Oculta a linha correspondente Selection.EntireRow.Hidden = True End If Next 'Seleciona a célula A1 Range("A1").Select Application.EnableEvents = True 'Volta a habilitar as atualizações de tela do Excel Application.ScreenUpdating = True 'Exibe mensagemde Sucesso da ocultação de linhas que tenham ano Bissexto MsgBox "Linhas com Ano Bissexto foram Ocultas!", vbDefaultButton1, "OCULTAR LINHAS" End If End Sub
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now