Pergunte aqui
2

Limpar celulas selecionadas

perguntadas 2017-11-22 15:44:44 +0200

imagem do gravatar de EVERALDO.S

Olá pessoal, estou precisando criar em VBA uma macro que selecione algumas células e limpe o conteúdo. Será que alguém pode me mostrar um exemplo. Grato pela atenção, fico no aguardo.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

3 Respostas

3

respondidas 2017-11-23 22:56:49 +0200

imagem do gravatar de Grafeno

updated 2017-11-23 22:57:56 +0200

Olá,


Segue a minha sugestão:

Sub LimparCelulas
Dim oDoc As Object, oPlan As Object

   oDoc = ThisComponent
   oPlan = oDoc.Sheets.getByName("Orcamento")

   'Limpar intervalo'
   'Argumento: 7 = 1 + 2 + 4 (Valor + Texto + Data/Hora)'
   oPlan.getCellRangeByName("B14:J33").ClearContents( 7 )
End Sub

Para encurtar a história, ao invés de usar ClearContents( com.sun.star.sheet.CellFlags.VALUE + com.sun.star.sheet.CellFlags.DATETIME + com.sun.star.sheet.CellFlags.STRING ) é possível colocar ClearContents( 7 ). Substituímos cada constante ou flag pelo valor que ela representa, somamos e passamos para o método ClearContents.


Atte,

editar assinalar como ofensivo Excluir Link mais

Comentários

Meu voto e minha pergunta complementar: como faria para deletar dentro da planilha "Orcamento" um espaço nomeado? vou fazer esta pergunta nova no ask depois, ok?

imagem do gravatar de BetoBeto ( 2017-11-24 14:18:02 +0200 )editar
1

Ôpa, não precisa mais, foi só trocar a especificação das células pelo nome do intervalo. Valeu, mesmo.

imagem do gravatar de BetoBeto ( 2017-11-24 19:04:28 +0200 )editar
1

Muito obrigado senhores, agora deu certo! Como faz bem compartilhar conhecimento.

imagem do gravatar de EVERALDO.SEVERALDO.S ( 2017-11-24 21:51:43 +0200 )editar
1

respondidas 2017-11-22 17:28:14 +0200

imagem do gravatar de Conrado

Segue exemplo. A mesma funciona no LibreOffice e Excel

> Rem Attribute VBA_ModuleType=VBAModule
> Option VBASupport 1
> 
> Sub ApagarInformacoes ()
> 
> Worksheets("Plan1").Range("B3").ClearContents
> Worksheets("Plan1").Range("A6:B31").ClearContents
> Worksheets("Plan1").Range("D6:W31").ClearContents
> 
> End Sub

Espero que ajude

editar assinalar como ofensivo Excluir Link mais
0

respondidas 2017-11-23 14:51:58 +0200

imagem do gravatar de EVERALDO.S

updated 2017-11-23 15:55:58 +0200

imagem do gravatar de Olivier

Olá Conrado, muito obrigado meu amigo pela atenção, mas não funcionou. Talvez ou passo tela declaro de forma errada. Veja a minha declaração:

Sub LimparCelulas

Worksheets("Orcamento").Range("B14:J33").ClearContents

End Sub

Mensagem de erro: "Erro em tempo de execução do BASIC. Procedimento Sub ou procedimento de Function não definido."

Vou tentar te passar o que eu estou buscando fazer. Já consegui fazer um filtro com macros, conforme segue abaixo.

Sub AplicarFiltroAvancado

Dim oDoc As Object, oPlanAtiva As Object, oPlan1 As Object, oPlan2 As Object, oPlan3 As Object
Dim oIntervalo As Object, oCriterios As Object
Dim oDestino As Object, oFiltro As Object, oFiltroVazio As Object

oDoc = ThisComponent
   oPlanAtiva = oDoc.CurrentController.ActiveSheet
   oPlan1 = oDoc.Sheets.getByName("Orcamento")
   oPlan2 = oDoc.Sheets.getByName( "Consulta" )
   oPlan3 = oDoc.Sheets.getByName("Acessorios")

   oFiltroVazio = oPlan3.createFilterDescriptor( True )
   oPlan3.Filter( oFiltroVazio )

   oIntervalo = oPlan3.getCellRangeByName( "B5:F1048576" )
   oCriterios = oPlan3.getCellRangeByName( "E2:E3" )
   oDestino = oPlan2.getCellRangeByName( "A1" )

   oFiltro = oCriterios.createFilterDescriptorByObject( oIntervalo )
   oFiltro.CopyOutputData = True
   oFiltro.OutputPosition = oDestino.CellAddress
   oFiltro.ContainsHeader = True

   'Filtrar'
   oIntervalo.Filter( oFiltro )


End Sub

O filtro está funcionando corretamente. Agora eu preciso que, ao acionar o filtro as células (B14:J33) da planilha ("Orcamento") sejam limpas.

Grato pela ajuda!

editar assinalar como ofensivo Excluir Link mais

Comentários

O primeiro trecho é VBA puro e tem de ser precedido pela instrução Option VBASupport 1. Caso contrário o Basic não sabe o que é Worksheets

imagem do gravatar de OlivierOlivier ( 2017-11-23 15:57:55 +0200 )editar

Eu ainda estou estudando como se programa em OpenOffice. (Meio complicado em relação ao Excel)

Tente isso. Declare a Variável da Planilha Orcamento.

    oSheet.getByName(sSheetName).getCellRangeByName(sCellRange).ClearContents(com.sun.star.sheet.CellFlags.VALUE)
oSheet.getByName(sSheetName).getCellRangeByName(sCellRange).ClearContents(com.sun.star.sheet.CellFlags.STRING)
oSheet.getByName(sSheetName).getCellRangeByName(sCellRange).ClearContents(com.sun.star.sheet.CellFlags.DATETIME
imagem do gravatar de ConradoConrado ( 2017-11-23 16:30:28 +0200 )editar

Segue um site com as explicações para limpar informações das células com base em sua range

https://www.debugpoint.com/2015/02/de...

imagem do gravatar de ConradoConrado ( 2017-11-23 16:31:31 +0200 )editar
1

Há documentação em portuguẽs pra ajudar também: http://documentation.libreoffice.org/...

imagem do gravatar de OlivierOlivier ( 2017-11-23 16:35:32 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2017-11-22 15:44:44 +0200

Lidas: 417 vezes

Última atualização: Nov 23 '17