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.

Preguntas similare

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
Respuesta Responder a este mensaje
#2 pacomar
15/05/2006 - 22:07 | Informe spam
Buenas noches Héctor.

Al código que me has enviado, le falta un "End With". Si se lo coloco
tras el "Nex" se entra en un bucle, donde se abre una ventana con
título: "Actualizar valores: 01_05_06.xls" para buscar el fichero,
pero aunque vayas a la carpeta donde está (Abril) y lo selecciones,
nuevamente aparece la ventana y no se puede salir de ahí. Hay que
utilizar el administrador de tareas para acabar el programa.
Parece que no sepa donde buscar...¿no?

Saludos...

Paco.
Respuesta Responder a este mensaje
#3 Héctor Miguel
16/05/2006 - 07:50 | Informe spam
hola, Paco !

Al codigo que me has enviado, le falta un "End With"...



es cierto... disculpa :( aparte del 'end with' le hace falta 'abrir' el -unico- libro :-((
ya que mientras el libro de origen este cerrado... haria falta una conexion por ADO ;)
prueba con la siguiente modificacion:

saludos,
hector.

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 = "'[" & Libro & "]" & Hoja & "'!"
Workbooks.Open Ruta & Libro
ThisWorkbook.Activate
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 With
Workbooks(Libro).Close False
End Sub
Respuesta Responder a este mensaje
#4 pacomar
16/05/2006 - 11:02 | Informe spam
Hola Héctor...

¡Eres un fenómeno!. Esta vez ha funcionado a la segunda.

Gracias.

PD. Por las horas a las que posteas, ¿eres del otro lado del charco?

Saludos...

Paco.
Respuesta Responder a este mensaje
#5 Héctor Miguel
16/05/2006 - 11:35 | Informe spam
hola, Paco !

PD. Por las horas a las que posteas, eres del otro lado del charco?



pues... si !!! estoy 'de este lado' del charco :D
-> [GMT - 6] = Cd de Mexico, Guadalajara y Monterrey
'pegadito' a Guadalajara [Zapopan]
mejor conocido como: 'la sucursal del cielo' :))

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida