MACRO - IMPRIME E DELETA

TENTEI ELABORAR UM MACRO QUE IMPRIME E DEPOIS DELETA OS DADOS, JÁ GRAVEI MACRO PARA SABER COMO IMPRIMIR E COMO LIMPAR/DELETAR; E DEPOIS JUNTEI. PORÉM, OU ELE LIMPA ANTES DE IMPRIMIR OU APARECE A DELA DE VISUALIZAÇÃO DE IMPRESSÃO MAS NÃO DELETA DEPOIS, E O ÚLTIMO QUE FIZ SÓ VISUALIZA A IMPRESSÃO MAS NÃO DELETA… SEGUE MACRO ABAIXO PARA ANÁLISE

sub teste3
rem ----------------------------------------------------------------------
rem define variables
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")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "topoint"
args1(0).Value = "$d$16"

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())

dim args2(5) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVD"
args2(1).Name = "FormulaCommand"
args2(1).Value = 0
args2(2).Name = "SkipEmptyCells"
args2(2).Value = false
args2(3).Name = "Transpose"
args2(3).Value = false
args2(4).Name = "AsLink"
args2(4).Value = false
args2(5).Name = "MoveMode"
args2(5).Value = 6

dispatcher.executeDispatch(document, "uno:InsertContents", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$D$16"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

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


end sub

E APROVENTANDO TEM COMO CRIAR UM MACRO QUE IMPRIME, SALVA E LIMPE OS DADOS…

Oi @JorgeThomaz, separei os melhores pedaços e juntei tudo…

Com as ajudas do @Grafeno, sempre se aprende algo novo, obrigado.

Macro principal:

sub IRAM
	ImprimirRegistro
	RegistrarFerias
	ApagarDados
	ir_nome 'retorna ao Campo: nome.
	Mensagem
    Salvar
end sub

As filhas:

Sub ImprimirRegistro
Dim oDoc As Object
Dim oDocFrame As Object
Dim oDispatcher As Object
   'Chamar Janela Imprimir'
   oDoc = ThisComponent
   oDocFrame = oDoc.CurrentController.Frame
   oDispatcher = createUnoService( "com.sun.star.frame.DispatchHelper" )
   oDispatcher.executeDispatch( oDocFrame, ".uno:Print", "", 0, Array() )
End Sub

.

sub RegistrarFerias
rem ----------------------------------------------------------------------
rem define variables
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 args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "DADOS_COPIAR"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "IrLista"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(1) as new com.sun.star.beans.PropertyValue
args4(0).Name = "By"
args4(0).Value = 1
args4(1).Name = "Sel"
args4(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, args4())
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args4())
rem ----------------------------------------------------------------------
dim args6(5) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVD"
args6(1).Name = "FormulaCommand"
args6(1).Value = 0
args6(2).Name = "SkipEmptyCells"
args6(2).Value = false
args6(3).Name = "Transpose"
args6(3).Value = false
args6(4).Name = "AsLink"
args6(4).Value = false
args6(5).Name = "MoveMode"
args6(5).Value = 6
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args6())
rem ----------------------------------------------------------------------
end Sub

.

Sub ApagarDados
Dim oDoc As Object
Dim oDocFrame As Object
Dim oDispatcher As Object
Dim oPlan As Object
Dim oIntervalo As Object
    'Deletar o conteúdo do intervalo'
    oDoc = ThisComponent
    oDocFrame = oDoc.CurrentController.Frame
    oDispatcher = createUnoService( "com.sun.star.frame.DispatchHelper" )
    oPlan = oDoc.Sheets.getByName( "LICENÇA-PRÊMIO" )
    oIntervalo = oPlan.getCellRangeByName( "nome" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "quinquenio" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "matricula" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "dias" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "perinicio" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "pertermino" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "retorno" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "adiasalarial" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "Substituto" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "nsubstituto")
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "idsubstituto" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "Deferido" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
    oIntervalo = oPlan.getCellRangeByName( "Indeferido" )
    oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'
 End Sub

.

sub ir_nome
rem ----------------------------------------------------------------------
rem define variables
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 = "nome"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
end sub

.

sub Mensagem
rem ----------------------------------------------------------------------
rem define variables
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 args14(0) as new com.sun.star.beans.PropertyValue
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args14())
msgbox "Licença Prêmio Registrada"
end Sub

.

sub Salvar
	'Salvar o documento'
	Dim oDoc As Object
    oDoc = ThisComponent
    oDocFrame = oDoc.CurrentController.Frame
    oDoc.Store()
end sub

Arquivo teste.

Oi gilberto a quanto tempo…
Obrigado Grafeno, mas deu problema…

Até no primeiro momento deu certo, mas ao inserir os macros na planilha real ao invés de imprimir a aba “licença-prêmio” acaba imprimindo a aba “registro”. Há alguma forma de resolver isso, pois ao inserir os demais dados no arquivo teste, ela nem aparecia os dados salvos… Há como enviar a planilha para ver aonde está o problema…estou usando o libre 5.1, no serviço…

Oi @JorgeThomaz, para enviar o arquivo, no comentário não dá, edite a pergunta e inclua o arquivo.

mandei arquivo para seu email…

@JorgeThomaz, nada recebido em gilberto@schiavinatto.com, olhei direto no provedor e nada bloqueado!!!

Enviei agora, dá uma olhada…
E aproveitando recebeu o arquivo que esta pedindo…

Negativo, não recebido. tente newsletter@schiavinatto.com, esta trabalhando em servidor, talvez ele que esteja impedindo de sair anexos. Coloque em Dropbox e envie o link.

Oi já enviei, estou usando o meu email do gmail, com assunto PROBLEMA DE MACRO. Além do arquivo sobre macro, também estou lhe mandando os arquivos que tinha me pedido (estão zipados)…ME INFORME SE AINDA NÃO RECEBEU…TÁ DÍFICIL. TENTEI USAR O WAIT mas não salva os dados…

Ok recebido, vejo com calma a noite…

ÓTIMO…

Ok macros adaptadas/corrigidas, arquivo em devolução.

Minha sugestão é automatizar as mesmas ações via API.
O gravador de macro pode trazer comportamentos insperados.

Uma macro que imprime, limpa o conteúdo (de um intervalo) e salva o documento ficaria:

Sub TesteImpressao2
Dim oDoc As Object
Dim oDocFrame As Object
Dim oDispatcher As Object
Dim oPlan As Object
Dim oIntervalo As Object

   'Chamar Janela Imprimir'
   oDoc = ThisComponent
   oDocFrame = oDoc.CurrentController.Frame
   oDispatcher = createUnoService( "com.sun.star.frame.DispatchHelper" )
   oDispatcher.executeDispatch( oDocFrame, ".uno:Print", "", 0, Array() )

   'Deletar o conteúdo do intervalo'
   oPlan = oDoc.Sheets.getByName( "Planilha1" )
   oIntervalo = oPlan.getCellRangeByName( "B2:B10" )
   oIntervalo.ClearContents( 5 ) 'String (1) + Values (4)'

   'Salvar o documento'
   oDoc.Store()
 End Sub

Obs.: Adaptada para invocar a janela Imprimir.

Atte,

1 Like

Esta macro é só um exemplo ilustrativo. Espero o seu feedback para que possamos ajustá-la.

Ficou beleza, mas gostaria se tem como aparecer a tela "imprimir " para conferir se está ok a impressão. E aproveitando, gostaria de saber se tem como inserir este macro com outro que o Gilberto me ajudou a elaborar (sub registrarferias), segue link da planilha Dropbox - Teste.ods - Simplify your life

@JorgeThomaz, adaptei a macro para fazer a invocação da janela “Imprimir”. Quanto a sua outra dúvida, é possível incluir sim. Depois de adaptá-la para apagar os dados do intervalo correto, você pode ao final da macro RegistrarFerias, antes do End Sub, acrescentar a linha Call TesteImpressao2. Assim a macro RegistrarFerias vai chamar a macro TesteImpressao2. Atte, Grafeno.

ok, mas como seria a ordem, pois ela deve imprimir antes de salvar e apagar no macro RegistrarFerias. Tem como as alterações ser na planilha que esta no link, pois são muitos intervalos para salvar e limpar na planilha/aba que corresponde a macro RegistrarFérias