Hola Hector Miguel: Otra consulta

11/08/2003 - 04:05 por Carlos | Informe spam
Hola Hector Miguel:
Un saludo muy cordial y de nuevo, darte las gracias por tu
invalorable ayuda.
En fecha 16 de julio te hice una consulta y las soluciones
que me diste realmente fueron soluciones.Por que
funcionaron perfectamente. Este es el resumen. Sobre este
mismo tema al final te hago una nueva consulta.
-
¿Que tal, Carlos?

==> "Aprovechando" que estas utilizando la macro anterior,
con unas "ligeras" adaptaciones hara lo que necesitas.
(p.e.) "te dira" en cual hoja y en que fila esta el
dato buscado ==Sub Buscar_En_Hojas()
Dim Hoja As Worksheet, Celda As Range, Primero As Long, _
Buscando As String, Mensaje As String,
Localizado As String
Buscando = Trim(InputBox("Indica la variable a
buscar", "Buscando en todas las hojas..."))
If Buscando = "" Then Exit Sub
Mensaje = Buscando & " se encuentra en:"
For Each Hoja In ActiveWorkbook.Worksheets
With Hoja
Set Celda = .Cells.Find(Buscando)
If Not Celda Is Nothing Then
Primero = Celda.Row
Do
Localizado = Localizado & vbCr & .Name & " -
Fila " & Celda.Row
Set Celda = .Cells.FindNext(Celda)
Loop While Not Celda Is Nothing And Celda.Row <>
Primero
End If
End With
Next
Set Celda = Nothing
If Localizado = "" Then Localizado = vbCr & "¡
Ninguna !!!"
MsgBox Mensaje & Localizado
End Sub
_______
Saludos,
Héctor.
MS-MVP

Hola, Carlos !


Se puede ir mas adelante y extraer (mostrarlo en la


misma pantalla) los datos del registro encontrado?

==> Suponiendo que las columnas "correspondientes" (de
acuerdo con tu consulta original) sean A (1), B (2), C (3)
y D (4)
solo modifica la linea donde se "acumula" la
variable "Localizado" (entre el "Do ... Loop"):

de: Localizado = Localizado & vbCr & .Name & " - Fila "
& Celda.Row

por: Localizado = Localizado & vbCr & .Name & " - Fila "
& Celda.Row & " - " & _
.Cells(Celda.Row, 1) &
vbTab & .Cells(Celda.Row, 2) & vbTab & _
Format(.Cells(Celda.Row,
3), "dd/mm/yy") & vbTab & _
.Cells(Celda.Row, 4)
_______
Saludos,
Héctor.
MS-MVP
Hector, se puede complementar Sub Buscar_En_Hojas para
encontrar la informacion desde cualquier libro, sin que se
tenga que abrir el libro donde se encuentra la informacion?

Gracias por tu tiempo.

Att
Carlos

Preguntas similare

Leer las respuestas

#1 Carlos
13/08/2003 - 04:32 | Informe spam
Hola Hector.
Un saludo muy cordial y no me importa ser cansador, pero
gracias de nuevo

El tema es este: La informacion que necesito consultar
esta en un archivo determinado por
ejem "dependientes.xls", el cual contiene 15 hojas
enumeradas del 1 al 15. el formato de cada hoja es el
mismo, coinciden filas y columnas, lo unico que varia es
la informacion, lo tengo separado por que asi se le da
otros usos.
La solucion que me diste funciona con el libro abierto, yo
se que estoy exgerando, pero me agrada la idea de no abrir
el archivo, especialmente cuando este se haga mas pesado.
No se si te acordas, en fecha 9 de enero de este año,
ayudaste a Desastres con un asunto similar (tengo esa idea)
de la siguiente forma.
-
Sub ExtraerUnDato()
Dim Ruta As String, Archivo As String, Hoja As String,
Referencia As String, Mensaje as String
Ruta = "C:\Mis documentos": Archivo = "Pruebas.xls":
Hoja = "Hoja3": Referencia = "b25"
Mensaje = " Directorio: " & Ruta & vbCr & _
" Archivo: " & Archivo & vbCr &
_
" Hoja: " & Hoja & vbCr & _
"Referencia: " & UCase(Referencia)
& vbCr & _
"Lectura de la referencia al libro
NO ABIERTO:"
MsgBox Mensaje & vbCr & ExtraerDeArchivo(Ruta, Archivo,
Hoja, Referencia)
End Sub
Me permiti "correr" esa macro y funciono muy bien.

Fue por esta razon que decidi consultarte.

Por favor mandame tus ejemplos a mi correo, tus soluciones
siempre son buenas y uno no sabe en que momento puede
hacernos falta.

Te Reitero mis saludos

Att

Carlos





¿Que tal, Carlos?

... complementar ... para encontrar ... desde cualquier




libro, sin que se tenga que abrir el libro [...]

==> "Buscar" informacion en libros cerrados no es "tan


dificil" (tengo algunas rutinas al respecto), aunque...
"Trabajar" con libros cerrados (de alguna


manera) "implica" CONOCER (con "cierta" exactitud) el
libro,
por lo que, si necesitas buscar "globalmente"...
(sin conocer cuantas hojas pudieran "existir"


o "hasta donde llega" cada hoja existente) =>pregunta:<> ¿no seria mas facil (y quizas rapido) abrir el
(los) libro(s) donde necesitas realizar la busqueda???

==> Si quieres "hacer la prueba", te envio ejemplos


para "operar" con libros cerrados :))
(de todas maneras, voy a seguir


investigando "hasta donde" se puede llegar "sin abrir" los
libros)
_______
Saludos,
Héctor.
MS-MVP


