VBA – Copiando comentários de uma planilha para outra no Excel

Os fóruns de discussão são bacanas por gerarem situações das mais diversas, o que por consequência acaba gerando soluções que são de igual teor e variedade.

Mais uma que surgiu da necessidade de um colega, a macro abaixo copia todos os comentários de uma planilha do Excel para uma outra informada:

Sub CopiarComentarios(ByVal PlanilhaOrigem As String, ByVal PlanilhaDestino As String)
    Dim wsOrigem As Worksheet, wsDestino As Worksheet
    Dim c As Comment
    Dim r As Range
 
    Set wsOrigem = ThisWorkbook.Worksheets(PlanilhaOrigem)
    Set wsDestino = ThisWorkbook.Worksheets(PlanilhaDestino)
 
    For Each c In wsOrigem.Comments
        Debug.Print c.Parent.Address
 
        Set r = wsDestino.Range(c.Parent.Address)
 
        r.AddComment
        r.Comment.Visible = c.Visible
        r.Comment.Text Text:=c.Text
    Next
End Sub

Sem muito segredo, o código percorre a coleção de comentários (Comments) existente na planilha origem informada. Para cada comentário encontrado, é criado um na planilha destino com os mesmos dados e referências de célula.

Para fazer uma chamada a esta macro, segue um exemplo:

Sub Teste()
    Call CopiarComentarios("Plan1", "Plan2")
End Sub

Que solicita obviamente que os comentários da planilha de nome Plan1 sejam copiados para a planilha de nome Plan2. Para testar, é só copiar o código para um módulo VBA, inserir alguns comentários na Plan1 e executar a macro Teste.

Bom proveito!

VBA – Ocultando linhas em branco em uma lista no Excel

Fruto da necessidade de alguns colegas do Fórum, coloco aqui uma macro que possibilita ocultar as linhas de uma lista ou tabela no Excel. O efeito pode muito bem ser conseguido através do recurso AutoFiltro, mas, como relatado, algumas vezes usuários menos avançados não conhecem a funcionalidade para produzir o efeito determinado.

Para alguns familiarizados, a rotina é uma adaptação da macro que também existe aqui no blog para excluir linhas de acordo com um critério:

Function OcultaLinhasPorCriterio(ByVal nomePlanilha As String, ByVal linhaInicial As Integer, ByVal linhaFinal As Integer, ByVal colunaCriterio As Integer) As Integer
    Dim linhasOcultadas As Integer
    Dim i As Integer
    linhasOcultadas = 0
    With ActiveWorkbook.Worksheets(nomePlanilha)
        i = linhaInicial
        While i <= linhaFinal
            If IsEmpty(.Cells(i, colunaCriterio).Value) Then
                .Cells(i, colunaCriterio).Rows.Hidden = True
                linhasOcultadas = linhasOcultadas + 1
            End If
            i = i + 1
        Wend
    End With
    OcultaLinhasPorCriterio = linhasOcultadas
End Function

Em míudos:

nomePlanilha é o nome da planilha sobre a qual a macro atuará
linhaInicial é o número da linha pela qual a macro comecará a avaliar.
linhaFinal é o número da linha até a qual a macro fará a avaliação
colunaCriterio é o índice numérico da coluna na qual a macro fará o teste do valor vazio.

A macro abaixo faz a chamada a função apontadando para a panilha de nome “Plan1” avaliando a coluna de índice 5 (E) percorrendo até a última linha ocupada:

Sub OcultarLinhasEmBranco()
    MsgBox OcultaLinhasPorCriterio("Plan1", 2, ActiveSheet.UsedRange.Rows.Count, 5) & " linhas ocultadas"
End Sub

Bom proveito!

VBA – Mostrando uma mensagem durante o cálculo do Excel

A pergunta surgiu em um dós fóruns de Excel do qual participo. Das soluções com as quais me deparei, essa foi a mais interessante e limpa. Siga os seguintes passos:

Na planilha em que será avaliada para cálculo, abra o código VBA da planilha e coloque o seguinte código

Private Sub Worksheet_Calculate()
	UserForm1.Show
End Sub

Crie um novo UserForm chamado UserForm1 e adicione este código ao UserForm:

Private Sub UserForm_Activate()
	Call WaitTimer
End Sub

Crie um novo Módulo VBA e adicione o seguinte código:

Sub WaitTimer()
	If Application.CalculationState <> xlDone Then
		Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), _
		Procedure:="WaitTimer", Schedule:=True
	Else
		Unload UserForm1
	End If
End Sub

