Consultar el listado mediante parametros

21/03/2005 - 15:52 por SG Web Design - Sergio Gattelet | Informe spam
Hola Grupo (KL se que estas ahi)

Bueno superando ya la mitad del proyecto, aun me resta realizar la consulta
de los registros mediante el ingreso de parametros. Tengo una vaga idea de
realizarlos con un formulario pero tal vez exista algun otro metodo mas
efectivo o avanzado y esta es la razon de mi consulta.
Cual seria el metodo para implementar cuando se tiene un listado completo
con cod - descripcion - precio y se desea buscar un articulo o conjunto de
articulo por algunos de estos campos.

Vale destacar que este listado es solo de consulta sin intensiones de
modificar ningun valor ni cambiar algun dato por lo que esta protegido.

Quisiera saber si es posible tener una ventana dentro de la hoja del listado
que me permita de manera rapida ingresar cualquiera de estos datos y me
mostrase el resultado de su consulta sin que ello genere la creacion de una
nueva hoja. La funcion seria la de consultar los articulos para comparar los
precios unicamente.

Bueno espero como siempre alguna respuesta al respecto.
Mis saludos,
Sergio

Preguntas similare

Leer las respuestas

#1 KL
21/03/2005 - 17:52 | Informe spam
Hola Sergio,

Hasta a mi (que se supone que se por donde van los tiros) me ha resultado
dificil entender lo que buscas. De hecho no estoy seguro de q te haya
entendido bien. Suponiendo que te refieres al codigo con llamadas ADO q te
habia escrito antes, aqui te pongo una opcion como cambiar las variables
dinamicamente.

En la hoja donde se tienen que mostrar los resultados de la consulta haz lo
siguiente:

1) en la fila [4] pon los encabezados de columnas exactamente como aparecen
en las hojas de donde se sacaran los datos
2) en la fila [1] selecciona todas las celdas que estan por encima de los
encabezados, ve al menu Datos>Validacion, opcion Lista y en vez de formula
pon: LIKE; =; <=; >=; <; >; <>
Estos no son todos los operadores posibles asi que tendras campo para
perfeccionar tu proyecto.
3) en la celda [A3] pon la siguiente formula y copiala a todas las celdas
que estan por encima de los encabezados:
=SI(O(A2="";A1="");"";SI(O(ESTEXTO(A2);A1="LIKE");"'"&A2&"'";SI(A2="";"";A2)))
4) Protege las filas [3] y [4]

Ahora en la fila [1] podras seleccionar el operador de comparacion (LIKE; =;
<=; >=; <; >; <>), en la fila [2] pondras el criterio de comparacion (p.ej.
un valor o cadena de texto), en la fila [3] tu criterio se representara con
sintaxis SQL y en la fila [4] estara el nombre del campo para el cual as
puesto el criterio. Tal como lo he diseñado, los criterios solo se juntaran
con el operador AND, o sea que cada filtro se aplicara sobre el filtro
anterior. Si, por ejemplo, quieres sacar los registros que tienen en el
campo MES el valor Febrero o Marzo tendras q hacer dos consultas seguidas
con cada uno de los criterios.

Abajo te pongo el codigo modificado (acuerdate de cambiar el valor de la
variable Hoja).

Si quieres q te mande una hoja de muestra dimelo.

Saludos,
KL

'Inicio Codigo
Sub GetWorksheetData(strSourceFile As String, _
strSQL As String, TargetCell As Range)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim f As Integer, r As Long

If TargetCell Is Nothing Then Exit Sub
Set cn = New ADODB.Connection

On Error Resume Next
cn.Open "DRIVER={Microsoft Excel Driver (*.xls)};" & _
"DriverIdy0;ReadOnly=True;DBQ=" & strSourceFile & ";"

On Error GoTo 0
If cn Is Nothing Then
MsgBox "Can't find the file!", _
vbExclamation, ThisWorkbook.Name
Exit Sub
End If

' open a recordset
Set rs = New ADODB.Recordset
On Error Resume Next
rs.Open strSQL, cn, adOpenForwardOnly, _
adLockReadOnly, adCmdText

On Error GoTo 0
If rs Is Nothing Then
MsgBox "Can't open the file!", _
vbExclamation, ThisWorkbook.Name
cn.Close
Set cn = Nothing
Exit Sub
End If

