Dar formato a celdas desde una macro

Hola comunidad.

Agradecería mucho vuestra ayuda con el siguiente problema:
Hice una macro para copiar el contenido de 14 celdas, dispuestas en 1 fila y 14 columnas, y los copia en la última fila vacía de otra hoja del proyecto. Esto funciona bien.
Pero resulta que al almacenar los datos de estas 14 celdas en una variable tipo objeto (en la macro), le da a todas las celdas un formato texto. Eso está bien en algunas celdas. Pero hay otras que necesito que estén, por ejemplo en formato número de tipo entero sin decimales o fecha de tipo 22/05/1994.

En resumen necesito ayuda para programar la macro de modo tal que, al copiar todo los valores celda por celda le vaya dando a cada una el formato adecuado. Es me ahorraría mucho tiempo de post-procesamiento de la celdas.

Les dejo el el scrip aquí debajo

REM ***** BASIC *****

Sub CopiarDatos()

Dim oDoc As Object
Dim oOrigen As Object
Dim oDestino As Object
Dim oHojaOrigen As Object
Dim oHojaDestino As Object
Dim i As Long
Dim uf As Long

oDoc = ThisComponent
 
oHojaOrigen = oDoc.Sheets.getByName("Campos")
oOrigen = ThisComponent.Sheets.getByName("Campos").getCellRangeByName("M2:AA2")
oHojaDestino = oDoc.Sheets.getByName("Registro Histórico")

' Encuentra la última fila no vacía en la HojaDestino
uf = oHojaDestino.Rows.Count-800000	'1048570 (La variable uf indica la cantidad de filas de la hoja y se le resta esta cantidad para que no tenga que recorrer tantas filas vacias)
Do While oHojaDestino.getCellByPosition(0, uf).getString() = ""
    uf = uf - 1
Loop

' Copia los datos desde la HojaOrigen a la última fila vacía en la HojaDestino
For i = 0 To 14 ' Asumiendo que hay 14 columnas de datos
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	'Estuve pensando en dar formato utilizando un if
	'if i = 0 Then 
	'oHojaDestino.getCellByPosition(i, uf + 1). Pero desconozco la sintaxis de esta linea
	'End if
	
	'if i = 9 Then
	'oHojaDestino.getCellByPosition(i, uf + 1). igual aquí
	'End if
Next i

End Sub

Desde ya, muchas gracias.

Como estas usando el método setString, es normal que de deje los datos como texto. Si tus datos origen tienen el formato correcto, es mejor que uses el método copyRange directamente:

Sub copy_range()
	SHEET_SOURCE = "Campos"
	RANGE_SOURCE = "M2:AA2"
	SHEET_TARGET = "Registro Histórico"
	CELL_TARGET = "A1"
	
	doc = ThisComponent
	source = doc.Sheets.getByName(SHEET_SOURCE)
	target = doc.Sheets.getByName(SHEET_TARGET)
	
	range = source.getCellRangeByName(RANGE_SOURCE)
	cell = target.getCellRangeByName(CELL_TARGET)
	next_free_cell = get_next_free_cell(cell)
	
	source.copyRange(next_free_cell.CellAddress, range.RangeAddress)
	
	'Limpiar origen si es necesario, 31 limpia solo los datos, no el formato.
	range.clearContents(31)
	
End Sub


Function get_next_free_cell(cell)
	cursor = cell.SpreadSheet.createCursorByRange(cell)
	cursor.gotoEnd()
	col = cell.CellAddress.Column
	row = cursor.RangeAddress.EndRow + 1
	get_next_free_cell = cell.SpreadSheet.getCellByPosition(col, row)
End Function

Hola elmau.
Muchas gracias por la ayuda inmediata y perdón. Soy bastante novato utilizando Basic.
El Scrip sugerido no me funcionó. Muy probablemente por mi falta de conocimiento. Pero logré ajustar el Scrip que había hecho (el cual ya me funcionaba) para corregir este inconveniente que tenía con los tipos de datos.

Sub CopiarDatos()

Dim oDoc As Object
Dim oOrigen As Object
Dim oDestino As Object
Dim oHojaOrigen As Object
Dim oHojaDestino As Object
Dim i As Long
Dim uf As Long

oDoc = ThisComponent
 
oHojaOrigen = oDoc.Sheets.getByName("Campos")
oOrigen = ThisComponent.Sheets.getByName("Campos").getCellRangeByName("M2:AA2")
oHojaDestino = oDoc.Sheets.getByName("Registro Histórico")

' Encuentra la última fila no vacía en la HojaDestino
uf = oHojaDestino.Rows.Count-800000	'1048570 (La variable uf indica la cantidad de filas de la hoja y se le resta esta cantidad para que no tenga que recorrer tantas filas vacias)
Do While oHojaDestino.getCellByPosition(0, uf).getString() = ""
    uf = uf - 1
Loop

' Copia los datos desde la HojaOrigen a la última fila vacía en la HojaDestino
For i = 0 To 14 ' Asumiendo que hay 14 columnas de datos
	oHojaDestino.getCellByPosition(i, uf + 1).setValue(oOrigen.getCellByPosition(i, 0).getValue())
	'Se copia el Nombre EMISOR en formato Texto
	if i = 1 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia el Nombre OPERADOR en formato Texto
	if i = 2 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia el Nombre POST-OPERADOR en formato Texto
	if i = 3 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia la TAREA 1 en formato Texto
	if i = 5 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia la TAREA 2 en formato Texto
	if i = 6 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia el Nombre MÁQUINA en formato Texto
	if i = 7 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia el Nº DE PLANO en formato Texto
	if i = 9 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia el Nombre CLIENTE en formato Texto
	if i = 11 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia el Nombre MÁQUINA HERRAMIENTA en formato Texto
	if i = 12 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia el CÓDIGO MÁQUINA HERRAMIENTA en formato Texto
	if i = 13 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End if
	'Se copia la DESCRIPCIÓN  en formato Texto
	if i = 14 Then
	oHojaDestino.getCellByPosition(i, uf + 1).setString(oOrigen.getCellByPosition(i, 0).getString())
	End i
	
Next i

End Sub

Seguramente alguien con un poco más de experiencia lo resuelve con 10 lineas de código. Pero a mi ya me funcionó y solucione el problema :smile:

Muchas gracias por la ayuda. Saludos