Colar um dado em uma célula sem ir ao local

Tenho este comando:

Dim oData As Variant
	oData = ThisComponent.getSheets.getByName( "Planilha1" ).getCellRangeByName( "D6:D7" ).getDataArray()

Que pega os valores do Range sem ir ao local ( Visualmente as planilhas não Navegam com o cursor )

Os valores, pegos, tem como referencia oData(0)(0) e oData(1)(0)

Alguém conhece o comando que cola em outra planilha sem a tela se mover ?

1 Like

Se quiser apenas passar os dados sem formatação

A fonte e o destino devem ter o mesmo tamanho.

doc = ThisComponent

origen = doc.Sheets.getByName(Sheet1).getCellRangeByName(D6:D7)
destino = doc.Sheets.getByName(Sheet2).getCellRangeByName(D6:D7)
destino.DataArray = origen.DataArray|
1 Like

Ola @elmau, solução perfeita para fonte e destino de áreas iguais.

Mas o meu caso a copia é na vertical ( um formulário ) e a colagem na horizontal ( Banco de dados ), tem como Transpor ?

Com um exemplo claro do que se tem e do que se espera obter, evitamos adivinhar.

Gostaria de COPIAR de uma planilha Formulário

copy

e COLAR em outra planilha para arquivar informações,

Sem que a tela fique “piscando”.

Conheço o comando, para colocar no inicio da macro:

ThisComponent.CurrentController.Frame.ComponentWindow.Visible = False

que desliga a atualização de tela e no final volta a ligar:

ThisComponent.CurrentController.Frame.ComponentWindow.Visible = True

Porem ainda a tela pisca.

Gostaria que o procedimento fosse imperceptível para o usuário.

Grato pela atenção Mauricio.

mas… você ainda me força a começar do zero…

se você anexar o arquivo, eu lhe colocarei o código que você precisa… Sou bastante preguiçoso

Segue o arquivo exemplo, copiar da planilha CAD_Contas e colar na Contas, consegui montar uma que esta funcionando, não é “bonita” mas funcionou.

Ao preencher o Formulário em CAD_Contas, clicar no botão [Salvar].

Não disponível

image

Link corrigido.

Há várias soluções, mas dada a pequena quantidade de dados, esta funciona bem.

Sub SalvarContas()

	doc = ThisComponent
	sheet = doc.CurrentController.ActiveSheet
	sheet_target = doc.Sheets.getByName("Contas")
	source = sheet.getCellRangeByName("D6:D15")
	data = source.DataArray
	
	cell = sheet_target.getCellRangeByName("B6")
	row_free = siguiente_fila_libre(cell)
	c = 1
	For Each row In data
		cell = sheet_target.getCellByPosition(c, row_free)
		cell.String = row(0)
		c = c + 1
	Next
	
	clear_contents(source)
	
End Sub


Function siguiente_fila_libre(celda_origen)
	sheet = celda_origen.SpreadSheet
	cursor = sheet.createCursorByRange(celda_origen)
	cursor.collapseToCurrentRegion()
	ra = cursor.RangeAddress
	siguiente_fila_libre = ra.EndRow + 1
End Function


Function clear_contents(range)
	range.clearContents( _
		com.sun.star.sheet.CellFlags.VALUE + _
		com.sun.star.sheet.CellFlags.STRING)	
End Function
1 Like

Perfeito @elmau, para quem sabe fazer é simples.

Sobre seu comentário, “Sou bastante preguiçoso”, fico imaginando se é preguiçoso e já fez tanto pelo OpenOffce/LibreOffice, o que teria feito se não fosse.

Abraço, muita saúde, obrigado.
Gilberto.

Estou usando o tradutor (DeepL) porque não conheço nenhum português, além de duas palavras importantes: obrigado e mulher.

:slight_smile:

Não sei se a palavra: “preguiçoso”, está bem traduzida, em espanhol é “perezoso”.

1 Like