Buscar en otros libros (II)

11/05/2006 - 10:21 por pacomar | Informe spam
Buenos días grupo.

En una consulta anterior, resuelta perfectamente por Héctor,
preguntaba por la manera de buscar y extraer datos de libros de excel
cerrados donde la información a extraer estaba en las columnas b e i
de las hojas que componen cada libro. Tratamos de saber los consumos
telefónicos de las extensiones de una centralita, por lo que hay que
buscar en todos los libros guardados en un directorio, el nombre de la
hoja que coincida con la extensión (ejemplo: 27002).
Esto se hacía perfectamente con este código:

en un modulo de codigo 'normal' -> EN el libro "facturacion telef"
==Sub Busca_Suma_Extensiones(): Application.ScreenUpdating = False
Dim Ruta As String, Hoja As String, Libro As String, _
Condicion As String, Celda As Range, Prueba
Ruta = "c:\centralita\abril\"
With Worksheets("administrador")
For Each Celda In .Range(.Range("b2"), .Range("b65536").End(xlUp))
Libro = Dir(Ruta & "*.xls"): Hoja = Celda
Do While Libro <> "": Condicion = "'" & Ruta & "[" & Libro & "]"
& Hoja & "'!"
On Error Resume Next: Prueba = ExecuteExcel4Macro(Condicion &
"r1c1")
If Not IsError(Prueba) Then
Celda.Offset(, 2).Formula = "=sum(" & Condicion & "i:i)"
Celda.Offset(, 2) = Celda.Offset(, 2)
Exit Do
End If: Libro = Dir(): Loop: Next: End With
End Sub

Pero, a consecuencia del cambio de soft de la centralita, ahora resulta
que la forma de
presentar los datos ha cambiado. Antes eran varios libros con varias
hojas en cada uno de ellos, donde el nombre de la hoja se correspondía
con en nº de extensión (ejemplo: 27002). Ahora la nueva versión
sólo entrega un libro (ejemplo: 01_05_06.xls), con una sóla hoja:
Hoja1, donde en la columna B está el nº de extensión (antes también
estaba en el nombre de la hoja) y en la columna i el importe de lo
consumido (esto no ha variado).

¿Se puede modificar el código anterior para adecuarlo a este nuevo
procedimiento?

Saludos y gracias.

Paco.
 

Leer las respuestas

#1 Héctor Miguel
14/05/2006 - 07:59 | Informe spam
hola, Paco !

En una consulta anterior... preguntaba por la manera de buscar y extraer datos de libros... cerrados
donde la informacion a extraer estaba en las columnas b e i de las hojas que componen cada libro...
... buscar en todos los libros... en un directorio, el nombre de la hoja que coincida con la extension...
... a consecuencia del cambio de soft de la centralita, ahora... la forma de presentar los datos ha cambiado
... la nueva version solo entrega un libro (ejemplo: 01_05_06.xls), con una sóla hoja: Hoja1
... en la columna B esta el n. de extension (antes tambien estaba en el nombre de la hoja)
... en la columna i el importe de lo consumido (esto no ha variado).
Se puede modificar el codigo anterior para adecuarlo a este nuevo procedimiento?



1) el 'corazon' del codigo de la propuesta anterior, tenia 2 'valvulas'...
a) buscar en todos los libros [de un directorio] hasta encontrar la hoja_extension 'adecuada'
b) sumar las cantidades correspondientes al numero de extension en la columna 'i:i' [que continua igual] ;)

2) [ahora]... la condicion del numero de -posibles- libros ha cambiado, y se trata de una sola hoja ;)

3) [creo que] la parte 'medular' de esta nueva situacion, pudiera ser...
-> cuantos libros habra en el directorio, y a cual se debiera hacer la referencia de busqueda ???

[en via de mientras]... prueba con este primer intento...
en un modulo de codigo 'normal' -> EN el libro "facturacion telef" ==Sub Busca_Suma_Extensiones(): Application.ScreenUpdating = False
Dim Ruta As String, Hoja As String, Libro As String, Base As String, Fila As Integer
Ruta = "c:\centralita\abril\"
Libro = "01_05_06.xls"
Hoja = "hoja1"
Base = "'" & Ruta & "[" & Libro & "]" & Hoja & "'!"
With Worksheets("administrador")
For Fila = 2 To .Range("b65536").End(xlUp).Row
.Range("d" & Fila).Formula = _
"=sumif(" & Base & "b:b,b" & Fila & "," & Base & "i:i)"
.Range("d" & Fila) = .Range("d" & Fila)
Next
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo de la propuesta 'inicial' __
en un modulo de codigo 'normal' -> EN el libro "facturacion telef" ==Sub Busca_Suma_Extensiones(): Application.ScreenUpdating = False
Dim Ruta As String, Hoja As String, Libro As String, _
Condicion As String, Celda As Range, Prueba
Ruta = "c:\centralita\abril\"
With Worksheets("administrador")
For Each Celda In .Range(.Range("b2"), .Range("b65536").End(xlUp))
Libro = Dir(Ruta & "*.xls"): Hoja = Celda
Do While Libro <> "": Condicion = "'" & Ruta & "[" & Libro & "]" & Hoja & "'!"
On Error Resume Next: Prueba = ExecuteExcel4Macro(Condicion & "r1c1")
If Not IsError(Prueba) Then
Celda.Offset(, 2).Formula = "=sum(" & Condicion & "i:i)"
Celda.Offset(, 2) = Celda.Offset(, 2)
Exit Do
End If: Libro = Dir(): Loop: Next: End With
End Sub

Preguntas similares