Comandos para classificar coluna e visualizar impressão

Olá, pessoal!

Pesquisei, digitando: Classificar, Visualizar, Impressão, na busca aqui e não obtive o resultado esperado.

Estou tentando deixar em ordem crescente a coluna A e abrir a opção Visualizar impressão (Ctrl+Shift+O), utilizando a mesma rotina da Macro na planilha (Alt+F11) anexa. Tudo sem alterar o primeiro resultado na coluna D da tabela.

Seguem abaixo uma imagem ilustrativa da tabela e a Macro na planilha anexa, a fim de facilitar o entendimento:

ilustração

Sub OrdenarVisualizar
Dim oDoc As Object, oPlan As Object
Dim oIntervalo1 As Object, oIntervalo2 As Object

' Classificar em ordem crescente a coluna A

' Inciar os objetos
oDoc = ThisComponent
oPlan = oDoc.Sheets.getByName( "Plan1" )
oIntervalo1 = oPlan.getCellRangeByName( "A2:A18" )
oIntervalo2 = oPlan.getCellRangeByName( "B2:B18" )

' Copiar os dados (sem formato)
oIntervalo2.setDataArray( oIntervalo1.getDataArray )
	
' Visualizar impressão (Ctrl+Shift+O)

End Sub

Planilha modelo

Grato pela atenção!!

Orlando Souza

Olá,


Os avisos não serão disparados se ao invés do Dispatcher for usada a API UNO para escrever o código de classificação:
Sub OrdenarVisualizar
Dim oDoc As Object, oPlan As Object
Dim oIntervalo1 As Object, oIntervalo2 As Object

' Inciar os objetos
oDoc = ThisComponent
oPlan = oDoc.Sheets.getByName( "Planilha1" )
oIntervalo1 = oPlan.getCellRangeByName( "A2:A18" )
oIntervalo2 = oPlan.getCellRangeByName( "B2:B18" )

' Classificar em ordem crescente a coluna A (sem Dispatcher)
'1º- os campos de classificação
Dim mCampos(0) as New com.sun.star.util.SortField
mCampos(0).Field = 0
mCampos(0).SortAscending = True
'2º- Descrever a classificação
Dim mDescricao(1) As New com.sun.star.beans.PropertyValue   
mDescricao(0).Name = "SortFields"
mDescricao(0).Value = mCampos()
mDescricao(1).Name = "HasHeader"
mDescricao(1).Value = False
'3º- classificar o intervalo
oIntervalo1.Sort( mDescricao )

' Copiar os dados (sem formato)
oIntervalo2.setDataArray( oIntervalo1.getDataArray )

' Visualizar impressão (Ctrl+Shift+O)
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dispatcher.executeDispatch(document, ".uno:PrintPreview", "", 0, Array())

End Sub

Atte,

Ficou ótimo!!

Mais uma vez, muito obrigado!

:slight_smile:

Usei a Macro para Classificar em ordem crescente a coluna A e abrir Visualizar impressão, porém a classificação da coluna A é interrompida com caixa de diálogo. Conforme segue:

Sub OrdenarVisualizar
Dim oDoc As Object, oPlan As Object
Dim oIntervalo1 As Object, oIntervalo2 As Object

	' Classificar em ordem crescente a coluna A
	dim document   as object
	dim dispatcher as object
	rem ----------------------------------------------------------------------
	rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	rem ----------------------------------------------------------------------
	dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = "$Planilha1.$A$1:$A$18"
	
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
	
	rem ----------------------------------------------------------------------
	dim args2(7) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "ByRows"
	args2(0).Value = true
	args2(1).Name = "HasHeader"
	args2(1).Value = true
	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 = 1
	args2(7).Name = "Ascending1"
	args2(7).Value = true
	
	dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())

' Inciar os objetos
oDoc = ThisComponent
oPlan = oDoc.Sheets.getByName( "Plan1" )
oIntervalo1 = oPlan.getCellRangeByName( "A2:A18" )
oIntervalo2 = oPlan.getCellRangeByName( "B2:B18" )

' Copiar os dados (sem formato)
oIntervalo2.setDataArray( oIntervalo1.getDataArray )

	' Visualizar impressão (Ctrl+Shift+O)
	dispatcher.executeDispatch(document, ".uno:PrintPreview", "", 0, Array())
    
End Sub