AYUDA URGENTE CON VB

16/07/2008 - 20:08 por Bruja | Informe spam
Hola Todos,

Desde ya gracias por su ayuda, ahora les platico.
Hice un programa de busqueda en una base de datos. Me corría super bien, si
no le ingresaba la palabra exacta tal como estaba en la basde datos decía que
no existía eso estaba perfecto. Ahora no sé que le moví que con que le
ingrese una letra me dice que si se encontró y obvio me saca el primer
articulo que encuentre que tiene esa letra. Les pongo mi código para ver si
me pueden decir cual es mi error, espero me puedan ayudar por que ya ese me
quemó el cerebro GRAX. Besos
La bruja - May

Private Sub CommandButton1_Click()
'Definición de variables, fila se usa para guardar en que fila se encuentra
y varbus es la variable a buscar
Dim fila As Long, varbus As String
'Manda llamar al procedimiento BuscaRegistro con la variable fila
BuscaRegistro fila, varbus
'Cancela la búsqueda definitivamente, se acaba el programa
If varbus = "" Then Exit Sub
'Si no encontró la variable le avisa al usuario
If fila = 0 Then
MsgBox "La búsqueda no arrojó ningún resultado", vbInformation,
"BÚSQUEDA SIN RESULTADOS"
'Si desea buscar de nuevo, reinicia sólo el program si no se acaba
Do While MsgBox("¿Desea intentarlo de nuevo?", vbRetryCancel +
vbQuestion, "BUSQUEDA") = vbRetry
BuscaRegistro fila, varbus
MsgBox "La búsqueda no arrojó ningún resultado", vbCritical,
"ERROR"
Loop
MsgBox "Término de la búsqueda", vbExclamation, "FIN"
'Si lo encuentra le avisa al usuarion que la búsqueda fue exitosa y le da
los resultados
Else
MsgBox "Tu búsqueda fue exitosa", vbExclamation, "BÚSQUEDA EXITOSA"
MsgBox "El Equipo secador " & Worksheets("GRAL").Cells(fila, 3) & vbCr & _
"seca el material " & Worksheets("GRAL").Cells(fila, 1) & vbCr & _
" con código " & Worksheets("GRAL").Cells(fila, 2) & vbCr, vbOKOnly,
"RESULTADOS"""
Worksheets("BÚSQUEDA").Cells(10, 2) = "Materia Prima"
Worksheets("BÚSQUEDA").Cells(10, 3) = "Código"
Worksheets("BÚSQUEDA").Cells(10, 4) = "Secador"
Worksheets("BÚSQUEDA").Cells(11, 2) = Worksheets("GRAL").Cells(fila, 1)
Worksheets("BÚSQUEDA").Cells(11, 3) = Worksheets("GRAL").Cells(fila, 2)
Worksheets("BÚSQUEDA").Cells(11, 4) = Worksheets("GRAL").Cells(fila, 3)
End If
End Sub
'Procedimiento de búsuqeda
Sub BuscaRegistro(fila As Long, varbus As String)
On Error Resume Next
'Le solicita al usuario la variable a buscar
varbus = UCase(InputBox("Introduce el nombre de material o código que deseas
buscar", "BUSCAR"))
'Si el usuario cancela o deja en blanco en vez de introducir algo, le aviso
lo que sucedió
If varbus = "" Then
MsgBox "Se canceló o no se introdujo ningún parámetro a buscar",
vbCritical, "ERROR"
'Si desea buscar de nuevo, reinicia sólo el program si no se acaba
Do While MsgBox("¿Desea iniciar la búsqueda o cancelarla
definitivamente?", vbQuestion + vbOKCancel, "BÚSQUEDA") = vbOK
BuscaRegistro fila, varbus
Loop
Exit Sub
'Busca la variable
Else
'busca en columna A.
fila = Worksheets("GRAL").Range("A2:B1000").Find(varbus).Row
End If
End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
16/07/2008 - 23:22 | Informe spam
hola, May !

Desde ya gracias por su ayuda, ahora les platico.
Hice un programa de busqueda en una base de datos. Me corria super bien
si no le ingresaba la palabra exacta tal como estaba en la basde datos decia que no existia eso estaba perfecto.
Ahora no se que le movi que con que le ingrese una letra me dice que si se encontro y obvio
me saca el primer articulo que encuentre que tiene esa letra.
Les pongo mi codigo para ver si me pueden decir cual es mi error
espero me puedan ayudar por que ya ese me quemo el cerebro ...



en tu mensaje anterior con asunto de "MEGA URGENTE" ya habias dejado un codigo que te funciono muy bien ;)
(aparentemente) dentro de las modificaciones que expones en este nuevo codigo, hay dos o tres cambios que pudieran ser la causa:

1) en tu codigo anterior, el procedimiento Sub BuscaRegistro(...
a) SOLO requeria de la variable fila
b) (ahora) le agregas el requerimiento de la variable varbus
c) ambos argumentos son ByRef (por omision) lo que significa que NO se pueden modificar dentro del procedimiento "llamado"
d) si de todas formas vuelves a "preguntar" por la variable varbus (en el InputBox)... para que lo solicitas ByRef ???
e) igual para el argumento fila (es lo que vas a devolver en caso de encontrar la variable de busqueda) -???-

2) agregaste un bucle Do While MsgBox(...) = vbOK y tienes una instruccion "Exit Sub"
revisa cual es el proposito de ambas (y como es que estan "afectando" a tus instrucciones) y si son (realmente) "necesarias" -???-

3) si requieres que tus variables fila y varbus puedan ser "administradas" por ambos procedimientos...
a) retiralas de la declaracion al inicio del procedimiento
b) ponlas en el area de declaraciones -> a nivel de modulo
c) retiralas como argumentos en el procedimiento Sub BuscaRegistro(...

4) en el peor de los casos... prueba "regresando" al codigo que SI te funciono (el del mensaje "MEGA URGENTE")

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el resto del mensaje con el codigo (nuevo) __
Private Sub CommandButton1_Click()
'Definición de variables, fila se usa para guardar en que fila se encuentra y varbus es la variable a buscar
Dim fila As Long, varbus As String
'Manda llamar al procedimiento BuscaRegistro con la variable fila
BuscaRegistro fila, varbus
'Cancela la bàºsqueda definitivamente, se acaba el programa
If varbus = "" Then Exit Sub
'Si no encontró la variable le avisa al usuario
If fila = 0 Then
MsgBox "La bàºsqueda no arrojó ningàºn resultado", vbInformation, "BàšSQUEDA SIN RESULTADOS"
'Si desea buscar de nuevo, reinicia sólo el program si no se acaba
Do While MsgBox("¿Desea intentarlo de nuevo?", vbRetryCancel + vbQuestion, "BUSQUEDA") = vbRetry
BuscaRegistro fila, varbus
MsgBox "La bàºsqueda no arrojó ningàºn resultado", vbCritical, "ERROR"
Loop
MsgBox "Término de la bàºsqueda", vbExclamation, "FIN"
'Si lo encuentra le avisa al usuarion que la bàºsqueda fue exitosa y le da los resultados
Else
MsgBox "Tu bàºsqueda fue exitosa", vbExclamation, "BàšSQUEDA EXITOSA"
MsgBox "El Equipo secador " & Worksheets("GRAL").Cells(fila, 3) & vbCr & _
"seca el material " & Worksheets("GRAL").Cells(fila, 1) & vbCr & _
" con código " & Worksheets("GRAL").Cells(fila, 2) & vbCr, vbOKOnly, "RESULTADOS"""
Worksheets("BàšSQUEDA").Cells(10, 2) = "Materia Prima"
Worksheets("BàšSQUEDA").Cells(10, 3) = "Código"
Worksheets("BàšSQUEDA").Cells(10, 4) = "Secador"
Worksheets("BàšSQUEDA").Cells(11, 2) = Worksheets("GRAL").Cells(fila, 1)
Worksheets("BàšSQUEDA").Cells(11, 3) = Worksheets("GRAL").Cells(fila, 2)
Worksheets("BàšSQUEDA").Cells(11, 4) = Worksheets("GRAL").Cells(fila, 3)
End If
End Sub
'Procedimiento de bàºsuqeda
Sub BuscaRegistro(fila As Long, varbus As String)
On Error Resume Next
'Le solicita al usuario la variable a buscar
varbus = UCase(InputBox("Introduce el nombre de material o código que deseas buscar", "BUSCAR"))
'Si el usuario cancela o deja en blanco en vez de introducir algo, le aviso lo que sucedió
If varbus = "" Then
MsgBox "Se canceló o no se introdujo ningàºn parà¡metro a buscar", vbCritical, "ERROR"
'Si desea buscar de nuevo, reinicia sólo el program si no se acaba
Do While MsgBox("¿Desea iniciar la bàºsqueda o cancelarla definitivamente?", vbQuestion + vbOKCancel, "BàšSQUEDA") = vbOK
BuscaRegistro fila, varbus
Loop
Exit Sub
'Busca la variable
Else
'busca en columna A.
fila = Worksheets("GRAL").Range("A2:B1000").Find(varbus).Row
End If
End Sub
Respuesta Responder a este mensaje
#2 Bruja
17/07/2008 - 03:51 | Informe spam
Hola Hector,

Como siempre muchas gracias por tu respuesta
Te comento que ya le hice de todas las formas y naada!!!!! Acabo de usar mi
macro pasada y ahora tiene el mismo error que no busca de manera exacta!!!

Me podrías ayudar por fa??? Estoy que me vuelvo loca y la tengo que entregar
ya!!!
Sabes de un método infalible que haga una busqueda exacta de string???
Espero me puedas ayuda
De antemano muuuchas Gracias!!!
Besos
La Bruja - May


"Héctor Miguel" escribió:

hola, May !

> Desde ya gracias por su ayuda, ahora les platico.
> Hice un programa de busqueda en una base de datos. Me corria super bien
> si no le ingresaba la palabra exacta tal como estaba en la basde datos decia que no existia eso estaba perfecto.
> Ahora no se que le movi que con que le ingrese una letra me dice que si se encontro y obvio
> me saca el primer articulo que encuentre que tiene esa letra.
> Les pongo mi codigo para ver si me pueden decir cual es mi error
> espero me puedan ayudar por que ya ese me quemo el cerebro ...

en tu mensaje anterior con asunto de "MEGA URGENTE" ya habias dejado un codigo que te funciono muy bien ;)
(aparentemente) dentro de las modificaciones que expones en este nuevo codigo, hay dos o tres cambios que pudieran ser la causa:

1) en tu codigo anterior, el procedimiento Sub BuscaRegistro(...
a) SOLO requeria de la variable fila
b) (ahora) le agregas el requerimiento de la variable varbus
c) ambos argumentos son ByRef (por omision) lo que significa que NO se pueden modificar dentro del procedimiento "llamado"
d) si de todas formas vuelves a "preguntar" por la variable varbus (en el InputBox)... para que lo solicitas ByRef ???
e) igual para el argumento fila (es lo que vas a devolver en caso de encontrar la variable de busqueda) -???-

2) agregaste un bucle Do While MsgBox(...) = vbOK y tienes una instruccion "Exit Sub"
revisa cual es el proposito de ambas (y como es que estan "afectando" a tus instrucciones) y si son (realmente) "necesarias" -???-

3) si requieres que tus variables fila y varbus puedan ser "administradas" por ambos procedimientos...
a) retiralas de la declaracion al inicio del procedimiento
b) ponlas en el area de declaraciones -> a nivel de modulo
c) retiralas como argumentos en el procedimiento Sub BuscaRegistro(...

4) en el peor de los casos... prueba "regresando" al codigo que SI te funciono (el del mensaje "MEGA URGENTE")

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el resto del mensaje con el codigo (nuevo) __
> Private Sub CommandButton1_Click()
> 'Definición de variables, fila se usa para guardar en que fila se encuentra y varbus es la variable a buscar
> Dim fila As Long, varbus As String
> 'Manda llamar al procedimiento BuscaRegistro con la variable fila
> BuscaRegistro fila, varbus
> 'Cancela la bàºsqueda definitivamente, se acaba el programa
> If varbus = "" Then Exit Sub
> 'Si no encontró la variable le avisa al usuario
> If fila = 0 Then
> MsgBox "La bàºsqueda no arrojó ningàºn resultado", vbInformation, "BàšSQUEDA SIN RESULTADOS"
> 'Si desea buscar de nuevo, reinicia sólo el program si no se acaba
> Do While MsgBox("¿Desea intentarlo de nuevo?", vbRetryCancel + vbQuestion, "BUSQUEDA") = vbRetry
> BuscaRegistro fila, varbus
> MsgBox "La bàºsqueda no arrojó ningàºn resultado", vbCritical, "ERROR"
> Loop
> MsgBox "Término de la bàºsqueda", vbExclamation, "FIN"
> 'Si lo encuentra le avisa al usuarion que la bàºsqueda fue exitosa y le da los resultados
> Else
> MsgBox "Tu bàºsqueda fue exitosa", vbExclamation, "BàšSQUEDA EXITOSA"
> MsgBox "El Equipo secador " & Worksheets("GRAL").Cells(fila, 3) & vbCr & _
> "seca el material " & Worksheets("GRAL").Cells(fila, 1) & vbCr & _
> " con código " & Worksheets("GRAL").Cells(fila, 2) & vbCr, vbOKOnly, "RESULTADOS"""
> Worksheets("BàšSQUEDA").Cells(10, 2) = "Materia Prima"
> Worksheets("BàšSQUEDA").Cells(10, 3) = "Código"
> Worksheets("BàšSQUEDA").Cells(10, 4) = "Secador"
> Worksheets("BàšSQUEDA").Cells(11, 2) = Worksheets("GRAL").Cells(fila, 1)
> Worksheets("BàšSQUEDA").Cells(11, 3) = Worksheets("GRAL").Cells(fila, 2)
> Worksheets("BàšSQUEDA").Cells(11, 4) = Worksheets("GRAL").Cells(fila, 3)
> End If
> End Sub
> 'Procedimiento de bàºsuqeda
> Sub BuscaRegistro(fila As Long, varbus As String)
> On Error Resume Next
> 'Le solicita al usuario la variable a buscar
> varbus = UCase(InputBox("Introduce el nombre de material o código que deseas buscar", "BUSCAR"))
> 'Si el usuario cancela o deja en blanco en vez de introducir algo, le aviso lo que sucedió
> If varbus = "" Then
> MsgBox "Se canceló o no se introdujo ningàºn parà¡metro a buscar", vbCritical, "ERROR"
> 'Si desea buscar de nuevo, reinicia sólo el program si no se acaba
> Do While MsgBox("¿Desea iniciar la bàºsqueda o cancelarla definitivamente?", vbQuestion + vbOKCancel, "BàšSQUEDA") = vbOK
> BuscaRegistro fila, varbus
> Loop
> Exit Sub
> 'Busca la variable
> Else
> 'busca en columna A.
> fila = Worksheets("GRAL").Range("A2:B1000").Find(varbus).Row
> End If
> End Sub



Respuesta Responder a este mensaje
#3 Héctor Miguel
17/07/2008 - 08:11 | Informe spam
hola, May !

Te comento que ya le hice de todas las formas y naada!!!!!
Acabo de usar mi macro pasada y ahora tiene el mismo error que no busca de manera exacta!!!
Me podrias ayudar por fa??? Estoy que me vuelvo loca y la tengo que entregar ya!!!
Sabes de un metodo infalible que haga una busqueda exacta de string???



dependiendo de lo que signifique hacer una "busqueda exacta de string"... (o sea)
"que" es (exactamente) lo que se introduce en el InputBox y...
"que" es (exactamente) lo que se podria encontrar en el rango especificado...

podrias cambiar la instruccion de busquda...
> fila = Worksheets("GRAL").Range("A2:B1000").Find(varbus).Row





por otra instruccion que utilice mas argumentos disponibles en el metodo .Find
consulta en la ayuda en linea "que" hacen los argumentos LookIn, LookAt, y MatchCase (p.e.)

fila = Worksheets("gral").Range("a2:b1000").Find( _
What:=varbus, _
After:=Worksheets("gral").Range("a2"), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=True).Row

saludos,
hector.
Respuesta Responder a este mensaje
#4 Bruja
17/07/2008 - 10:27 | Informe spam
Hola Todos,

Cambié varias cosas de mi programa y ahora corre a la perfección, hace
búsuqeda exacta de la variable que ingresa el usuario y hace todo lo demás
que yo quería.
Sé que no es un programa muy bueno y que las personas de este foro de seguro
lo harían mil veces mejor, pero como me gusta retribuir siempre acá se los
pongo.
Hector y Antonio de nuevo mil gracias por toooda su ayuda =)
Saludos,
La Bruja - May