TargetCell.CopyFromRecordset rs

If rs.State = adStateOpen Then
rs.Close
End If
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub

Sub ExtraerDatos()
Dim Archivo As String, Hoja As String, BD As Variant
Dim CondStr As String

BD = Application.GetOpenFilename _
("Archivos Microsoft Excel (*.xls), *.xls", , _
"Seleccionar las Bases de Datos", , True)

Hoja = "Hoja1"

With ThisWorkbook.Worksheets(1)
UCol = .Cells(3, Columns.Count).End(xlToLeft).Column
For i = 1 To UCol
If .Cells(3, i) <> "" Then
If StrTemp <> "" Then StrTemp = StrTemp & " AND "
StrTemp = StrTemp & "[" & .Cells(4, i) & "] " & .Cells(1, i)
_
& " " & .Cells(3, i)
End If
Next i
If StrTemp <> "" Then
CondStr = " WHERE " & StrTemp
Else
CondStr = StrTemp
End If
End With

With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.StatusBar = "Writing data from recordset..."
End With
On Error GoTo ManejoErrores
For i = LBound(BD) To UBound(BD)
On Error GoTo 0
With ThisWorkbook.Worksheets(1)
UFila = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Archivo = BD(i)

GetWorksheetData Archivo, _
"SELECT * FROM [" & Hoja & "$]" & _
CondStr, .Cells(UFila, 1)
End With
Next i
With Application
.StatusBar = False
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
Exit Sub

ManejoErrores:
With Application
.StatusBar = False
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
MsgBox "La operacion se ha cancelado."
Exit Sub
End Sub
'Fin Codigo
Respuesta Responder a este mensaje
#2 SG Web Design - Sergio Gattelet
21/03/2005 - 18:09 | Informe spam
Hola KL,

Queria comentarte que el codigo que me enviastes al principio leia varios
xls y generaba una lista con todos esos datos segun un criterio de
seleccion. Algo que tuve que adaptar a mis necesidades ya que la idea es la
de generar el listado completo una unica vez para luego trabajar con las
consultas sobre ese mismo listado.

Ahora teniedo todo listo tengo que generar de alguna manera la consulta
sobre este listado ya que va a ser una tarea repetitiva y totalmente
operacional.

Espero con esto puedas entender el motivo de mi consulta. Te dire que voy a
ponerle a ver lo que me enviastes, luego te dire como resulta.

Saludos.
Sergio

"KL" escribió en el mensaje
news:
Hola Sergio,

Hasta a mi (que se supone que se por donde van los tiros) me ha resultado
dificil entender lo que buscas. De hecho no estoy seguro de q te haya
entendido bien. Suponiendo que te refieres al codigo con llamadas ADO q te
habia escrito antes, aqui te pongo una opcion como cambiar las variables
dinamicamente.

En la hoja donde se tienen que mostrar los resultados de la consulta haz


lo
siguiente:

1) en la fila [4] pon los encabezados de columnas exactamente como


aparecen
en las hojas de donde se sacaran los datos
2) en la fila [1] selecciona todas las celdas que estan por encima de los
encabezados, ve al menu Datos>Validacion, opcion Lista y en vez de formula
pon: LIKE; =; <=; >=; <; >; <>
Estos no son todos los operadores posibles asi que tendras campo para
perfeccionar tu proyecto.
3) en la celda [A3] pon la siguiente formula y copiala a todas las celdas
que estan por encima de los encabezados:



=SI(O(A2="";A1="");"";SI(O(ESTEXTO(A2);A1="LIKE");"'"&A2&"'";SI(A2="";"";A2)
))
4) Protege las filas [3] y [4]

Ahora en la fila [1] podras seleccionar el operador de comparacion (LIKE;


=;
<=; >=; <; >; <>), en la fila [2] pondras el criterio de comparacion


(p.ej.
un valor o cadena de texto), en la fila [3] tu criterio se representara


con
sintaxis SQL y en la fila [4] estara el nombre del campo para el cual as
puesto el criterio. Tal como lo he diseñado, los criterios solo se


juntaran
con el operador AND, o sea que cada filtro se aplicara sobre el filtro
anterior. Si, por ejemplo, quieres sacar los registros que tienen en el
campo MES el valor Febrero o Marzo tendras q hacer dos consultas seguidas
con cada uno de los criterios.

