Fin en vba

08/06/2007 - 23:00 por crx73 | Informe spam
Buenas tardes amigos.
Tengo en una hoja de calculo una tabla con información de personas
(Clave, nombre completo, clave fiscal, domicilio, etc), esa
información la he agregado por medio de un userform sin necesidad de
abrir la hoja y capturar.
Ahora bien, quiero efectuar una busqueda en esa hoja por medio de otro
userform, dicho userform cuenta con 2 campos de texto (textbox) que en
realidad el objeto a buscar, ya que uno es para efectuar la busqueda
por nombre y otro para la busqueda por la clave fiscal.
Cabe aclarar que solo se puede efectuar la busqueda por alguno de los
dos campos disponibles, se hara por el nombre o por la clave fiscal.

Para ello he hecho algo asi:

Private Sub cmdOK_Click()
'
'Abrimos el Catálogo de Clientes
Sheets("CC").Visible = True
ActiveWorkbook.Sheets("CC").Activate
ActiveWindow.DisplayGridlines = False
'Asignamos el nombre CveRFC al valor del campo txtRFC
Dim CveRFC As String
CveRFC = txtRFC.Value
'Asignamos el nombre NomDen al valor del campo txtNombre
Dim NomDen As String
NomDen = txtNombre.Value
If optBuscaRFC = True Then
'Iniciamos la búsqueda por RFC
Dim RFCIni As String
RFCIni = "$D$7"
Dim RFCFin As String
Range(RFCIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
RFCFin = ActiveCell.Offset(-1, 0).Address

'Establecemos nuestro rango de búsqueda e iniciamos con la operación
ActiveWorkbook.Names.Add Name:="RanBusqRFC",
RefersToR1C1:=Range(RFCIni, RFCFin)
Application.Goto Reference:="RanBusqRFC"

Set BuskRFC = Selection.Find(What:=CveRFC, After:=ActiveCell,
LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns,
SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
'Si el RFC que ingresamos existe en nuestro catálogo, terminamos la
búsqueda
If Not BuskRFC Is Nothing Then
BuskRFC.Activate
Dim CveClisRFC As String
CveClisRFC = (ActiveCell.Offset(0, -3).Value)
Dim NomClisRFC As String
NomClisRFC = (ActiveCell.Offset(0, -1).Value)
'Informamos a quién pertenece el RFC
MsgBox "El R.F.C. que ingresó pertenece a: " &
UCase(NomClisRFC), _
vbInformation, "Cliente encontrado"
Dim Response
Response = MsgBox("¿Es correcto?", vbYesNo +
vbQuestion, "Verificando información")
If Response = vbYes Then
MsgBox "La clave del cliente es: " & CveClisRFC, _
vbInformation, "Tome nota..."
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
Else
Exit Sub
Unload Me
Sheets("CC").Visible = False
Sheets("Detalle").Activate
'ESTE ES EL PUNTO DONDE QUIERO CONTINUAR LA
BUSQUEDA YA QUE EL USUARIO DICE QUE LO QUE ENCONTRO NO ES LO QUE
BUSCABA, SABEMOS QUE EN UNA TABLA PUEDEN HABER MAS DE UN NOMBRE
REPETIDO, POR LO QUE LA PRIMERA CELDA ENCONTRADA NO PUEDE SER LA QUE
BUSCAMOS.

End If
Else
'Pero si no encontramos nada informamos de ello
Unload Me
MsgBox "La clave de R.F.C. que ingresó no existe",
vbCritical, _
"R.F.C. no existe"
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If

Else
'Iniciamos la búsqueda por nombre

Dim NomIni As String
NomIni = "$D$7"
Dim NomFin As String
Range(NomIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
NomFin = ActiveCell.Offset(-1, 0).Address

'Establecemos nuestro rango de búsqueda e iniciamos con la
operación
ActiveWorkbook.Names.Add Name:="RanBusqNom", _
RefersToR1C1:=Range(NomIni, NomFin)
Application.Goto Reference:="RanBusqNom"
Set BuskNom = Selection.Find(What:=NomDen, After:=ActiveCell,
_
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False,
SearchFormat:=False)
'Si el nombre que ingresamos existe en nuestro catálogo,
terminamos la búsqueda
If Not BuskNom Is Nothing Then
BuskNom.Activate
Dim CveClisNom As String
CveClisNom = (ActiveCell.Offset(0, -2).Value)
Dim NomClisNom As String
NomClisNom = (ActiveCell.Value)
MsgBox "El nombre que ingresó pertenece a: " &
UCase(NomClisNom), _
vbInformation, "Cliente encontrado"
Dim Msg2, Style2, Title2, Response2
Msg2 = "¿Es correcto?"
Style2 = vbYesNo + vbQuestion
Title2 = "Vericando información"
Response2 = MsgBox(Msg, Style, Title)
Do
If Response2 = vbNo Then
Set BuskNom = Selection.Find(What:=NomDen,
After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False,
SearchFormat:=False)
'Si el nombre que ingresamos existe en nuestro
catálogo, terminamos la búsqueda
If Not BuskNom Is Nothing Then
BuskNom.Activate
Dim CveClisNom1 As String
CveClisNom1 = (ActiveCell.Offset(0,
-2).Value)
Dim NomClisNom1 As String
NomClisNom1 = (ActiveCell.Value)
MsgBox "El nombre que ingresó pertenece a: " &
UCase(NomClisNom), _
vbInformation, "Cliente encontrado"
Dim Msg3, Style3, Title3, Response3
Msg3 = "¿Es correcto?"
Style3 = vbYesNo + vbQuestion
Title3 = "Vericando información"
Response3 = MsgBox(Msg, Style, Title)
Loop Until Response2 = vbYes
MsgBox "La clave del cliente es: " & CveClisNom, _
vbInformation, "Tome nota..."
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub

End If
Else
Unload Me
MsgBox "El nombre que ingresó no existe", vbCritical, _
"Nombre no existe"
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If

End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
09/06/2007 - 08:50 | Informe spam
hola, 'anonimo/a' !

1) la *parte* de codigo donde expones tu *inquietud* ES cuando estas bucando por *clave de RFC*
y [hasta donde se] se supone/espera/asume/endiende/... que NO encontraras dos RFC's iguales [o si ?]
-> a menos que en su TextBox se indiquen caracteres para una busqueda *parcial* -???-

2) si existe la posibilidad de dos [o mas] *registros* iguales/parecidos/... [ya sea nombre o RFC]
[probablemente] te servira mas utilizar [auto]filtros [o avanzados] para llenar [p.e.] un cuadro de lista...
-> desde el cual podria seleccionarse *cual de todos* [los encontrados] es al que se necesita hacer referencia -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Buenas tardes amigos.
Tengo en una hoja de calculo una tabla con información de personas (Clave, nombre completo, clave fiscal, domicilio, etc)
esa información la he agregado por medio de un userform sin necesidad de abrir la hoja y capturar.
Ahora bien, quiero efectuar una busqueda en esa hoja por medio de otro userform
dicho userform cuenta con 2 campos de texto (textbox) que en realidad el objeto a buscar
ya que uno es para efectuar la busqueda por nombre y otro para la busqueda por la clave fiscal.
Cabe aclarar que solo se puede efectuar la busqueda por alguno de los dos campos disponibles, se hara por el nombre o por la clave fiscal.

Para ello he hecho algo asi:
Private Sub cmdOK_Click()
'Abrimos el Catálogo de Clientes
Sheets("CC").Visible = True
ActiveWorkbook.Sheets("CC").Activate
ActiveWindow.DisplayGridlines = False
'Asignamos el nombre CveRFC al valor del campo txtRFC
Dim CveRFC As String
CveRFC = txtRFC.Value
'Asignamos el nombre NomDen al valor del campo txtNombre
Dim NomDen As String
NomDen = txtNombre.Value
If optBuscaRFC = True Then
'Iniciamos la búsqueda por RFC
Dim RFCIni As String
RFCIni = "$D$7"
Dim RFCFin As String
Range(RFCIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
RFCFin = ActiveCell.Offset(-1, 0).Address
'Establecemos nuestro rango de búsqueda e iniciamos con la operación
ActiveWorkbook.Names.Add Name:="RanBusqRFC", RefersToR1C1:=Range(RFCIni, RFCFin)
Application.Goto Reference:="RanBusqRFC"
Set BuskRFC = Selection.Find(What:=CveRFC, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
'Si el RFC que ingresamos existe en nuestro catálogo, terminamos la búsqueda
If Not BuskRFC Is Nothing Then
BuskRFC.Activate
Dim CveClisRFC As String
CveClisRFC = (ActiveCell.Offset(0, -3).Value)
Dim NomClisRFC As String
NomClisRFC = (ActiveCell.Offset(0, -1).Value)
'Informamos a quién pertenece el RFC
MsgBox "El R.F.C. que ingresó pertenece a: " & UCase(NomClisRFC), _
vbInformation, "Cliente encontrado"
Dim Response
Response = MsgBox("¿Es correcto?", vbYesNo + vbQuestion, "Verificando información")
If Response = vbYes Then
MsgBox "La clave del cliente es: " & CveClisRFC, _
vbInformation, "Tome nota..."
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
Else
Exit Sub
Unload Me
Sheets("CC").Visible = False
Sheets("Detalle").Activate
'ESTE ES EL PUNTO DONDE QUIERO CONTINUAR LA BUSQUEDA YA QUE EL USUARIO DICE QUE LO QUE ENCONTRO
NO ES LO QUE BUSCABA, SABEMOS QUE EN UNA TABLA PUEDEN HABER MAS DE UN NOMBRE REPETIDO,
POR LO QUE LA PRIMERA CELDA ENCONTRADA NO PUEDE SER LA QUE BUSCAMOS.
End If
Else
'Pero si no encontramos nada informamos de ello
Unload Me
MsgBox "La clave de R.F.C. que ingresó no existe", vbCritical, _
"R.F.C. no existe"
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If
Else
'Iniciamos la búsqueda por nombre
Dim NomIni As String
NomIni = "$D$7"
Dim NomFin As String
Range(NomIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
NomFin = ActiveCell.Offset(-1, 0).Address
'Establecemos nuestro rango de búsqueda e iniciamos con la operación
ActiveWorkbook.Names.Add Name:="RanBusqNom", _
RefersToR1C1:=Range(NomIni, NomFin)
Application.Goto Reference:="RanBusqNom"
Set BuskNom = Selection.Find(What:=NomDen, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
'Si el nombre que ingresamos existe en nuestro catálogo, terminamos la búsqueda
If Not BuskNom Is Nothing Then
BuskNom.Activate
Dim CveClisNom As String
CveClisNom = (ActiveCell.Offset(0, -2).Value)
Dim NomClisNom As String
NomClisNom = (ActiveCell.Value)
MsgBox "El nombre que ingresó pertenece a: " & UCase(NomClisNom), _
vbInformation, "Cliente encontrado"
Dim Msg2, Style2, Title2, Response2
Msg2 = "¿Es correcto?"
Style2 = vbYesNo + vbQuestion
Title2 = "Vericando información"
Response2 = MsgBox(Msg, Style, Title)
Do
If Response2 = vbNo Then
Set BuskNom = Selection.Find(What:=NomDen, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
'Si el nombre que ingresamos existe en nuestro catálogo, terminamos la búsqueda
If Not BuskNom Is Nothing Then
BuskNom.Activate
Dim CveClisNom1 As String
CveClisNom1 = (ActiveCell.Offset(0, -2).Value)
Dim NomClisNom1 As String
NomClisNom1 = (ActiveCell.Value)
MsgBox "El nombre que ingresó pertenece a: " & UCase(NomClisNom), _
vbInformation, "Cliente encontrado"
Dim Msg3, Style3, Title3, Response3
Msg3 = "¿Es correcto?"
Style3 = vbYesNo + vbQuestion
Title3 = "Vericando información"
Response3 = MsgBox(Msg, Style, Title)
Loop Until Response2 = vbYes
MsgBox "La clave del cliente es: " & CveClisNom, _
vbInformation, "Tome nota..."
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If
Else
Unload Me
MsgBox "El nombre que ingresó no existe", vbCritical, _
"Nombre no existe"
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If
End Sub
Respuesta Responder a este mensaje
#2 crx73
11/06/2007 - 17:16 | Informe spam
On 9 jun, 01:50, "Héctor Miguel"
wrote:
hola, 'anonimo/a' !

1) la *parte* de codigo donde expones tu *inquietud* ES cuando estas bucando por *clave de RFC*
y [hasta donde se] se supone/espera/asume/endiende/... que NO encontraras dos RFC's iguales [o si ?]
-> a menos que en su TextBox se indiquen caracteres para una busqueda *parcial* -???-

2) si existe la posibilidad de dos [o mas] *registros* iguales/parecidos/... [ya sea nombre o RFC]
[probablemente] te servira mas utilizar [auto]filtros [o avanzados] para llenar [p.e.] un cuadro de lista...
-> desde el cual podria seleccionarse *cual de todos* [los encontrados] es al que se necesita hacer referencia -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Buenas tardes amigos.
Tengo en una hoja de calculo una tabla con información de personas (Clave, nombre completo, clave fiscal, domicilio, etc)
esa información la he agregado por medio de un userform sin necesidad de abrir la hoja y capturar.
Ahora bien, quiero efectuar una busqueda en esa hoja por medio de otro userform
dicho userform cuenta con 2 campos de texto (textbox) que en realidad el objeto a buscar
ya que uno es para efectuar la busqueda por nombre y otro para la busqueda por la clave fiscal.
Cabe aclarar que solo se puede efectuar la busqueda por alguno de los dos campos disponibles, se hara por el nombre o por la clave fiscal.

Para ello he hecho algo asi:
Private Sub cmdOK_Click()
'Abrimos el Catálogo de Clientes
Sheets("CC").Visible = True
ActiveWorkbook.Sheets("CC").Activate
ActiveWindow.DisplayGridlines = False
'Asignamos el nombre CveRFC al valor del campo txtRFC
Dim CveRFC As String
CveRFC = txtRFC.Value
'Asignamos el nombre NomDen al valor del campo txtNombre
Dim NomDen As String
NomDen = txtNombre.Value
If optBuscaRFC = True Then
'Iniciamos la búsqueda por RFC
Dim RFCIni As String
RFCIni = "$D$7"
Dim RFCFin As String
Range(RFCIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
RFCFin = ActiveCell.Offset(-1, 0).Address
'Establecemos nuestro rango de búsqueda e iniciamos con la operación
ActiveWorkbook.Names.Add Name:="RanBusqRFC", RefersToR1C1:=Range(RFCIni, RFCFin)
Application.Goto Reference:="RanBusqRFC"
Set BuskRFC = Selection.Find(What:=CveRFC, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
'Si el RFC que ingresamos existe en nuestro catálogo, terminamos la búsqueda
If Not BuskRFC Is Nothing Then
BuskRFC.Activate
Dim CveClisRFC As String
CveClisRFC = (ActiveCell.Offset(0, -3).Value)
Dim NomClisRFC As String
NomClisRFC = (ActiveCell.Offset(0, -1).Value)
'Informamos a quién pertenece el RFC
MsgBox "El R.F.C. que ingresó pertenece a: " & UCase(NomClisRFC), _
vbInformation, "Cliente encontrado"
Dim Response
Response = MsgBox("¿Es correcto?", vbYesNo + vbQuestion, "Verificando información")
If Response = vbYes Then
MsgBox "La clave del cliente es: " & CveClisRFC, _
vbInformation, "Tome nota..."
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
Else
Exit Sub
Unload Me
Sheets("CC").Visible = False
Sheets("Detalle").Activate
'ESTE ES EL PUNTO DONDE QUIERO CONTINUAR LA BUSQUEDA YA QUE EL USUARIO DICE QUE LO QUE ENCONTRO
NO ES LO QUE BUSCABA, SABEMOS QUE EN UNA TABLA PUEDEN HABER MAS DE UN NOMBRE REPETIDO,
POR LO QUE LA PRIMERA CELDA ENCONTRADA NO PUEDE SER LA QUE BUSCAMOS.
End If
Else
'Pero si no encontramos nada informamos de ello
Unload Me
MsgBox "La clave de R.F.C. que ingresó no existe", vbCritical, _
"R.F.C. no existe"
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If
Else
'Iniciamos la búsqueda por nombre
Dim NomIni As String
NomIni = "$D$7"
Dim NomFin As String
Range(NomIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
NomFin = ActiveCell.Offset(-1, 0).Address
'Establecemos nuestro rango de búsqueda e iniciamos con la operación
ActiveWorkbook.Names.Add Name:="RanBusqNom", _
RefersToR1C1:=Range(NomIni, NomFin)
Application.Goto Reference:="RanBusqNom"
Set BuskNom = Selection.Find(What:=NomDen, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
'Si el nombre que ingresamos existe en nuestro catálogo, terminamos la búsqueda
If Not BuskNom Is Nothing Then
BuskNom.Activate
Dim CveClisNom As String
CveClisNom = (ActiveCell.Offset(0, -2).Value)
Dim NomClisNom As String
NomClisNom = (ActiveCell.Value)
MsgBox "El nombre que ingresó pertenece a: " & UCase(NomClisNom), _
vbInformation, "Cliente encontrado"
Dim Msg2, Style2, Title2, Response2
Msg2 = "¿Es correcto?"
Style2 = vbYesNo + vbQuestion
Title2 = "Vericando información"
Response2 = MsgBox(Msg, Style, Title)
Do
If Response2 = vbNo Then
Set BuskNom = Selection.Find(What:=NomDen, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
'Si el nombre que ingresamos existe en nuestro catálogo, terminamos la búsqueda
If Not BuskNom Is Nothing Then
BuskNom.Activate
Dim CveClisNom1 As String
CveClisNom1 = (ActiveCell.Offset(0, -2).Value)
Dim NomClisNom1 As String
NomClisNom1 = (ActiveCell.Value)
MsgBox "El nombre que ingresó pertenece a: " & UCase(NomClisNom), _
vbInformation, "Cliente encontrado"
Dim Msg3, Style3, Title3, Response3
Msg3 = "¿Es correcto?"
Style3 = vbYesNo + vbQuestion
Title3 = "Vericando información"
Response3 = MsgBox(Msg, Style, Title)
Loop Until Response2 = vbYes
MsgBox "La clave del cliente es: " & CveClisNom, _
vbInformation, "Tome nota..."
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If
Else
Unload Me
MsgBox "El nombre que ingresó no existe", vbCritical, _
"Nombre no existe"
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If
End Sub



Hola Hector, buenos dias.
Primero que nada te agradezco el interes.
Ciertamente la referencia la puse en el lugar equivocado, sin embargo,
no es posible encontrar dos rfc iguales, pero sí puede ocurrir que no
nos acordemos de todo el rfc completo (quién se acuerda de su propio
curp? Yo sí, jeje.) por lo que muchas veces solo pondremos los primero
10 digitos, y en este caso sí podrían encontrarse varios resultados,
por lo que es importante continuar con la busqueda hasta encontrar el
correcto o estar satisfechos de que el registro q buscamos realmente
no se encuentra en la base de datos.
Describo lo q tengo:
Un userform sencillo, dos optionbutton y dos textbox, el primer
optionbutton corresponde al rfc y el segundo al nombre, con estos
botones se decide qué tipo de búsqueda realizar, la elección de alguno
de los tipos habilitara y deshabilitará alguno de los text box, que
son precisamente para ingresar la(s) palabra(s) a buscar.
Bien, el código correcto (hice algunos ajustes, pero no he logrado
solucionar mi problema) del boton OK es:

Private Sub cmdOK_Click()
'
'Abrimos el Catálogo de Clientes
Sheets("CC").Visible = True
ActiveWorkbook.Sheets("CC").Activate
ActiveWindow.DisplayGridlines = False
'Asignamos el nombre CveRFC al valor del campo txtRFC
Dim CveRFC As String
CveRFC = txtRFC.Value
'Asignamos el nombre NomDen al valor del campo txtNombre
Dim NomDen As String
NomDen = txtNombre.Value
If optBuscaRFC = True Then
'Iniciamos la búsqueda por RFC
Dim RFCIni As String
RFCIni = "$D$7"
Dim RFCFin As String
Range(RFCIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
RFCFin = ActiveCell.Offset(-1, 0).Address

'Establecemos nuestro rango de búsqueda e iniciamos con la operación
ActiveWorkbook.Names.Add Name:="RanBusqRFC",
RefersToR1C1:=Range(RFCIni, RFCFin)
Application.Goto Reference:="RanBusqRFC"
Set BuskRFC = Selection.Find(What:=CveRFC, After:=ActiveCell,
LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns,
SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
'Si el RFC que ingresamos existe en nuestro catálogo, terminamos la
búsqueda
If Not BuskRFC Is Nothing Then
BuskRFC.Activate
Dim CveClisRFC As String
CveClisRFC = (ActiveCell.Offset(0, -3).Value)
Dim NomClisRFC As String
NomClisRFC = UCase(ActiveCell.Offset(0, -1).Value)
Dim ClaveRFC As String
ClaveRFC = UCase(ActiveCell.Value)
'Informamos a quién pertenece el RFC
MsgBox "Nombre del Cliente: " & NomClisRFC & Chr(13) &
"R.F.C.: " _
& ClaveRFC, vbInformation, "Resultados de la búsqueda"
Dim ResponseRFC
ResponseRFC = MsgBox("¿Es correcto?", vbYesNo +
vbQuestion, "Verificando información")
If ResponseRFC = vbYes Then
MsgBox "La clave del cliente es: " & CveClisRFC,
vbInformation, "Tome nota..."
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
Else
'Selection.FindNext (CveRFC)
Unload Me
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If
Else
'Pero si no encontramos nada informamos de ello
Unload Me
MsgBox "La clave de R.F.C. que ingresó no existe",
vbCritical, _
"R.F.C. no existe"
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If

Else
'Iniciamos la búsqueda por nombre

Dim NomIni As String
NomIni = "$C$7"
Dim NomFin As String
Range(NomIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
NomFin = ActiveCell.Offset(-1, 0).Address

'Establecemos nuestro rango de búsqueda e iniciamos con la
operación
ActiveWorkbook.Names.Add Name:="RanBusqNom", _
RefersToR1C1:=Range(NomIni, NomFin)
Application.Goto Reference:="RanBusqNom"
Set BuskNom = Selection.Find(What:=NomDen, After:=ActiveCell,
_
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False,
SearchFormat:=False)
'Si el nombre que ingresamos existe en nuestro catálogo,
terminamos la búsqueda
If Not BuskNom Is Nothing Then
BuskNom.Activate
Dim CveClisNom As String
CveClisNom = (ActiveCell.Offset(0, -2).Value)
Dim NomClisNom As String
NomClisNom = UCase(ActiveCell.Value)
Dim RFCsNom As String
RFCsNom = UCase(ActiveCell.Offset(0, 1).Value)
MsgBox "Nombre del Cliente: " & NomClisNom & Chr(13) &
"R.F.C.: " & _
RFCsNom, vbInformation, "Resultados de la búsqueda"
Dim ResponseNom
ResponseNom = MsgBox("¿Es correcto?", vbYesNo +
vbQuestion, "Verificando información")
If ResponseNom = vbYes Then
MsgBox "La clave del cliente es: " & CveClisNom, _
vbInformation, "Tome nota..."
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
Else
'Selection.FindNext (NomDen)
Unload Me
Sheets("CC").Visible = False
Sheets("Detalle").Activate
Exit Sub
End If
End If
End If
End Sub

Sabemos que si lo que ingresamos en alguno de los campos de texto no
se encuentra en la base de datos, el programa nos enviará un mensaje
de error notificándonos que lo que buscamos no existe, sin embargo si
encuentra algo nos notificará de lo que encontró y nos preguntará si
es eso lo que estábamos buscándonos, si el usuario contesta q sí, pues
ni nos preocupamos, pero si contesta q no, entonces lo correcto sería
que continúe con la búsqueda hasta que llegue al último registro y de
todos los registros ninguno sea el que el usuario estaba buscando,
llegado este punto el programa deberá indicar que no se encontró lo
que buscaba.
Espero haber sido un poco más claro esta vez.
Una vez más muchas gracias.

Saludos.
Respuesta Responder a este mensaje
#3 Héctor Miguel
12/06/2007 - 04:30 | Informe spam
hola, (...) ?

... puede ocurrir que no nos acordemos de todo el rfc completo... por lo que muchas veces solo pondremos los primero 10 digitos
... en este caso si podrian encontrarse varios resultados... es importante continuar... hasta encontrar el correcto o estar satisfechos
... userform sencillo, dos optionbutton y dos textbox, el primer optionbutton corresponde al rfc y el segundo al nombre
... se decide que tipo de búsqueda realizar, la eleccion de alguno de los tipos habilitara y deshabilitara alguno de los text box
... precisamente para ingresar la(s) palabra(s) a buscar...



1) si no te resulta inconveniente agregar un control de lista a tu formulario... podrias aprovechar la sugerencia anterior:
2) si existe la posibilidad de dos [o mas] *registros* iguales/parecidos/... [ya sea nombre o RFC]
[probablemente] te servira mas utilizar [auto]filtros [o avanzados] para llenar [p.e.] un cuadro de lista...
-> desde el cual podria seleccionarse *cual de todos* [los encontrados] es al que se necesita hacer referencia -?-





2) entre las ventajas de los filtros avanzados, encontraras *rapidez* ademas de codigos mas... *delgados* [mucho menos lineas] ;)
solo necesitaras *preparar* un rango para los criterios [donde depositaras la/s palabra/s de los textboxes]
y hacer que el codigo filtre todos los *coincidentes* [logicamente en un *rango de extraccion*]
y podras llenar el cuadro de lista y dejar que el ususario seleccione... segun corresponda :))

si cualquier duda... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 crx73
12/06/2007 - 16:07 | Informe spam
Disculpa, apenas anoche pude resolver el problema con la ayuda de
varias fuentes:
Es interesante lo que me propones, sin embargo ya todo estaba muy
avanzado y casi a terminar, asi que te presento parte del codigo
final:

Private Sub cmdOK_Click()
Dim CveRFC$, NomDen$

'Abrimos el Catálogo de Clientes
Sheets("CC").Visible = True
ActiveWorkbook.Sheets("CC").Activate
ActiveWindow.DisplayGridlines = False

'Asignamos el nombre CveRFC al valor del campo txtRFC
CveRFC = txtRFC.Value
'Asignamos el nombre NomDen al valor del campo txtNombre
NomDen = txtNombre.Value

If optBuscaRFC = True Then
'Iniciamos la búsqueda por RFC
Call BuscarRFC(CveRFC, NomDen)
Else
'Iniciamos la búsqueda por nombre
Call BuscarNombre(NomDen)
End If

Unload Me
Sheets("CC").Visible = False
Sheets("Detalle").Activate
End Sub
Private Sub BuscarRFC(CveRFC As String, NomDen As String)
Dim RFCIni$, RFCFin$, frstMatch$
Dim CveClisRFC$, NomClisRFC$, ClaveRFC$
Dim ResponseRFC%

RFCIni = "$D$7"
Range(RFCIni).Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
RFCFin = ActiveCell.Offset(-1, 0).Address

'Establecemos nuestro rango de búsqueda e iniciamos con la operación
ActiveWorkbook.Names.Add Name:="RanBusqRFC",
RefersToR1C1:=Range(RFCIni, RFCFin)
Application.GoTo Reference:="RanBusqRFC"

On Error GoTo NotFound

Selection.Find(What:=CveRFC, After:=ActiveCell, LookIn:=xlValues,
LookAt:=xlPart, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext,
MatchCase:=False, _
SearchFormat:=False).Activate
frstMatch = ActiveCell.Address

'Si el RFC que ingresamos existe en nuestro catálogo, comenzamos a
informar de los
'resultados
Do
With ActiveCell
CveClisRFC = .Offset(0, -3).Value
NomClisRFC = UCase(.Offset(0, -1).Value)
ClaveRFC = UCase(.Value)
End With
ResponseRFC = MsgBox("Nombre: " & NomClisRFC & vbCrLf & "R.F.C.: "
& ClaveRFC, _
vbYesNo + vbQuestion, "¿Es correcto?")
If ResponseRFC = vbYes Then
MsgBox "La clave del cliente es: " & CveClisRFC,
vbInformation, "Tome nota..."
Exit Sub
End If
Selection.Find(What:=CveRFC, After:=ActiveCell, LookIn:=xlValues,
LookAt:=xlPart, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext,
MatchCase:=False, _
SearchFormat:=False).Activate
Loop Until ActiveCell.Address = frstMatch
MsgBox "La entrada no arrojó resultados satisfactorios",
vbCritical, _
"Búsqueda fallida"
Exit Sub

'Pero si no encontramos nada informamos de ello
NotFound:
MsgBox "La clave de R.F.C. que ingresó no existe", vbCritical, _
"R.F.C. no existe"
Exit Sub
End Sub

Te agradezco mucho tu atención y tu apoyo.

Saludos cordiales,

Claudio Cruz.


Héctor Miguel ha escrito:
hola, (...) ?

> ... puede ocurrir que no nos acordemos de todo el rfc completo... por lo que muchas veces solo pondremos los primero 10 digitos
> ... en este caso si podrian encontrarse varios resultados... es importante continuar... hasta encontrar el correcto o estar satisfechos
> ... userform sencillo, dos optionbutton y dos textbox, el primer optionbutton corresponde al rfc y el segundo al nombre
> ... se decide que tipo de búsqueda realizar, la eleccion de alguno de los tipos habilitara y deshabilitara alguno de los text box
> ... precisamente para ingresar la(s) palabra(s) a buscar...

1) si no te resulta inconveniente agregar un control de lista a tu formulario... podrias aprovechar la sugerencia anterior:
>> 2) si existe la posibilidad de dos [o mas] *registros* iguales/parecidos/... [ya sea nombre o RFC]
>> [probablemente] te servira mas utilizar [auto]filtros [o avanzados] para llenar [p.e.] un cuadro de lista...
>> -> desde el cual podria seleccionarse *cual de todos* [los encontrados] es al que se necesita hacer referencia -?-

2) entre las ventajas de los filtros avanzados, encontraras *rapidez* ademas de codigos mas... *delgados* [mucho menos lineas] ;)
solo necesitaras *preparar* un rango para los criterios [donde depositaras la/s palabra/s de los textboxes]
y hacer que el codigo filtre todos los *coincidentes* [logicamente en un *rango de extraccion*]
y podras llenar el cuadro de lista y dejar que el ususario seleccione... segun corresponda :))

si cualquier duda... comentas ?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida