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