Abajo te pongo el codigo modificado (acuerdate de cambiar el valor de la
variable Hoja).

Si quieres q te mande una hoja de muestra dimelo.

Saludos,
KL

'Inicio Codigo
Sub GetWorksheetData(strSourceFile As String, _
strSQL As String, TargetCell As Range)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim f As Integer, r As Long

If TargetCell Is Nothing Then Exit Sub
Set cn = New ADODB.Connection

On Error Resume Next
cn.Open "DRIVER={Microsoft Excel Driver (*.xls)};" & _
"DriverIdy0;ReadOnly=True;DBQ=" & strSourceFile & ";"

On Error GoTo 0
If cn Is Nothing Then
MsgBox "Can't find the file!", _
vbExclamation, ThisWorkbook.Name
Exit Sub
End If

' open a recordset
Set rs = New ADODB.Recordset
On Error Resume Next
rs.Open strSQL, cn, adOpenForwardOnly, _
adLockReadOnly, adCmdText

On Error GoTo 0
If rs Is Nothing Then
MsgBox "Can't open the file!", _
vbExclamation, ThisWorkbook.Name
cn.Close
Set cn = Nothing
Exit Sub
End If

TargetCell.CopyFromRecordset rs

If rs.State = adStateOpen Then
rs.Close
End If
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub

Sub ExtraerDatos()
Dim Archivo As String, Hoja As String, BD As Variant
Dim CondStr As String

BD = Application.GetOpenFilename _
("Archivos Microsoft Excel (*.xls), *.xls", , _
"Seleccionar las Bases de Datos", , True)

Hoja = "Hoja1"

With ThisWorkbook.Worksheets(1)
UCol = .Cells(3, Columns.Count).End(xlToLeft).Column
For i = 1 To UCol
If .Cells(3, i) <> "" Then
If StrTemp <> "" Then StrTemp = StrTemp & " AND "
StrTemp = StrTemp & "[" & .Cells(4, i) & "] " & .Cells(1,


i)
_
& " " & .Cells(3, i)
End If
Next i
If StrTemp <> "" Then
CondStr = " WHERE " & StrTemp
Else
CondStr = StrTemp
End If
End With

With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.StatusBar = "Writing data from recordset..."
End With
On Error GoTo ManejoErrores
For i = LBound(BD) To UBound(BD)
On Error GoTo 0
With ThisWorkbook.Worksheets(1)
UFila = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Archivo = BD(i)

GetWorksheetData Archivo, _
"SELECT * FROM [" & Hoja & "$]" & _
CondStr, .Cells(UFila, 1)
End With
Next i
With Application
.StatusBar = False
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
Exit Sub

ManejoErrores:
With Application
.StatusBar = False
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
MsgBox "La operacion se ha cancelado."
Exit Sub
End Sub
'Fin Codigo


Respuesta Responder a este mensaje
#3 SG Web Design - Sergio Gattelet
21/03/2005 - 19:36 | Informe spam
KL,

el codigo que me pasas es para leer nuevamente de una planilla externa pero
ya no me hace falta eso porque tengo el listado completo dentro del libro,
solo me falta realizar la consulta a la hoja "listado".

"SG Web Design - Sergio Gattelet" escribió en el mensaje
news:
Hola Grupo (KL se que estas ahi)

Bueno superando ya la mitad del proyecto, aun me resta realizar la


consulta
de los registros mediante el ingreso de parametros. Tengo una vaga idea de
realizarlos con un formulario pero tal vez exista algun otro metodo mas
efectivo o avanzado y esta es la razon de mi consulta.
Cual seria el metodo para implementar cuando se tiene un listado completo
con cod - descripcion - precio y se desea buscar un articulo o conjunto de
articulo por algunos de estos campos.

Vale destacar que este listado es solo de consulta sin intensiones de
modificar ningun valor ni cambiar algun dato por lo que esta protegido.

Quisiera saber si es posible tener una ventana dentro de la hoja del


listado
que me permita de manera rapida ingresar cualquiera de estos datos y me
mostrase el resultado de su consulta sin que ello genere la creacion de


una
nueva hoja. La funcion seria la de consultar los articulos para comparar


los
precios unicamente.