.

Respuesta Responder a este mensaje
#2 Héctor Miguel
16/08/2003 - 05:09 | Informe spam
Hola, Carlos !

La informacion que necesito consultar esta en un archivo determinado por ejem "dependientes.xls",
el cual contiene 15 hojas enumeradas del 1 al 15. el formato de cada hoja es el mismo,
coinciden filas y columnas, lo unico que varia es la informacion, lo tengo separado por que asi se le da otros usos.
... en fecha 9 de enero de este año ... con un asunto similar (tengo esa idea) ... esa macro y funciono muy bien.



==> ¿Hiciste ya alguna prueba / adaptacion de la opcion 2 de la propuesta de esa misma fecha?
... en caso contrario (dame un "tiempecito" y...) te envio un ejemplo "adoc" :))
_______
Saludos,
Héctor.
MS-MVP
Respuesta Responder a este mensaje
#3 Héctor Miguel
16/08/2003 - 06:13 | Informe spam
Hola, Carlos !

... estare pendiente de tu respuesta.



==> Solo una pregunta, y... "me pongo en ello" :))
Los nombres de las hojas son...
-o- ¿"solo" numero/s? =>[1] a [15]
-o- ¿contienen texto/s? => [Hoja1] a [Hoja15]
-o- ¿hay espacios? => [Hoja 1] a [Hoja 15]
_______
Saludos,
Héctor.
MS-MVP
Respuesta Responder a este mensaje
#4 Héctor Miguel
17/08/2003 - 09:56 | Informe spam
Hola, Carlos !

==> DESCARTA el mensaje anterior <= La cuestion de los nombres de las hojas, en realidad... "NO tiene relevancia" :))
Lo "realmente importante" es con relacion a tu comentario...

... informacion ... en un archivo ... 15 hojas ... del 1 al 15 el formato ... es el mismo ... filas y columnas [...]





==> La informacion [el dato a buscar en cada hoja] ... ¿podria encontrarse ...
-o- ...EN CUALQUIER celda ? [como para usar Buscar y "recorrer" TODAS las celdas] :((
-o- ...siempre en alguna fila de la misma columna? [como para usar BuscarV]
-o- ...siempre en alguna columna de la misma fila? [como para usar BuscarH]
-o- ... "solo" una vez? [o... ¿cuantas?]
-o- indicar si quisieras "obtener" tambien el contenido de las demas celdas "relacionadas" con ese dato.

==> "dependiendo" de las condiciones "reales", el codigo quedara "mejor adaptado" a ellas.
["el resto"... ya esta listo] :))
_______
Saludos,
Héctor.
MS-MVP
Respuesta Responder a este mensaje
#5 Héctor Miguel
20/08/2003 - 09:31 | Informe spam
Hola, Carlos !

==> He tratado de "optimizar" el codigo a traves de una funcion "versatil" (creo yo) para "facilitarte la tarea" :))
Te explico ("brevemente") como funciona [ya me diras despues tus comentarios] :))

