Buscarv en macros...

03/02/2008 - 21:52 por Mk | Informe spam
Hola!

Estoy tratando de hacer una plantilla donde aparezcan de modo resumidos
datos contenidos en unos 60 ficheros de excel.

He tratado de hacer esa plantilla utilizando simplemente la función
buscarv o en algunos casos la función indirecto pero es inviable porque
el tamaño final del archivo hace que sea imposible trabajar con él.

Se me ocurre que la única posibilidad que tengo es utilizar macros de
tal modo que al pulsar uno o varios botones se "escriban" las funciones
en las celdas que tienen que mostrar los datos buscados.

Pongo link a un pequeño detalle de lo que quiero hacer para explicarlo
de un modo más gráfico:

http://www.box.net/shared/en4xb23cc8

Mi primera duda es, ¿es la mejor opción o existe alguna otra alternativa
más evidente?. En segundo lugar, mis conocimientos de vb son muy
limitados y casi siempre me limito a utilizar la grabadora de macros y
modificar ligeramente el código pero, ¿cómo sería en vb el código
equivalente a buscarv?.

Muchas gracias por anticipado.

Mk.

Preguntas similare

Leer las respuestas

#6 Mk
08/02/2008 - 10:49 | Informe spam
Héctor Miguel escribió:
hola, (...) ???

despues de ver los archivos de los links que comentas, es necesario preguntarte dos o tres cosillas mas...

- se espera/asume/... que el articulo que se busca (F3-codigo numerico) exista no mas de una vez en cada semana ?
- necesitas dejar la formula que (realmente) vincule con el archivo donde se ha buscado el dato ? (o solo el dato encontrado)
- lo mas dificil, seria "averiguar" el nombre de la hoja "apropiada"
(ya sabes tu comentario de que la segunda hoja SIEMPRE lleva el nombre de: "ID_5024_0X", donde la X puede ser 1, 2 o 3)
asi que... o se hacen 3 intentos... o se usa codigo mas exhaustivo para averiguar el nombre de la hoja SIN abrir el libro ???)

saludos,
hector.



Hola!

- Efectivamente, el artículo que se busca solo aparece una sola vez por
semana.

- Lo ideal sería dejar el dato encontrado y no la fórmula.

- La hoja podría llamarse SIEMPRE igual porque puedo modificar el nombre
de las que no lo sean para que así sea. Es decir, todas se llamarían
ID_5024_01 porque puedo grabar las que se generen con ese nombre y las
que ya existen de semanas anteriores cambiarlas a ese nombre.

Saludos.

Mk.
Respuesta Responder a este mensaje
#7 Héctor Miguel
09/02/2008 - 05:48 | Informe spam
hola, (como sea que te llames) :)) !

- Efectivamente, el articulo que se busca solo aparece una sola vez por semana.
- Lo ideal sería dejar el dato encontrado y no la formula.
- La hoja podria llamarse SIEMPRE igual porque puedo modificar el nombre de las que no lo sean...
... todas se llamarian ID_5024_01 porque puedo grabar las que se generen con ese nombre
y las que ya existen de semanas anteriores cambiarlas a ese nombre...



comprenderas que no probe el codigo con ~52 semanas para 2007 y/o para 2008 en otros tantos archivos :D
(probablemente) necesitaras revisar/modificar el separador de rutas "\" si es con UNC (archivos en red) a: "/" -?-
el codigo asume que las hojas siempre se llamaran "id_5024_01" (OJO: revisa tambien la "ruta base") -?-

lo unico que no me gusta, es que la descripcion del articulo buscado (en la celda H3) tendria que ser una busqueda "en reversa"
ya que en las hojas "id_5024_01" se encuentra a la izquierda de la columna que contiene el numero del articulo (en la celda F3)
y como el codigo hace un bucle por todas las hojas, si encuentra una donde no existe lo volveria a borrar :-((

1) tienes 3 botones de comando ActiveX en la hoja: CommandButton1: (la grafica)... el #2: para el "FY 08" y el #3: para el "FY 07"
en el evento '_click' de los botones 2 y 3 (en el modulo de codigo de la hoja) pones las siguientes instrucciones:

Private Sub CommandButton3_Click(...
LinkYear = 7
Busca_articulo_en_semanas
End Sub

Private Sub CommandButton2_Click(...
LinkYear = 8
Busca_articulo_en_semanas
End Sub

2) el resto de este codigo (con las "recomendaciones" del caso) lo pones en un modulo de codigo normal...
OJO: va a generar un vinculo "real" (por formula) al archivo de origen y luego lo convierte a valores constantes

corre algunas pruebas (sobre una copia de tu archivo) y...
si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Const RutaBase As String = "c:\año 200"
Const Archivo_1 As String = "sem "
Const Archivo_2 As String = ".xls"
Const Hoja As String = "]id_5024_01'!"
Public LinkYear As Byte, Archivo As String, LinkRange As String, Sem As String, BaseFormula As String
Sub Busca_articulo_en_semanas()
Application.ScreenUpdating = False
Dim Fila As Byte
Range("d7:e58,g7:g58").ClearContents
For Fila = 7 T0 58
Sem = Format(Cells(Fila, 3),"00") & " 200" & LinkYear
Archivo = RutaBase & LinkYear & "\" & Archivo_1 & Sem & Archivo_2
If Dir(Archivo) = "" Then GoTo SkipDatos
BaseFormula = "vlookup(f3,'" & RutaBase & LinkYear & "\[" & Archivo_1 & Sem & Archivo_2 & Hoja
With Cells(Fila, 4)
.Offset().Formula = "=if(iserror(" & BaseFormula & "f:f,1,0)),""""," & BaseFormula & "f:l,7,0))"
If Offset() = "" Then GoTo SkipDatos
.Offset(, 1).Formula = "=" & BaseFormula & "f:g,2,0)"
.Offset(, 3).Formula = "=" & BaseFormula & "f:u,16,0)"
End With
SkipDatos:
Next
With Range("d7:d58")
.Resize(, 2).Value = .Resize(, 2).Value
.Offset(, 3).Value = .Offset(, 3).Value
End With
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida