Definir o endereço de colagem na macro

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!

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

Aqui, prezado. Obrigado pelo interesse em ajudar!

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

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

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

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

De um previamente salvo.

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

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

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

Como fazer com que os dados seja colados em outras colunas do endereço da celula colada, verifiquei que só cola na coluna A, queria poder colar na coluna e linha que eu quisesse.

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.

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

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.