==> MUY IMPORTANTE: recuerda hacer una referencia en el proyecto de VBA,
a la biblioteca de objetos "Microsoft ActiveX Data Objects x.x Library" <=
1.- Estoy usando 3 variables publicas constantes para que sea mas facil su "adaptacion / modificacion":
a) Archivo = El nombre Y UBICACION del archivo que "permanecera cerrado"
b) nHConst = Un "patron inicial" para el nombre de las hojas, p.e. "Hoja" + numero -o- "Nombre Hoja " + numero
(si se trata de hojas cuyo nombre es "solamente" el numero, DEJA esa constante como cadena vacia =>""<=)
(si se trata de hojas cuyos nombres son "disimbolos"... habria que cambiar "la mecanica" por alguna "matriz") :((
c) Rango = El rango de la "base de datos" IGUAL PARA TODAS LAS HOJAS (al menos... "de momento") :))
(de momento, por "default" SOLO hace la busqueda en la columna "B", ya me diras si requieres variantes)
2.- La funcion "requiere" de 6 argumentos, 3 "obligados" y 3 "opcionales":
obligado1 = Buscar => Tipo de datos => Variant => es el dato que "se busca" (si es texto, "entre comillas")
obligado2 = nHDe => Tipo de datos => Entero => es un numero que indica "a partir de que hoja" se buscara
obligado3 = nHA => Tipo de datos => Entero => es un numero que indica "hasta que" hoja se buscara
opcional1 = Similares => Tipo de datos => Boolean (False por omision) => para incluir "similares" en la busqueda
opcional2 = Todos => Tipo de datos => Boolean (False por omision) => para incluir TODOS los que "existan"
opcional3 = Reporte => Tipo de datos => Entero (1 si se omite o "excede") => para seleccionar uno de los (tres) reportes
3.- "en pocas palabras", el uso de la funcion es como sigue (p.e.):
BuscarEnArchivoCerrado("Nombre buscado", DesdeHoja3, HastaHoja7, Buscar_similares, Incluir_todos, Reporte_x)
4.- p.e. para encontrar (si existe) cualquier (cliente?) con apellido "Mendoza" o "Mendizabal", en las hojas 5 a 9, y usar el
reporte 2...
MsgBox BuscarEnArchivoCerrado("*Mend*", 5, 9, True, True, 2) => "nota" los "comodines" y... OJO con los acentos) :))
p.e. para encontrar (si existe) EXACTAMENTE el nombre de "Carlos" (SIN APELLIDOS), en las hojas 1 a 3...
MsgBox BuscarEnArchivoCerrado("Carlos", 1, 3) => SOLO el primero (que exista en cada hoja) y el reporte 1 por omision
5.- Finalmente :)) toma en cuenta que un MsgBox tiene un LIMITE en cuanto al numero de caracteres que puede "contener" :((
_______
Saludos,
Héctor.
MS-MVP

Modulo "general" ==Public Const Archivo As String = "C:\Mis documentos\Mi Libro Cerrado.xls"
Public Const nHConst As String = "Hoja "
Public Const Rango As String = "b4:g250"

Sub Mi_Busqueda()
MsgBox BuscarEnArchivoCerrado("Carlos*", 7, 12, , , 2)
End Sub

(otro) Modulo "general" [por si quisieras "mantener aparte" las funciones] ==Option Private Module
Function BuscarEnArchivoCerrado( _
ByVal Buscar As Variant, ByVal nHDe As Integer, ByVal nHA As Integer, _
Optional ByVal Similares As Boolean, _
Optional ByVal Todos As Boolean, _
Optional ByVal Reporte As Integer) As String
Dim ConectarCon As ADODB.Connection, Ejecutar As ADODB.Command, Registros As ADODB.Recordset, _
Hoja As Integer, Fila As Long, Encontrado As Boolean, Msj As String
If IsMissing(Reporte) Then Reporte = 1
Set ConectarCon = New ADODB.Connection
ConectarCon.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Archivo & _
";Extended Properties=""Excel 8.0;IMEX=1;HDR=No;"";"
Set Ejecutar = New ADODB.Command
Ejecutar.ActiveConnection = ConectarCon
For Hoja = nHDe To nHA
Ejecutar.CommandText = "SELECT * From `" & nHConst & Hoja & "$" & Rango & "`"
Set Registros = New ADODB.Recordset
Registros.Open Ejecutar, , adOpenKeyset, adLockOptimistic
Registros.MoveFirst
For Fila = 1 To Registros.RecordCount
Encontrado = False
If Similares Then
Encontrado = StrConv(Registros.Fields(0).Value, vbLowerCase) Like StrConv(Buscar, vbLowerCase)
Else: Encontrado = StrConv(Registros.Fields(0).Value, vbLowerCase) = StrConv(Buscar, vbLowerCase)
End If
If Encontrado Then
If Msj <> "" Then Msj = Msj & vbCr
Select Case Reporte
Case 2
Msj = Msj & nHConst & Hoja & vbTab & "Fila " & Range(Rango).Cells(Fila, 1).Row & _
vbTab & Registros.Fields(0).Value & _
vbTab & Registros.Fields(1).Value
Case 3
Msj = Msj & nHConst & Hoja & vbTab & "Fila " & Range(Rango).Cells(Fila, 1).Row & _
vbTab & Registros.Fields(0).Value & _
vbTab & Registros.Fields(2).Value & _
vbTab & Registros.Fields(3).Value & _
vbTab & Registros.Fields(4).Value & _
vbTab & Registros.Fields(5).Value
Case Else
Msj = Msj & nHConst & Hoja & vbTab & "Fila " & Range(Rango).Cells(Fila, 1).Row & _
vbTab & Registros.Fields(0).Value & _
vbTab & Registros.Fields(1).Value & _
vbTab & Registros.Fields(2).Value & _
vbTab & Registros.Fields(3).Value & _
vbTab & Registros.Fields(4).Value & _
vbTab & Registros.Fields(5).Value
End Select
If Not Todos Then Exit For
End If
Registros.MoveNext
Next
Next
ConectarCon.Close
Set Registros = Nothing
Set Ejecutar = Nothing
Set ConectarCon = Nothing
If Msj = "" Then Msj = "¡ No se encontró !!!"
BuscarEnArchivoCerrado = "Buscando " & Buscar & "..." & vbCr & "en " & Archivo & "..." & vbCr & Msj
End Function
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida