Se dañó el código

10/10/2007 - 13:43 por GRIEGO59 | Informe spam
Tengo un código espectacular que me suministró Hector Miguel en este foro.
Funcionaba muy bien hasta que yo agregué las columnas J,K,L,M,N,O,P,Q.

Cuando intruduzco un serial inexistente me da:
Error 13 en tiempo de ejecución, no coinciden los tipos.

Estuve revisando el código para intentar *ampliar el rango?* pero, la
verdad, no consegí ese rango.

El código que tengo es el siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Msj As String
If Intersect(Target, Range("e2,b4:b18")) Is Nothing Then Exit Sub
If IsEmpty(Target) Then Exit Sub
With Worksheets("clientes")
If Target.Address <> "$E$2" Then GoTo Seriales
If Not Evaluate("iserror(c2)") Then Exit Sub
If MsgBox("El codigo solicitado: " & Target & " NO existe..." & vbCr & _
"Confirmas que debe darse de alta ?", vbYesNo, _
"Alta de clientes...") = vbNo Then Exit Sub
SendKeys "{down " & Application.CountA(.[a:a]) - 1 & "}" & Target & "{tab}"
.ShowDataForm
.[a:b].Sort Key1:=.[a2], Order1:=xlAscending, Header:=xlYes
Target.Select
Exit Sub
End With
Seriales:
If Application.CountIf([b4:b18], Target) > 1 Then Msj = " esta duplicado !!!"
If Application.VLookup(Target, Worksheets("compras").[a:g], 7, 0) > 0 _
Then Msj = " es un producto YA facturado !!!"
If Msj <> "" Then MsgBox "El serial " & Target & Msj: Target.ClearContents
End Sub

Actualmente el código hace cuatro cosas
1- al escribir en un número de cédula de cliente inexistente en la hoja
"clientes" abre mensaje y pregunta si desea crearlo, y abre formulario para
crearlo.
2- al escribir un serial ya escrito en la hoja actual (hoja "facturadeventa)
abre mensaje y evita el registro.
3- al escribir un serial vendido (según hoja "compras") abre mensaje y evita
el registro.
4- al escribir un serial inexistente (según hoja "compras") abre mensaje de
aviso, y evita el registro. Es aquí donde me da el error al introducir un
serial inexistente.

Información adicional:
Hoja "facturadeventas"
E2 múmero de cédula cliente
C2 Fórmula VBuscar nombre del cliente en hoja "clientes"
B4:B18 seriales vendidos en esa factura
C4:C18 Fórmula Vbuscar descripción del producto en hoja "compras"

Hoja "clientes"
A1 Título Número de cédula cliente
A2 título Nombre cliente

Hoja "compras"
A1 Título Serial del producto
D1 Título Descripción del producto
G1 Título Fecha de venta
H1 Título Número de factura de venta
I1 Título Precio de venta final

Espero que puedan ayudarme por favor y disculpen lo seguido.

Griego59

Preguntas similare

Leer las respuestas

#11 GRIEGO59
12/10/2007 - 14:58 | Informe spam
Ahi va...
www.geocities.com/griego59
Saludos
Darío.



"Héctor Miguel" escribió:

hola, Darío !

(con los datos conocidos hasta ahora)... lo unico que me resta por suponer...
es lo que te comentaba en el punto 4 de un anterior mensaje:

"4) la otra posibilidad, es que en la columna G de la hoja "compras", las fechas (ventas anteriores) NO sean *valor* (sino texto ?)"

creo que va siendo hora de "ver" este ya famoso archivo :))

podrias subirlo en algun sitio de hospedaje publico/gratuito/... para que lo pueda obtener quien desee participar ?
(y/o enviame una copia en .ZIP/.RAR/... a la direccion de este remitente QUITANDO el "NO...SPAM...PLS")

saludos,
hector.



Respuesta Responder a este mensaje
#12 Héctor Miguel
13/10/2007 - 04:20 | Informe spam
hola, Darío !

Ahi va... www.geocities.com/griego59



1) (lo dicho)... el error salta cuando existen "diferencias" entre:
- "que" buscas (el "serial" como dato parcial o completo)
- "como" lo introduces (en el rango b4:b18 de la hoja "facturadeventas")
- "como" esta almacenado en la hoja "compras"

2) ambos grupos de celdas (columna A en "compras" y en rango b4:b18 en "facturadeventas")
- tienen formato de texto

3) la falla en el codigo es que el primer "filtro" (CountIf) si considera como encontrado "9" <-> "00009"
pero la busqueda (VLookup...0) ya no encuentra un serial con (solo) el digito "9"

4) para corregir es necesario modificar el primer "filtro" en el codigo...
de: -> If Application.CountIf(.[a:a], Target) Then
a: -> If Not IsError(Application.Match(Target, .[a:a], 0)) Then

5) lo anterior significa que (ya)no podras buscar introduciendo el serial "9" (en b4:b18 de "facturadeventas")
si lo que esta almacenado (en la columna A de "compras") es "00009"

saludos,
hector.
Respuesta Responder a este mensaje
#13 GRIEGO59
13/10/2007 - 12:46 | Informe spam
Mil gracias amigo : )
Me funcionó.

Saludos
Darío.




"Héctor Miguel" escribió:

hola, Darío !

> Ahi va... www.geocities.com/griego59

1) (lo dicho)... el error salta cuando existen "diferencias" entre:
- "que" buscas (el "serial" como dato parcial o completo)
- "como" lo introduces (en el rango b4:b18 de la hoja "facturadeventas")
- "como" esta almacenado en la hoja "compras"

2) ambos grupos de celdas (columna A en "compras" y en rango b4:b18 en "facturadeventas")
- tienen formato de texto

3) la falla en el codigo es que el primer "filtro" (CountIf) si considera como encontrado "9" <-> "00009"
pero la busqueda (VLookup...0) ya no encuentra un serial con (solo) el digito "9"

4) para corregir es necesario modificar el primer "filtro" en el codigo...
de: -> If Application.CountIf(.[a:a], Target) Then
a: -> If Not IsError(Application.Match(Target, .[a:a], 0)) Then

5) lo anterior significa que (ya)no podras buscar introduciendo el serial "9" (en b4:b18 de "facturadeventas")
si lo que esta almacenado (en la columna A de "compras") es "00009"

saludos,
hector.



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