Essas e algumas outras podem ser vistas na seguinte referência:

http://www.eggheadcafe.com/software/aspnet/35770319/vba-message-box-to-inform.aspx

Bom proveito!

Excel – Protegendo planilhas de maneira eficiente

Republicação de artigo

Como este artigo ainda é muito requisitado, resolvi recolocá-lo aqui no blog, pois anda perdido num HTML antigo do site antigo.

Introdução

O Microsoft Excel permite diversas formas de proteção de dados, incluindo ocultar planilhas e fórmulas a fim de proteger a inteligência, a lógica, da sua planilha.

É importante proteger, conservar a inteligência/lógica de nossas fórmulas, seja por proteção da propriedade intelectual ou por qualquer outro motivo. Alguns recursos são bastante conhecidos. Citarei aqui todas as formas que conheço e que creio serem suficientes para proteger nossas planilhas.

Ocultando planilhas

O método mais básico de proteger planilhas é ocultando-as através do comando: Formatar -> Planilha -> Ocultar, conforme indicado na figura a seguir:

O Excel ocultará a planilha que estiver ativa naquele momento, conforme indicado na figura a seguir:

Esta é uma maneira simples de ocultar as planilhas. Para voltar a exibira as planilhas ocultas, basta usar o comando: Formatar -> Planilha -> Reexibir, conforme indicado na figura a seguir:

Ao executar o comando Formatar -> Planilha -> Reexibir , será aberta a janela Reexibir, na qual são listadas as planilhas ocultas, conforme indicado na figura a seguir. Na listagem estão todas as planilhas ocultas, as quais poderão ser reexibidas.

Por exemplo, para reexibir a planilha Plan1, basta clicar na planilha, para seleciona-la e clicar em OK. Com isso a planilha “Plan1” voltará a ser exibida.

Protegendo e ocultando células

Podemos contornar este problema protegendo a planilha pelo modo clássico. Acionando o comando: Ferramentas -> Proteger -> Proteger planilha, teremos acesso a diferente níveis de proteção à planilha conforme mostra as duas figuras a seguir:

Dentre as opções disponíveis, as mais interessantes são:

Selecionar células bloqueadas à Desmarcando esta opção, o usuário só poderá navegar nas células que tiverem nas suas propriedades, a opção Travada desmarcada (Veja esta opção em Formatar -> Células, guia Proteção).

Selecionar células desbloqueadas à Desmarcando esta opção, o usuário não conseguirá navegar pela planilha.

Todas as outras opções trabalham nesse mesmo padrão. Deixando a caixa de seleção desmarcada, a opção corrente não será liberada ao usuário. Dessa forma você pode conduzir o usuário na utilização da planilha. Outro recurso interessante, é que marcando a opção Oculta na caixa de formatação de células, seu conteúdo (fórmulas) não serão visíveis para o usuário, mesmo que este possa navegar pela célula, conforme ilustrado pela seqüência de figuras a seguir:

Protegendo a planilha conforme citado anteriormente, o conteúdo da fórmula não estará visível na barra de fórmulas:

Outra opção bastante utilizada, porém sem muita proteção é a de ocultar as guias de planilhas no menu Ferramentas -> Opções, guia Exibir, desmarcando a opção Guias de planilha, conforme destacado na figura a seguir:

Dessa forma, planilhas exibidas ou ocultas não estarão visíveis conforme segue:

Até aí tudo bem. Mas não precisamos ser muito veteranos no Excel a ponto de saber alguns atalhos básico como Ctrl+C para copiar, Ctrl+V para colar ou até mesmo Ctrl+1 para abrir a caixa de formatação de células. Por isso, sabemos que existe um atalho também para navegação de planilhas, que é o Ctrl+PageDown para ir para a planilha à direita da planilha atual e Ctrl+PageUp para a esquerda. Ocultar as guias de planilha não impede o usuário de navegar pelas planilhas. Faça o teste e comprove. Abra uma nova pasta, oculta as guias de planilha e tente navegar com os atalhos citados acima.

Algumas combinações desses recursos podem resultar em resultados mais eficientes, porém, existe uma maneira de fazê-lo de forma simples e segura (ou quase).

Ocultando definitivamente as planilhas

As planilhas tem 3 modos de exibição, dois muito conhecidos e 1 mais restrito a usuários avançados, mas que detalharei de forma que possa ser acessível a qualquer nível de usuário.

  • Visível
  • Oculta
  • Muito oculta <- é neste que devemos dar atenção.

Nota: A tradução do recurso (Muito oculta) é por minha conta e risco.

