La macro funciona sin problemas, aunque debo añadirle algunas funcionalidades posteriormente (Ej. salvar el problema de una línea sin datos que invalide el rango); pero lo que me gustaría es que me dierais ideas para optimizar este código, ya que lo encuentro, digamos un poco "sucio" y estoy seguro que vais a sugerirme soluciones más elegantes.
Es obvio que solo conozco lo más básico de este lenguaje, así que si encontrais una barbaridad, no os corteis.
Una cosa más; disponía de tres métodos para realizar la copia: Como array de datos, con Dispatch y con insertTransferable. Escogí esta última porque me pareció la más simple y que además no usaba el portapapeles (en el entorno en el que pienso usar es preferible evitar el clipboard) pero si creeis que por rendimiento o por versatilidad para futuras funcionalidades es más práctico otro método, indicadmelo sin dudar que probaré todos los métodos.
Gracias de antemano.
Código: Seleccionar todo
REM*******BASIC********
Option Explicit
'Este procedimiento abre secuencialmente los archivos de una carpeta _
'y copia el rango de datos que encuentre en ellos, y que puede tener _
'un numero de filas variable, y los pega uno debajo de otro en el _
'documento destino.
'Todos los rangos tienen el mismo numero de columnas (campos)
sub CpRng_Archivos_Carpeta
Dim oDocOrigen as Object
Dim oHojaOrigen as Object
Dim oCeldaOrigen as Object
Dim oCeldaDestino as Object
Dim oFilaFinalOrigen as integer
Dim oColumnaFinal as integer
Dim sRutaOrigen as String
Dim sArchivoOrigen as String
Dim mDummy()
Dim oCursorOrigen as Object
Dim oCursorDestino as Object
Dim oFilaLibre as integer
Dim oTransferible as Object
Dim sRutaDestino as String
Dim oDocDestino as Object
Dim oRango as Object
Dim oRangoTrans as Object
'=======================================
'Inicializamos
sRutaOrigen = "D:\Documentos\Laboratorio\lab_openoffice\Archivos_prueba\"
sArchivoOrigen = Dir(sRutaOrigen & "pruebas?.ods")
oDocDestino = ThisComponent
'Abrimos archivos
Do While sArchivoOrigen <> ""
oDocOrigen = StarDesktop.loadComponentFromUrl(convertToUrl(sRutaOrigen & sArchivoOrigen), "_blank", 6, mDummy())
oHojaOrigen = oDocOrigen.Sheets(0)
oCeldaOrigen = oHojaOrigen.getCellRangeByName("A1")
oCursorOrigen = oHojaOrigen.createCursorByRange(oCeldaOrigen)
oCursorOrigen.GotoEndOfUsedArea(true)
oFilaFinalOrigen = oCursorOrigen.getRangeAddress().endRow()
oColumnaFinal = oCursorOrigen.getRangeAddress.endColumn()
oRango = oHojaOrigen.getCellRangeByPosition(0, 0, oColumnaFinal, oFilaFinalOrigen)
oDocOrigen.currentController.select(oRango)
oRangoTrans = oDocOrigen.currentController.getTransferable()
oCeldaDestino = oDocDestino.Sheets(0).getCellRangeByName("A1")
oCursorDestino = oDocDestino.Sheets(0).createCursorByRange(oCeldaDestino)
oCursorDestino.GotoEndOfUsedArea(true)
oFilaLibre = oCursorDestino.getRangeAddress.endRow + 2
oRango = oDocDestino.Sheets(0).getCellRangeByName("a"+ oFilaLibre)
oDocDestino.currentController.select(oRango)
oDocDestino.currentController.insertTransferable(oRangoTrans)
oDocDestino.store()
oDocOrigen.store()
oDocOrigen.close(true)
sArchivoOrigen = Dir
loop
end sub