Pergunte aqui
1

Copiar/colar via macro calc sem dispatcher

perguntadas 2019-07-02 12:34:03 +0200

imagem do gravatar de Júnio Vieira

updated 2019-07-03 18:13:42 +0200

Pessoal procuro sempre criar minhas macros sem utilizar o gravador de macros, porém alguns comandos simplesmente não consigo como é o caso do copiar/colar, se alguém souber se é possível utilizar os comandos copiar/colar sem o dispatcher ficaria muito agradecido.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

2

respondidas 2019-07-02 13:07:26 +0200

imagem do gravatar de Conrado

updated 2019-07-02 20:26:49 +0200

@Júnio Vieira

Segue. Adapte para sua necessidade.

Sub Copiar_Colar

    Dim LastRow, StartRow1 as Long

    oDoc = ThisComponent

    oPlanilha1 = oDoc.Sheets.GetByName("Origem")
    oPlanilha2 = oDoc.Sheets.GetByName("Destino")

    LastRow1 = Ultima_Linha_Origem
    LastRow2 = Ultima_Linha_Destino

    'Variável Copiar = Range definida para copiar as informações da Planilha1 com base na última linha preenchida.
    oCopyRange = oPlanilha1.getCellRangeByPosition(0, 2, 22, LastRow1).getRangeAddress()

    'Variável Colar = Cola as informações copiadas para a planilha2
    oPasteRange = oPlanilha2.getCellByPosition(0, 1).getCellAddress()

    'Essa linha copia e cola as informações da planilha alvo
    oPlanilha2.CopyRange(oPasteRange, oCopyRange)

    'Essa linha apaga as informações copiadas.
    oPlanilha1.getCellRangeByPosition(0, 1, 22, LastRow1).ClearContents (7)

End Sub

Sub Ultima_Linha_Origem () as Long

    oDoc = ThisComponent
    oPlanilha1 = oDoc.Sheets.GetByName("Origem")

    REM Procedimento para encontrar a última linha preenchida

    REM Cria cursor na planilha referenciada em A1
    c = oPlanilha1.CreateCursor

    REM Percorre até última céluala preenchida (função ctrl + end do teclado)
    c.GoToEndOfUsedArea(False)

    REM Traz a posição da última célula preenchida em qualquer lugar. A posição parte: Posição 0 = linha 1, Posição 1 = Linha2
    Ultima_Linha_Origem = c.RangeAddress.EndRow

End Sub

Sub Ultima_Linha_Destino () as Long

    oDoc = ThisComponent
    oPlanilha2 = oDoc.Sheets.GetByName("Destino")

    REM Procedimento para encontrar a última linha preenchida

    REM Cria cursor na planilha referenciada em A1
    c = oPlanilha2.CreateCursor

    REM Percorre até última céluala preenchida (função ctrl + end do teclado)
    c.GoToEndOfUsedArea(False)

    REM Traz a posição da última célula preenchida em qualquer lugar. A posição parte: Posição 0 = linha 1, Posição 1 = Linha2
    Ultima_Linha_Destino = c.RangeAddress.EndRow

End Sub
editar assinalar como ofensivo Excluir Link mais

Comentários

Excelente @Conrado funcionou muito bem, porém vejo que copia e cola tudo da range selecionada, existe algum método para colar apenas valores? Outra coisa vc utilizou a variável LastRow1 e 2, poderia posta a macro referente essas variáveis? Obrigado!

imagem do gravatar de Júnio VieiraJúnio Vieira ( 2019-07-02 14:30:20 +0200 )editar
imagem do gravatar de BetoBeto ( 2019-07-02 19:21:06 +0200 )editar

@Júnio Vieira aditei a resposta colocando as macros para identificar a última linha das planilhas. Em relação a ele colar apenas valores, não conheço e não encontrei ainda esta opção no Calc sem utilizar o gravador. O que poderia ser feito é uma macro com LOOP (For Next / While Wend) para transferir os valores da origem para o destino. Se precisar de ajuda me envie um e-mail com dados fictícios qalquer coisa.

imagem do gravatar de ConradoConrado ( 2019-07-02 20:31:02 +0200 )editar

Vejam esta resposta. Tem um exemplo de como copiar apenas os dados de um intervalo para outro através do método (set/get)DataArray.

imagem do gravatar de GrafenoGrafeno ( 2019-07-03 01:01:15 +0200 )editar
1

@Grafeno, show ...ainda não tinha visto este método. Estava lendo ontem o link que o @Beto havia postado que segue a mesma sistemática. Achei muito interessante este procedimento, ele passa apenas os valores apresentados em células. Obrigado.

imagem do gravatar de ConradoConrado ( 2019-07-03 12:50:22 +0200 )editar
2

Obrigado mais uma vez @Conrado. @Grafeno muito show esse método. @ Beto muito obrigado também pela sua dica, fico realmente muito grato à todos, a cada dia fica mais satisfatório trabalhar programação no basic.

imagem do gravatar de Júnio VieiraJúnio Vieira ( 2019-07-03 18:07:29 +0200 )editar

Imagina, @Júnio Vieira somente indiquei a resposta do mesmo @Grafeno, que já me ajudou várias vezes com as suas macros "mágicas" :)

imagem do gravatar de BetoBeto ( 2019-07-04 01:30:33 +0200 )editar
1

@all: temos muitas macros bacanas nas bibliotecas do sistema. Em particular "GetLastUsedRow" que retorna o indice da ultima linha. Vejam na ajuda e também em https://help.libreoffice.org/6.4/pt-B...

imagem do gravatar de OlivierOlivier ( 2019-07-04 15:58:22 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2019-07-02 12:34:03 +0200

Lidas: 25 vezes

Última atualização: Jul 02