Para acessar este último nível de visibilidade da planilha, teremos que ir ao Editor do Visual Basic disponível no Excel.

Atenção! Dependendo do processo de instalação do Office, o Visual Basic pode não estar disponível em seu Microsoft Excel.

Para acessar o Editor do Visual Basic, vá em Ferramentas, Macro, Editor do Visual Basic, ou simplesmente no Excel, tecle Alt+F11. A janela a seguir será exibida:

Nota: Caso não consiga ver os painéis visíveis à esquerda da tela, acione-os no menu Exibir, Project Explorer (VBA Project) e Janela de propriedades. No Project Explorer, podemos ver todos os objetos de nossa pasta de trabalho hierarquizados. O primeiro é a própria pasta de trabalho, seguida de todas as planilhas identificadas pelo seu respectivo nome.

Selecionando uma das planilhas, suas propriedades serão exibidas na janela de propriedades conforme indicado na figura a seguir:

Obs : as janelas foram re-dispostas na tela para facilitar a visualização.

Detalhar todas as propriedades das planilhas é assunto para outro tutorial. Neste caso, nos atentaremos para a propriedade Visible:

Vou detalhar as opções disponíveis:

Visível -> -1 – xlSheetVisible
Oculta -> 0 – xlSheetHidden
Muito oculta -> 2 – xlSheetVeryHidden

As duas primeiras já são conhecidas e podem ser acessadas pelo Excel como mostrado anteriormente. A propriedade Visible setada para “-1 – xlSheetVisible” é a planilha visível normalmente.

Setada para “0 – xlSheetHidden” , deixa planilha oculta, mas podendo ser exibida através do menu Formatar, planilha, Reexibir.

Já a última opção, coloca a planilha em modo oculto, de forma que nem mesmo através da opção Reexibir , poderá ser acessada! Faça o teste. Coloque a planilha Plan1 com a propriedade Visible setada para “2 – xlSheetVeryHidden”:

Retorne ao Excel, bastando fechar o Visual Basic ou clicando no botão Exibir Microsoft Excel:

Você verá que a planilha Plan1 está oculta como esperávamos. Agora tente ir ao menu Formatar -> Planilha, a opção Reexibir estará desabilitada (conforme indicado na próxima figura). Mesmo que você oculte manualmente a planilha Plan2 ou Plan3 e acionar o menu Reexibir, a planilha Plan1 não aparecerá! Porém, ela continua existindo e pode conter valores referenciados por fórmulas nas outras planilhas. Faça o teste e comprove.

Você pode estar se perguntando: Mas o que eu faço, alguém pode desfazer? A resposta é sim. Mas o nosso trabalho é dificultar ao máximo o trabalho de quem quer fazê-lo, já que não existe sistema 100% seguro, nem mesmo nos poderosos e sofisticados laboratórios na NASA.

A solução é proteger seu projeto VBA. Na mesma tela em que você alterou as configurações da planilha, vá até o Project Explorer e clique com o botão direito no título do Projeto e seleciona Propriedade do VBA Project:

Nesta tela, selecione a opção bloquear projeto para exibição e coloque uma senha para proteção do projeto. Salve e fecha a planilha. Abra-a novamente e vá ao Editor do Visual Basic (Alt+F11). Você verá que o Project Explorer será exibido da seguinte forma:

Se alguém tentar expandir o nó do projeto, verá a seguinte mensagem:

Pronto! Sua planilha está protegida! (desde que você não tenha definido uma senha que seja facilmente descoberta por programas de quebra de senhas. Uma boa senha deve ter letras, números e caracteres especiais. Se tiver somente letras e números, os programas de quebra de senha, como o Passware Kit, irão descobrir a senha em menos de um minuto).

É claro que esta não é uma proteção infalível, até mesmo porque nós mesmos temos o péssimo costume de não anotar senhas e acabamos virando nossa defesa contra nós mesmos. Programas para quebrar senhas como o Advanced Office 2000 Password Recovery podem recuperar a senha de projetos VBA ou sobreescrevê-las para que possam ser acessados.

Meu conselho para este tipo de ferramenta é você adotar uma metodologia segura de definição de senhas, por exemplo, não colocar informações pessoais, não colocar senhas do tipo “1234”. Sempre procure colocar senhas que não se relacionem em nada com você e que contenham letras e números intercalados e, o mais importante, sempre tenha senhas com mais de 6 ou 7 dígitos.

Creio que seguindo estas metodologias, é possível ter um nível de segurança razoável em nossos trabalhos com o Microsoft Excel.

Forte abraço!