Pergunte aqui
0

Classificar Linhas no Calc em VBA

perguntadas 2014-08-05 17:12:59 +0100

imagem do gravatar de JRicardoLS

Estou com o seguinte problema: Preciso em VBA classificar várias linhas, para isso criei um for/next. Até aí tudo trabalha bem, porém, a cada nova linha a ser classificada aparece um popup perguntando se desejo expandir as células selecionadas para o conjunto inteiro. É inviável ficar clicando para responder a centenas de linhas.

Pergunta: Como faço para suprimir este popup e assim a classificação ocorrer naturalmente até a última linha?

Segue abaixo como está atualmente.

sub Organizar dim document as object dim dispatcher as object document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue dim args2(7) as new com.sun.star.beans.PropertyValue

For j= 3 to 1003 args1(0).Name = "ToPoint" args1(0).Value = "$A$" & j & ":$O$" & j

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

args2(0).Name = "ByRows"
args2(0).Value = false
args2(1).Name = "HasHeader"
args2(1).Value = false
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "NaturalSort"
args2(3).Value = false
args2(4).Name = "IncludeAttribs"
args2(4).Value = true
args2(5).Name = "UserDefIndex"
args2(5).Value = 0
args2(6).Name = "Col1"
args2(6).Value = j
args2(7).Name = "Ascending1"
args2(7).Value = false

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())

Next j end sub

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

0

respondidas 2014-08-13 16:54:37 +0100

imagem do gravatar de Grafeno

Olá,

Pergunta: Como faço para suprimir este popup e assim a classificação ocorrer naturalmente até a última linha?

Não sei como fazer isso via dispatcher (gravador de macro), mas escrevendo a rotina pela LibO Basic + API UNO é possível classificar cada linha sem contudo disparar o popup.

Sub ClassificarLinhas
Dim oPlanilhaAtiva As Object
Dim oIntervaloLinha As Object
Dim oCamposdeClassif(0) as new com.sun.star.util.SortField
Dim oDescritorClassif(3) as new com.sun.star.beans.PropertyValue

    'Planilha ativa
     oPlanilhaAtiva = ThisComponent.getCurrentController().getActiveSheet()

    'Campos (chaves) de classificação
    oCamposdeClassif(0).Field = 0
    'Ordem crescente
    oCamposdeClassif(0).SortAscending = True

    'Indica se NÃO (false) contém títulos/cabeçalhos
    oDescritorClassif(0).Name = "ContainsHeader"
    oDescritorClassif(0).Value = False
    'Direção da classificação: da esquerda para a direita - colunas (true)
    oDescritorClassif(1).Name = "IsSortColumns"
    oDescritorClassif(1).Value = True
    'A matriz de campos (chaves) de classif.
    oDescritorClassif(2).Name = "SortFields"
    oDescritorClassif(2).Value = oCamposdeClassif()

    'Percorre as linhas classificando de acordo com os parâmetros
    For J = 3 To 1003
        oIntervaloLinha = oPlanilhaAtiva.getCellRangeByName( "A" & J & ":O" & J )
        oIntervaloLinha.Sort( oDescritorClassif() )
    Next J
End Sub

O código está comentado, então não preciso acrescentar muita coisa. Apenas que, ao invocar a classificação linha a linha, como são aprox. 1000, a macro consumirá um certo tempo para completar o loop.

Mesmo assim, acredito que ela atenderá o seu caso.

Atte,
Graveno

editar assinalar como ofensivo Excluir Link mais
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2014-08-05 17:12:59 +0100

Lidas: 601 vezes

Última atualização: Aug 13 '14