Pergunte aqui
0

Definir o endereço de colagem na macro

perguntadas 2015-09-25 15:24:34 +0200

imagem do gravatar de Beto

updated 2016-04-17 03:05:48 +0200

imagem do gravatar de Grafeno

Fiz um formulário em duas planilhas neste exemplo , Os dados seriam levados da planilha2 sempre ao topo da planilha 1.

Alguém poderia me ajudar em como modificar a macro automática que fiz para que ela pegasse pegasse o conteúdo da célula B1 (da planilha2), usando-o como ponto inicial da colação de dados na planilha1? Assim poderia "mandar" para qual célula da planilha 1 os dados iriam...

Muito obrigado!

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Olá, você poderia dar um exemplo do comportamento esperado? Atte, Grafeno

imagem do gravatar de GrafenoGrafeno ( 2015-09-28 16:59:20 +0200 )editar

Aqui, prezado. Obrigado pelo interesse em ajudar!

imagem do gravatar de BetoBeto ( 2015-09-28 20:40:25 +0200 )editar

2 Respostas

2

respondidas 2015-09-29 16:15:23 +0200

imagem do gravatar de Grafeno

Beto,

Acho que consegui chegar perto do que entendi que você deseja. Mas, tive que reescrever a macro do zero porque não conheço a estrutura do "dispatcher", que executa as macros gravadas no LibreOffice. Estou mais familiarizado com a API UNO.

<< Aqui >> está o arquivo com macro:

Sub TransferirDados
Dim oDoc As Object, oPlanOrigem As Object, oPlanDestino As Object
Dim sEndereco As String, sCol As String, sLin As String
Dim iLin As Integer

    'Obter as planilhas de origem e de destino
    oDoc = ThisComponent
    oPlanOrigem = oDoc.Sheets.getByName( "Planilha2" )
    oPlanDestino = oDoc.Sheets.getByName( "Planilha1" )

    ' Pegar o Endereço em B1 na planilha de origem
    sEndereco = oPlanOrigem.getCellRangeByName( "B1" ).String
    ' Pegar a coluna e a linha definidas no endereço 
    sCol = Left( sEndereco,1 )
    sLin = Mid( sEndereco,2,Len( sEndereco ) )


    'Verificar se é um endereço válido
    If  Ucase( sCol ) <> "A" Or Not IsNumeric( sLin ) Then 
        MsgBox "Por favor, forneça um endereço correto.", 16, "Erro"
        Exit Sub
    End If

    ' Transferir os valores
    iLin = cInt( sLin ) - 1 ' Menos 1 porque a posição das células começa com 0.
    oPlanDestino.getCellByPosition( 0,iLin ).String = Ucase(sEndereco)
    oPlanDestino.getCellByPosition( 1,iLin ).String = oPlanOrigem.getCellRangeByName( "B2" ).String
    oPlanDestino.getCellByPosition( 2,iLin ).Value = oPlanOrigem.getCellRangeByName( "B3" ).Value

    ' Limpar o conteúdo do intervalo B1:B3
    ' Argumentos do método clearContents:
    '  -> 1 para apagar valores
    '  -> 4 para apagar strings (texto)
    '  --> 1 + 4 = 5 apaga valores + string
    oPlanOrigem.getCellRangeByName( "B1:B3" ).clearContents( 5 )
End Sub



Espero que o código seja útil!!

At.te,
Grafeno

editar assinalar como ofensivo Excluir Link mais

Comentários

Na mosca, parabéns!! Com certeza é de muita valia! Muito obrigado!

imagem do gravatar de BetoBeto ( 2015-09-29 16:30:23 +0200 )editar

Prezado, existe a possibilidade enviar os dados a outro arquivo invés da planilha1?

imagem do gravatar de BetoBeto ( 2015-11-11 15:27:44 +0200 )editar

@Beto, é possível sim.... mas vc fala de um arquivo novo do Calc gerado pela macro ou um previamente salvo?

imagem do gravatar de GrafenoGrafeno ( 2015-12-01 21:35:23 +0200 )editar

De um previamente salvo.

imagem do gravatar de BetoBeto ( 2015-12-02 12:32:11 +0200 )editar

@Beto, estou pesquisando uma solução... mas será que vc poderia abrir outra pergunta para eu postá-la? Responder aqui ficaria muito tumultuado...

imagem do gravatar de GrafenoGrafeno ( 2015-12-03 17:31:03 +0200 )editar

Claro, Grafeno. Sem falar que ficaria mais difícil para as pesquisas futuras.

imagem do gravatar de BetoBeto ( 2015-12-03 19:12:25 +0200 )editar

Olá amigo Grafeno. Poderia me indicar como faço para que a macro carregue cole como hiperlink?

imagem do gravatar de BetoBeto ( 2017-03-23 20:57:37 +0200 )editar
0

respondidas 2015-09-29 02:56:30 +0200

Oi Beto, não é exatamente o que deseja, mas envio uma sugestão: Transportar dados.ods.


  1. Usei Nomes de intervalos ( Intervalos de banco de dados, não sei o comportamento, nunca usei)
  2. Inclui cabeçalho no bando de dados
  3. no formulário ele sugere o próximo numero, considerando o último cadastrado +1, usar o [ Botão ], desta maneira o numero é único.
  4. confere o numero aceito e solicita o nome
  5. solicita a idade
  6. solicita usar o [ Botão ] para transferi os dados para a tabela.
  7. estando na tabela usar [ Botão ] para voltar ao formulário.
editar assinalar como ofensivo Excluir Link mais

Comentários

Olá, Gilberto, obrigado por tentar ajudar. Não tenho muita dificuldade, inclusive em conseguir jogar a partir de um lugar fixo (tipo sempre no topo), na célula A1, fazendo descer os dados. Para mim seria fundamental, poder escolher no momento da colagem para qual célula mandar. Pois ao cadastrar dados, tenho que pensar em corrigi-los, fazer o processo inverso, pegar das tuplas, transpor novamente, corrigir os dados e colar exatamente onde estavam, evitando (buracos) - linhas vazias a Planilha1

imagem do gravatar de BetoBeto ( 2015-09-29 13:33:45 +0200 )editar

Para alterar os dados da planilha pode-se usar, Dados / Formulário ou Auto filtro. Se for para exclusão do registro, não apague os dados user deletar a linha.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2015-09-29 15:14:22 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2015-09-25 15:24:34 +0200

Lidas: 234 vezes

Última atualização: Sep 29 '15