PROGRAMA PARA BUSCAR EN UNA BASE DE DATOS EN EXCEL
Private Sub CommandButton1_Click()
'Definición de variables, fila se usa para guardar en que fila se encuentra
y varbus es la variable a buscar
Dim fila As Long, varbus As String
'Manda llamar al procedimiento BuscaRegistro con la variable fila
BuscaRegistro fila, varbus
'Cancela la búsqueda definitivamente, se acaba el programa
If varbus = "" Then Exit Sub
If fila = 0 Then Exit Sub
'Si lo encuentra le avisa al usuarion que la búsqueda fue exitosa
MsgBox "Tu búsqueda fue exitosa", vbExclamation, "BÚSQUEDA EXITOSA"
'Despliega los resultados en un MsgBox
MsgBox "EL EQUIPO SECADOR " & Worksheets("GRAL").Cells(fila, 3) & vbCr & _
"SECA EL MATERIAL " & Worksheets("GRAL").Cells(fila, 1) & vbCr & _
" CON CÓDIGO " & Worksheets("GRAL").Cells(fila, 2) & vbCr, vbInformation,
"RESULTADOS"
'Despliega los resultados en la celdas predeterminadas
Worksheets("BÚSQUEDA").Cells(10, 2) = "Materia Prima"
Worksheets("BÚSQUEDA").Cells(10, 3) = "Código"
Worksheets("BÚSQUEDA").Cells(10, 4) = "Secador"
Worksheets("BÚSQUEDA").Cells(11, 2) = Worksheets("GRAL").Cells(fila, 1)
Worksheets("BÚSQUEDA").Cells(11, 3) = Worksheets("GRAL").Cells(fila, 2)
Worksheets("BÚSQUEDA").Cells(11, 4) = Worksheets("GRAL").Cells(fila, 3)
End Sub
'Procedimiento de búsuqeda
Sub BuscaRegistro(fila As Long, varbus As String)
On Error Resume Next
'Le solicita al usuario la variable a buscar
varbus = UCase(InputBox("Introduce el nombre de material o código que deseas
buscar", "BUSCAR"))
'Si el usuario cancela o deja en blanco en vez de introducir algo, le aviso
lo que sucedió
If varbus = "" Then
MsgBox "Se canceló o no se introdujo ningún parámetro a buscar",
vbCritical, "ERROR"
'Si desea inicar la búsqueda reinicia sólo el programa, si no se acaba
If MsgBox("¿Desea reiniciar la búsqueda o cancelarla definitivamente?",
vbQuestion + vbRetryCancel, "BÚSQUEDA") = vbRetry Then
BuscaRegistro fila, varbus
Else
MsgBox "Término de la búsqueda", vbExclamation, "FIN"
Exit Sub
End If
'Busca la variable
Else
fila = Worksheets("GRAL").Range("A2:B1000").Find(varbus).Row
'Si no encontró la variable le avisa al usuario
If fila = 0 Then
MsgBox "La búsqueda no arrojó ningún resultado", vbInformation,
"BÚSQUEDA SIN RESULTADOS"
'Si desea buscar de nuevo reinicia sólo el programa, si no se acaba
If MsgBox("¿Desea intentarlo de nuevo?", vbYesNo + vbQuestion,
"BUSQUEDA") = vbYes Then
BuscaRegistro fila, varbus
Else
MsgBox "Término de la búsqueda", vbExclamation, "FIN"
Exit Sub
End If
End If
End If
End Sub
'Botón para borrar la información de la búsuqeda
Private Sub CommandButton2_Click()
Worksheets("BÚSQUEDA").Range("B10:E11").ClearContents
End Sub

"Héctor Miguel" escribió:

hola, May !

> Te comento que ya le hice de todas las formas y naada!!!!!
> Acabo de usar mi macro pasada y ahora tiene el mismo error que no busca de manera exacta!!!
> Me podrias ayudar por fa??? Estoy que me vuelvo loca y la tengo que entregar ya!!!
> Sabes de un metodo infalible que haga una busqueda exacta de string???

dependiendo de lo que signifique hacer una "busqueda exacta de string"... (o sea)
"que" es (exactamente) lo que se introduce en el InputBox y...
"que" es (exactamente) lo que se podria encontrar en el rango especificado...

podrias cambiar la instruccion de busquda...
>> > fila = Worksheets("GRAL").Range("A2:B1000").Find(varbus).Row

por otra instruccion que utilice mas argumentos disponibles en el metodo .Find
consulta en la ayuda en linea "que" hacen los argumentos LookIn, LookAt, y MatchCase (p.e.)

fila = Worksheets("gral").Range("a2:b1000").Find( _
What:=varbus, _
After:=Worksheets("gral").Range("a2"), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=True).Row

saludos,
hector.



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