Pergunte aqui
0

Como remover linhas em branco, usando macro, em uma planilha protegida?

perguntadas 2019-12-08 03:39:20 +0200

imagem do gravatar de RobsonT

updated 2019-12-10 19:59:00 +0200

imagem do gravatar de Schiavinatto

Tenho uma planilha com cadastro de clientes, por exemplo. As informações dos clientes são inseridas e/ou excluídas nas linhas da planilha. Porém, às vezes sobram linhas em branco, vazias, e que são desnecessárias. Por isso, para deixar a planilha organizada preciso excluir as linhas em branco, mas, são muitas. Como faço isso usando macro? Lembrando que a planilha está protegida.

Obrigado.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

1

respondidas 2019-12-08 04:05:15 +0200

imagem do gravatar de Schiavinatto

updated 2019-12-08 04:07:30 +0200

@RobsonT, tem que Desproteger a planilha, e depois proteger...

'================================================|
Sub RemoverLinhasEmBranco
' observação: Remove Linhas Em Branco de toda planilha ativa
'================================================|
' Macro que remove linhas em branco em uma planilha          '
' Desenvolvida incialmente por Noelson Duarte em 02/06/2005. '
' Alterada por Francival Lima em 01/03/2008                  '
'---------------------------------------------------------'
            Call DesprotegerPlanilha "Planilha", "Senha"
Dim oDoc As Object
Dim oControlador As Object
Dim oPlan As Object
Dim oCursor As Object
Dim vEnd As Object
Dim oExt As Object
Dim oLinhas As Object
Dim nTotal As integer 'As Object
Dim nFlags As Boolean 'As Object
oDoc = thisComponent
 oControlador =oDoc.getCurrentController()
'-----Retorna o controlador do Documento aberto.
oPlan = oControlador.getActiveSheet()
'-----Retorna a planilha ativa.
oCursor = oPlan.createCursor()
'-----Cria um cursor
oCursor.gotoEndOfUsedArea(False)
vEnd = oCursor.getRangeAddress()
oExt = oPlan.getCellRangeByPosition(0,0,vEnd.EndColumn,vEnd.EndRow)
oLinhas = oExt.getRows()
nTotal = oLinhas.getCount() - 1
nFlags = com.sun.star.sheet.CellFlags.VALUE OR _
com.sun.star.sheet.CellFlags.DATETIME OR _
com.sun.star.sheet.CellFlags.STRING OR _
com.sun.star.sheet.CellFlags.ANNOTATION OR _
com.sun.star.sheet.CellFlags.FORMULA
For i = nTotal To 0 Step -1
   oExtLin = oPlan.getCellRangeByPosition(0, i, vEnd.EndColumn, i)
   oCelulasNaoVazias = oExtLin.queryContentCells(nFlags)
   If oCelulasNaoVazias.getCount() = 0 Then
      oLinhas.removeByIndex(i, 1)
   End If
Next i
            Call ProtegerPlanilha "Planilha", "Senha"
End Sub

Incluida no inicio Desproteger e no final Proteger

'================================================|
Sub DesprotegerPlanilha ( xPlanilha As String, xsenha As string )
'================================================|
    Dim oDoc As Object, oPlan As Object
    Dim Senha as String
        oDoc = ThisComponent
        oPlan = oDoc.Sheets.getByName( xPlanilha )
        Senha = xsenha            '<= AQUI É A SENHA........
        ' Despoteger a planilha
        oPlan.Unprotect(Senha)
End Sub

'================================================|
Sub ProtegerPlanilha ( xPlanilha As String, xsenha As string )
'================================================|
    Dim oDoc As Object, oPlan As Object
    Dim Senha as String
        oDoc = ThisComponent
        oPlan = oDoc.Sheets.getByName( xPlanilha )
        Senha = xsenha            '<= AQUI É A SENHA........
        ' Proteger a planilha
        oPlan.Protect(Senha)
End Sub

-----------------------------------------------------------------------------

ATENÇÂO:: Para dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Não use Adicionar resposta para comentário. Grato.

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta. .

editar assinalar como ofensivo Excluir Link mais

Comentários

@Schiavinatto muito obrigado pela ajuda. Não sei usar o VBA. Você pode me explicar como fazer gravando macro pelo calc normalmente usando teclado e mouse?

imagem do gravatar de RobsonTRobsonT ( 2019-12-08 04:27:02 +0200 )editar
1

@RobsonT, veja aqui:

https://www.schiavinatto.com/mundolib...

ATENÇÃO: O arquivo tem que ser do Calc (ods)

E caso queira colocar um Botão: https://www.schiavinatto.com/mundolib...

OU criar um Menu: https://www.schiavinatto.com/mundolib...

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-12-08 19:04:14 +0200 )editar

Olá prezado @Schiavinatto. Eu só consegui incluir a macro e executá-la com a planilha desprotegida. Como faço para unir as três ações na mesma macro, a saber: 1) desproteger a planilha; 2) excluir as linhas em branco e em seguida proteger a planilha novamente, finalizando assim o processo. Como faço isso?

imagem do gravatar de RobsonTRobsonT ( 2019-12-09 19:10:26 +0200 )editar
1

@RobsonT, na macro RemoverLinhasEmBranco tem duas chamadas de submacros:

Call DesprotegerPlanilha "Planilha", "Senha"

e

Call ProtegerPlanilha "Planilha", "Senha"

Alatere "Planilha" pelo nome de sua planilha

e "Senha" pela senha.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-12-09 20:21:27 +0200 )editar

Eu fiz isso: no campo "Planilha" eu digitei o nome da planilha, entre aspas e no campo "Senha" digitei a senha, entre aspas, mas não deu certo. Quando executo a ação surge na tela de edição da macro com a mensagem: "Erro de execução do BASIC. Procedimento Sub ou procedimento de Function não definido".

imagem do gravatar de RobsonTRobsonT ( 2019-12-09 21:45:27 +0200 )editar

Ola @RobsonT, é possível me enviar cópia da planilha, sigilo garantido.

Contato: https://wiki.documentfoundation.org/U...

Arquivo exemplo com macro alterada.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-12-11 14:37:06 +0200 )editar

Olá caro Schiavinatto. Já encaminhei minha planilha para teu email.

imagem do gravatar de RobsonTRobsonT ( 2019-12-11 19:06:01 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2019-12-08 03:39:20 +0200

Lidas: 70 vezes

Última atualização: Dec 08 '19