[RESUELTO] Copiar datos de una hoja a otra

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
evafega
Mensajes: 21
Registrado: Dom Oct 09, 2016 5:21 pm

[RESUELTO] Copiar datos de una hoja a otra

Mensaje por evafega »

Buenas tardes,
me gustaría que me ayudaran, tengo una hoja con datos de personas (a priori no se cuántas) y sus datos de la siguiente forma:
PERS1 DATO11 DATO12 DATO13
PERS2 DATO21 DATO22 DATO23
PERS3 DATO31 DATO32 DATO33

y quería pasarlos a otra hoja creando una fila por cada persona y dato, así:
PERS1 DATO11
PERS1 DATO12
PERS1 DATO13
PERS2 DATO21
PERS2 DATO22
PERS2 DATO23
PERS3 DATO31
PERS3 DATO32
PERS3 DATO33
¿Cómo se puede hacer? Muchas gracias!
Última edición por evafega el Vie Oct 14, 2016 11:40 am, editado 3 veces en total.
Apache Office 4.1.3 MacOS Sierra 10.12.6
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Copiar datos de una hoja a otra

Mensaje por PepeOooSevilla »

Hola.

Adjunto una primera solución.

Código: Seleccionar todo

Option Explicit

Sub CopiarOrdenDeterminado
	Dim oDoc As Object ' El documento actual
	Dim oHojas As Object ' La colección de hojas del documento
	Dim oHoja1 As Object ' Hoja donde copia
	Dim oHoja2 As Object ' Hoja donde pega lo copiado
	Dim FilaCopia As Long
	Dim FilaPega As Long
	Dim Persona As String ' El primer dato que se repite

	On Error Goto TRATARERROR
	oDoc = ThisComponent
	oHojas = oDoc.Sheets()
	oHoja1 = oHojas.getByName("Hoja1")
	oHoja2 = oHojas.getByName("Hoja2")
	' ¡Atención! Los datos comienzan en la Fila 2 (El índice de la Fila 2 es 1)
	FilaCopia = 1
	FilaPega = 1
	' ¡Atención! Los datos comienzan en la Columna A (El índice de la Columna A es 0)
	Do While oHoja1.getCellByPosition(0, FilaCopia).getString() <> ""    ' Mientras no esté vacía la columna A
		Persona = oHoja1.getCellByPosition(0, FilaCopia).getString()
		With oHoja2
			.getCellByPosition(0, FilaPega).setString(Persona)
			.getCellByPosition(1, FilaPega).setString(oHoja1.getCellByPosition(1, FilaCopia).getString())
			FilaPega = FilaPega + 1
			.getCellByPosition(0, FilaPega).setString(Persona)
			.getCellByPosition(1, FilaPega).setString(oHoja1.getCellByPosition(2, FilaCopia).getString())
			FilaPega = FilaPega + 1
			.getCellByPosition(0, FilaPega).setString(Persona)
			.getCellByPosition(1, FilaPega).setString(oHoja1.getCellByPosition(3, FilaCopia).getString())
		End With
		FilaCopia = FilaCopia + 1
		FilaPega = FilaPega + 1
	Loop
	MsgBox "Copia finalizada correctamente", 64, "¡Atención!"
	Exit Sub
TRATARERROR:
	MsgBox "Se ha producido un ERROR." & Chr(10) & "Compruebe el código.", 16, "¡Atención!"
End Sub
¡Atención con los nombres de las hojas! Tendrás que hacer las modificaciones oportunas.

Saludos cordiales.
Adjuntos
FORO_CALC_Copiar datos de una hoja a otra.ods
LibreOffice Calc 5.1.5 (estable)
(20.48 KiB) Descargado 182 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
evafega
Mensajes: 21
Registrado: Dom Oct 09, 2016 5:21 pm

Re: Copiar datos de una hoja a otra

Mensaje por evafega »

¡¡MUCHAS GRACIAS!!
¡Funciona estupendamente! He metido otra variable ColCopia y otro bucle porque puedo tener varios datos por persona y funciona genial.
Saludos cordiales,

Código: Seleccionar todo

	ColCopia = 1
	' ¡Atención! Los datos comienzan en la Columna A (El índice de la Columna A es 0)
	Do While oHoja1.getCellByPosition(0, FilaCopia).getString() <> ""
		Persona = oHoja1.getCellByPosition(0, FilaCopia).getString()
		With oHoja2
			Do While oHoja1.getCellByPosition(ColCopia, FilaCopia).getString() <> ""
				.getCellByPosition(0, FilaPega).setString(Persona)
				.getCellByPosition(1, FilaPega).setString(oHoja1.getCellByPosition(ColCopia, FilaCopia).getString())
				FilaPega = FilaPega + 1
				ColCopia = Colcopia + 1
			Loop
		End With
		FilaCopia = FilaCopia + 1
'		FilaPega = FilaPega + 1
		ColCopia = 1
	Loop
Última edición por xiseme el Mié Oct 12, 2016 9:48 am, editado 1 vez en total.
Razón: Etiquetas CODE
Apache Office 4.1.3 MacOS Sierra 10.12.6
Responder