Pergunte aqui
1

MACRO - IMPRIME E DELETA

perguntadas 2017-04-06 17:46:37 +0200

imagem do gravatar de Jorge Thomaz

updated 2017-05-24 18:51:43 +0200

imagem do gravatar de Grafeno

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.....

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

2 Respostas

0

respondidas 2017-04-07 15:40:28 +0200

imagem do gravatar de Grafeno

updated 2017-04-08 15:23:07 +0200

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,

editar assinalar como ofensivo Excluir Link mais

Comentários

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

imagem do gravatar de GrafenoGrafeno ( 2017-04-07 15:43:56 +0200 )editar

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 planilhahttps://www.dropbox.com/s/lwybth5q8ve60pm/Teste.ods?dl=0

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2017-04-07 20:15:32 +0200 )editar

@Jorge Thomaz, 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.

imagem do gravatar de GrafenoGrafeno ( 2017-04-08 15:36:39 +0200 )editar

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

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2017-04-09 19:24:15 +0200 )editar
1

respondidas 2017-04-09 23:50:18 +0200

updated 2017-04-11 02:48:07 +0200

Oi @Jorge Thomaz, 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 ...
(mais)
editar assinalar como ofensivo Excluir Link mais

Comentários

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......

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2017-04-10 19:12:38 +0200 )editar

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

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2017-04-10 20:53:21 +0200 )editar

mandei arquivo para seu email......

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2017-04-10 21:07:35 +0200 )editar

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

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2017-04-11 02:46:14 +0200 )editar

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

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2017-04-11 03:08:16 +0200 )editar

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.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2017-04-11 15:27:18 +0200 )editar

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.....

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2017-04-11 17:42:11 +0200 )editar

Ok recebido, vejo com calma a noite....

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2017-04-11 18:52:00 +0200 )editar

ÓTIMO.....

imagem do gravatar de Jorge ThomazJorge Thomaz ( 2017-04-11 19:14:14 +0200 )editar

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

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2017-04-12 04:09:52 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2017-04-06 17:46:37 +0200

Lidas: 161 vezes

Última atualização: Apr 11 '17