Olá!
Segue um exemplo para você adaptar.
'
********************************************************************************************************************
' MACRO DE SELEÇÃO, SELECIONA TODAS AS LINHAS DA COLUNA "E" COM A STRING
"CHINA"
' E COPIA PARA UMA NOVA PLANILHA, MANTENDO A PLANILHA ORIGINAL.
'
********************************************************************************************************************
Sub MyFilter()
Dim oSheet ' Sheet that will contain the filter.
Dim oRange ' O range that will aplicar the filter.
Dim oFilterDesc ' Filter descriptor.
Dim oFields(0) As New com.sun.star.sheet.TableFilterField
Dim x As New com.sun.star.table.CellAddress
' estou aplicando o filtro na segunda planilha, a contagem inicia do zero
- que é a primeira.
oSheet = ThisComponent.getSheets().getByIndex(1)
oRange = oSheet.getCellRangeByName("A1:X1642")
REM If argument is True, creates an empty filter
REM descriptor. If argument is False, create a
REM descriptor with the previous settings.
oFilterDesc = oSheet.createFilterDescriptor(True)
With oFields(0)
REM I could use the Connection property to indicate
REM how to connect to the previous field. This is
REM the first field so this is not required.
'.Connection = com.sun.star.sheet.FilterConnection.AND
'.Connection = com.sun.star.sheet.FilterConnection.OR
REM The Field property is the zero based column
REM number to filter. If you have the cell, you
REM can use .Field = oCell.CellAddress.Column.
.Field = 4 ' SELECIONA a coluna E
REM Compare using a numeric or a string?
.IsNumeric = False
REM The NumericValue property is used
REM because .IsNumeric = True from above.
REM .NumericValue = 80
REM If IsNumeric was False, then the
REM StringValue property would be used.
' .StringValue = "T(" & """China""" & ")" 'T("China")
.StringValue = "China"
' msgbox oFields(0).Stringvalue
REM Valid operators include EMPTY, NOT_EMPTY, EQUAL,
REM NOT_EQUAL, GREATER, GREATER_EQUAL, LESS,
REM LESS_EQUAL, TOP_VALUES, TOP_PERCENT,
REM BOTTOM_VALUES, and BOTTOM_PERCENT
.Operator = com.sun.star.sheet.FilterOperator.EQUAL
End With
REM The filter descriptor supports the following
REM properties: IsCaseSensitive, SkipDuplicates,
REM UseRegularExpressions,
REM SaveOutputPosition, Orientation, ContainsHeader,
REM CopyOutputData, OutputPosition, and MaxFieldCount
oFilterDesc.setFilterFields(oFields())
oFilterDesc.ContainsHeader = True
oFilterDesc.UseRegularExpressions = True
oFilterDesc.CopyOutputData = True
x.Sheet = 3
x.Column = 0
x.Row = 0
oFilterDesc.OutputPosition = x
oRange.filter(oFilterDesc)
End Sub
Abaixo, informação adicional:
REM PARA REMOVER UM FILTRO
Sub RemoveSheetFilter()
Dim oSheet ' Sheet to filter.
Dim oFilterDesc ' Filter descriptor.
oSheet = ThisComponent.getSheets().getByIndex(1)
oFilterDesc = oSheet.createFilterDescriptor(True)
oSheet.filter(oFilterDesc)
End Sub
Boa sorte!
Em 12 de julho de 2013 09:01, Rogerio Luz Coelho
<luz.rogerio@gmail.com>escreveu:
Coloque o macro no corpo da mensagem ou melhor ainda use um lugar onde
podemos baixá-lo (Google Drive, Dropbox).
Também nos diga qual seu sistema operacional e versão do LibreOffice. E a
extensão do arquivo que quer usar (.ods , .doc, etc)
Nos descreva (passo a passo de preferência) o que DESEJA realizar e depois
nos diga o que já conseguiu.
Abraços
R.
Em 11 de julho de 2013 08:15, Contabilidade - ABJJM <
contabilidade_mjjm@terra.com.br> escreveu:
Senhores,Apos algumas leituras em materiais apresentados, aproveitei o
proprio exemplo do Guia Calc Cap. 13, que e justamente a macro
que necessito, porem ao aplica-la em minha planilha nao estou
obtendo o resultado desejavel, vejamos:Ela executa ate certo
ponto corretamente, ou seja ela filtra
os dados desejados porem nao copia os dados filtrados para uma
outra area que e o meu desejo.Tenho uma planilha onde:-os dados
a serem filtrados estao "A1:w1350" (area romeda"DADOS_DE_FILTRO")-
criterios de filtro"A1352:w1353" (area romeda"CRITERIOS_DE_FILTRO")-
copiar
resultado para "A1360" (area nomeda"DADOS_FILTRADOS")Alguem poderia me
ajudar ou encaminhar para algum Forum, pois
sou novo em programacao e nao estou conseguindo resolver o
problema, abaixo segue a Macro para apreciacao.Paulo
FreitasSubUsandoFiltroAvancado()DimoSheet'Uma
planilha
de um documento Calc.DimoRanges'Propriedades
NamedRanges.DimoCritRange'Intervalo
que contm o critrios de filtragem.DimoDataRange'intervalo
que contm os dados a serem
filtrados.DimoFiltDesc'Definies
do filtro.REM
Intervalo
que contm os
critriosoSheet=ThisComponent.getSheets().getByIndex(1)oRanges=ThisComponent.NamedRangesoRange=oRanges.getByName("CRITERIO_DE_FILTRO")oCritRange=oRange.getReferredCells()REM
Pode-se tambm obter o
intervalo contendoREM o critrio de filtragem a
partir de um nome de intervalo.REM oRanges =
ThisComponent.NamedRangesREM oRange =
oRanges.getByName("MediaMenor80")REM oCritRange =
oRange.getReferredCells()REM Os dados que sero
filtradosoSheet=ThisComponent.getSheets().getByIndex(1)oDataRange=oSheet.getCellRangeByName("DADOS_DE_FILTRO")oFiltDesc=oCritRange.createFilterDescriptorByObject(oDataRange)oDataRange.filter(oFiltDesc)REM
Copia o resultado para um
local diferente do local
original.oFiltDesc.CopyOutputData=TrueREM Coluna B, linha 4 (lembre-se,
comea em 0)REM Cria CellAddress e configura
isto para a planilha3,DimxAs
Newcom.sun.star.table.CellAddressx.Sheet=1x.Column=0x.Row=1355oFiltDesc.OutputPosition=xEnd
Sub<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->Paulo Freitas
--
Você está recebendo e-mails da lista usuarios@pt-br.libreoffice.org
# Informações sobre os comandos disponíveis (em inglês):
mande e-mail vazio para usuarios+unsubscribe@pt-br.libreoffice.org
# Cancelar sua assinatura: mande e-mail vazio para:
usuarios+unsubscribe@pt-br.libreoffice.org
# Arquivo de mensagens:
http://listarchives.libreoffice.org/pt-br/usuarios/
--
Você está recebendo e-mails da lista usuarios@pt-br.libreoffice.org
# Informações sobre os comandos disponíveis (em inglês):
mande e-mail vazio para usuarios+unsubscribe@pt-br.libreoffice.org
# Cancelar sua assinatura: mande e-mail vazio para:
usuarios+unsubscribe@pt-br.libreoffice.org
# Arquivo de mensagens:
http://listarchives.libreoffice.org/pt-br/usuarios/
--
Você está recebendo e-mails da lista usuarios@pt-br.libreoffice.org
# Informações sobre os comandos disponíveis (em inglês):
mande e-mail vazio para usuarios+unsubscribe@pt-br.libreoffice.org
# Cancelar sua assinatura: mande e-mail vazio para:
usuarios+unsubscribe@pt-br.libreoffice.org
# Arquivo de mensagens: http://listarchives.libreoffice.org/pt-br/usuarios/
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.