Bueno espero como siempre alguna respuesta al respecto.
Mis saludos,
Sergio


Respuesta Responder a este mensaje
#4 KL
21/03/2005 - 19:58 | Informe spam
Sergio;

Pues en este caso nada mejor que el Autofiltro - selecciona la 1 celda de la
tabla (o la tabla entera), ve al menu Datos>Filtro>Autofiltro. Ahora podras
filtrar tus datos con diferentes criterios tanto estandar como
personalizados.

Saludos,
KL

"SG Web Design - Sergio Gattelet" wrote in message
news:%
KL,

el codigo que me pasas es para leer nuevamente de una planilla externa
pero
ya no me hace falta eso porque tengo el listado completo dentro del libro,
solo me falta realizar la consulta a la hoja "listado".

"SG Web Design - Sergio Gattelet" escribió en el
mensaje
news:
Hola Grupo (KL se que estas ahi)

Bueno superando ya la mitad del proyecto, aun me resta realizar la


consulta
de los registros mediante el ingreso de parametros. Tengo una vaga idea
de
realizarlos con un formulario pero tal vez exista algun otro metodo mas
efectivo o avanzado y esta es la razon de mi consulta.
Cual seria el metodo para implementar cuando se tiene un listado completo
con cod - descripcion - precio y se desea buscar un articulo o conjunto
de
articulo por algunos de estos campos.

Vale destacar que este listado es solo de consulta sin intensiones de
modificar ningun valor ni cambiar algun dato por lo que esta protegido.

Quisiera saber si es posible tener una ventana dentro de la hoja del


listado
que me permita de manera rapida ingresar cualquiera de estos datos y me
mostrase el resultado de su consulta sin que ello genere la creacion de


una
nueva hoja. La funcion seria la de consultar los articulos para comparar


los
precios unicamente.

Bueno espero como siempre alguna respuesta al respecto.
Mis saludos,
Sergio






Respuesta Responder a este mensaje
#5 SG Web Design - Sergio Gattelet
21/03/2005 - 21:04 | Informe spam
KL,
bueno probe el autofiltro pero no es lo que ando buscando ya que necesito
algo mas practico, el codigo que me habias enviado anteriormente me parece
mejor solo que trabaja abriendo un archivo externo y solo necesito indicarle
que los datos esta en la primera hoja del libro.
Podrias indicarme al respecto.
Sergio

"KL" escribió en el mensaje
news:
Sergio;

Pues en este caso nada mejor que el Autofiltro - selecciona la 1 celda de


la
tabla (o la tabla entera), ve al menu Datos>Filtro>Autofiltro. Ahora


podras
filtrar tus datos con diferentes criterios tanto estandar como
personalizados.

Saludos,
KL

"SG Web Design - Sergio Gattelet" wrote in message
news:%
> KL,
>
> el codigo que me pasas es para leer nuevamente de una planilla externa
> pero
> ya no me hace falta eso porque tengo el listado completo dentro del


libro,
> solo me falta realizar la consulta a la hoja "listado".
>
> "SG Web Design - Sergio Gattelet" escribió en el
> mensaje
> news:
>> Hola Grupo (KL se que estas ahi)
>>
>> Bueno superando ya la mitad del proyecto, aun me resta realizar la
> consulta
>> de los registros mediante el ingreso de parametros. Tengo una vaga idea
>> de
>> realizarlos con un formulario pero tal vez exista algun otro metodo mas
>> efectivo o avanzado y esta es la razon de mi consulta.
>> Cual seria el metodo para implementar cuando se tiene un listado


completo
>> con cod - descripcion - precio y se desea buscar un articulo o conjunto
>> de
>> articulo por algunos de estos campos.
>>
>> Vale destacar que este listado es solo de consulta sin intensiones de
>> modificar ningun valor ni cambiar algun dato por lo que esta protegido.
>>
>> Quisiera saber si es posible tener una ventana dentro de la hoja del
> listado
>> que me permita de manera rapida ingresar cualquiera de estos datos y me
>> mostrase el resultado de su consulta sin que ello genere la creacion de
> una
>> nueva hoja. La funcion seria la de consultar los articulos para


comparar
> los
>> precios unicamente.
>>
>> Bueno espero como siempre alguna respuesta al respecto.
>> Mis saludos,
>> Sergio
>>
>>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida