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

#6 Héctor Miguel
11/10/2007 - 05:18 | Informe spam
hola, Darío !

Parce que cuando introduzco seriales con tres o menos digitos da error 13
y sobresalta estas lineas del codigo. Del resto funciona espectacular:

If Application.VLookup(Target, .[a:g], 7, 0) > 0 _
Then

Mis codigos tienen formato "texto".



1) para llegar a la linea que mencionas, el codigo paso por un filtro en la linea anterior:
-> If Application.CountIf(.[a:a], Target) Then
linea que ha comprobado que en la columna A de la hoja "compras" existe (al menos) un serial (Target)

2) si el serial introducido en el Target NO pasa el filtro, el codigo salta a la linea Else (mensaje: no existe el seriel en Target)

3) lo he vuelto a comprobar con *seriales* en valores numericos y/o con *seriales* que son textos
-> (probablemente) convendria si comentas que tipo de *seriales* (valor-numero-texto) estas usando -?-
y/o el formato aplicado a la columna A de la hoja "compras" y al rango B4:B18 de la hoja "facturadeventas"

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

comentas (si hubiera) algun detalle mas descriptivo (o cambios en el arreglo y tipo de datos en las hojas) ?
saludos,
hector.
Respuesta Responder a este mensaje
#7 GRIEGO59
11/10/2007 - 06:57 | Informe spam
Hola Hector!
Por las dudas seleccioné completa la columna “a” de la hoja “compras” y le
asigné formato de texto, hice lo mismo con el rango b4:b18, y la columna “g”
de la hoja “compras” (fecha de venta) la seleccioné completa y asigné formato
de fecha (*14/03/2001).

Las hojas están desbloqueadas.

El error 13 aparece cuando escribo seriales desde 0 hasta 2006, a partir de
2007 aparece el mensaje de serial inexistente.
Si escribo desde 00000 hasta 02006 funciona bien y con 02007 funciona bien
con el mensaje de serial inexistente.

Mis seriales son así:
00000
00001
00002
00003
Sigue…
02004
02005
02006
Apartado00025A
Apartado00025B
Apartado00080A
Apartado00080B
Sigue…
Correas00001
Correas00002
Correas00003
Sigue…
Irlanda001
Irlanda002
Irlanda003
Sigue…
Sincódigo001
Sincódigo002
Sincódigo003
Sigue…


Por las dudas te muestro este otro código que tengo en la hoja
“facturadeventas”:

Sub Macro5()
Worksheets("compras").Unprotect "oxxx"
Worksheets("facturadeventas").Unprotect "oxxx"
'
' Macro5 Macro
' Macro grabada el 13/09/2007 por GRIEGO59
'

Dim Fila As Byte: Application.ScreenUpdating = False
With Worksheets("facturadeventas")
For Fila = 4 To Application.CountA(.Range("b4:b18")) + 3
Worksheets("compras").Range("a:a") _
.Cells.Find(.Range("b" & Fila), Range("a1"), xlValues, xlWhole).Offset(, 6) _
.Resize(, 3) = Array(.Range("b2").Value, .Range("a2").Value, .Range("d" &
Fila).Value)
Next
.Range("a2,e2,b4:b18,d22:d36").ClearContents
End With
Worksheets("compras").Protect "oxxx"
Worksheets("facturadeventas").Protect "oxxx"
Worksheets("clientes").Protect "oxxx"
End Sub


Gracias por tu ayuda!!!
Saludos
Darío



"Héctor Miguel" escribió:

hola, Darío !

> Parce que cuando introduzco seriales con tres o menos digitos da error 13
> y sobresalta estas lineas del codigo. Del resto funciona espectacular:
>
> If Application.VLookup(Target, .[a:g], 7, 0) > 0 _
> Then
>
> Mis codigos tienen formato "texto".

1) para llegar a la linea que mencionas, el codigo paso por un filtro en la linea anterior:
-> If Application.CountIf(.[a:a], Target) Then
linea que ha comprobado que en la columna A de la hoja "compras" existe (al menos) un serial (Target)

2) si el serial introducido en el Target NO pasa el filtro, el codigo salta a la linea Else (mensaje: no existe el seriel en Target)

3) lo he vuelto a comprobar con *seriales* en valores numericos y/o con *seriales* que son textos
-> (probablemente) convendria si comentas que tipo de *seriales* (valor-numero-texto) estas usando -?-
y/o el formato aplicado a la columna A de la hoja "compras" y al rango B4:B18 de la hoja "facturadeventas"

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

comentas (si hubiera) algun detalle mas descriptivo (o cambios en el arreglo y tipo de datos en las hojas) ?
saludos,
hector.



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

__ 1 __
Por las dudas seleccione completa la columna "a" de la hoja "compras" y le asigne formato de texto
hice lo mismo con el rango b4:b18, y la columna "g" de la hoja "compras" (fecha de venta)
la seleccione completa y asigne formato de fecha (*14/03/2001)...



1) OJO: al rango que le asignes un formato (numerico) de texto, almacenara la entrada exactamente como se haga
y no podra ser utilizado para buscar valores (verdaderamente) numericos (ten cuidado en el rango de las fechas)
ademas, al cambiar entre formato texto y otro "numerico", el cambio solo surte efecto al re/editar/entrar cada celda

__ 2 __
El error 13 aparece cuando escribo seriales desde 0 hasta 2006, a partir de 2007 aparece el mensaje de serial inexistente.
Si escribo desde 00000 hasta 02006 funciona bien y con 02007 funciona bien con el mensaje de serial inexistente.



2) (ocasionalmente) excel puede resolver "conflictos" entre valores "textuales" y valores "numericos"
(cuando las circunstancias se lo permiten) lo que no es una "certeza" de que siempre funcionara si...
buscando p.e. 2006 lo puede encontrar si esta almacenado como 02006 (celda con formato de texto ?)

aunque no es claro si el dato "seriales" en las hojas de busqueda los entraste realmente como 00001
(o solo aplicas ceros en la vista del formato, dando entrada a 1 y que se muestre como 00001)
-> revisa lo que aplica y afecte al tema de las fechas -???-

saludos,
hector.
Respuesta Responder a este mensaje
#9 GRIEGO59
12/10/2007 - 06:33 | Informe spam
Hola Hector!
En el caso de mis seriales
2006 no es lo mismo que 02006, son diferentes.
Cuando posiciono cursor en la celda del serial 00201 la barra de fórmulas
muestra “00201” no muestra “201”
Si yo escribo en la hoja “facturadeventas” el serial 201, solamente quiero
encontrar el serial 201 y no el 00201.
En cuanto a la columna fecha, pues ordené las fechas con la esperanza de que
si existe una fecha incorrecta, aparecerá de primera o de última y las celdas
que aún no tienen fecha, las marqué todas y suprimí de manera de evitar que
existan espacios en blanco en esas celdas.
Todos los seriales que no llevan letras es decir, desde 00000 hasta 02006
tienen un triangulo verde pequeño en la esquina superior izquierda de la
celda y a la derecha el rombito amarillo con el signo de exclamación y el
mensaje “el numero de esta celda tiene formato de texto o va precedido por un
apóstrofo”
Por las dudas cambié el formato de texto de los seriales por formato de
número y suprimé todas las fechas de la columna fecha y continua el error 13
el depurador muestra resaltado en amarillo lo siguiente
If Application.VLookup(Target, .[a:g], 7, 0) > 0 _
Then

Exitos y Saludos cordiales,
Griego59


"Héctor Miguel" escribió:

hola, Darío !

__ 1 __
> Por las dudas seleccione completa la columna "a" de la hoja "compras" y le asigne formato de texto
> hice lo mismo con el rango b4:b18, y la columna "g" de la hoja "compras" (fecha de venta)
> la seleccione completa y asigne formato de fecha (*14/03/2001)...

1) OJO: al rango que le asignes un formato (numerico) de texto, almacenara la entrada exactamente como se haga
y no podra ser utilizado para buscar valores (verdaderamente) numericos (ten cuidado en el rango de las fechas)
ademas, al cambiar entre formato texto y otro "numerico", el cambio solo surte efecto al re/editar/entrar cada celda

__ 2 __
> El error 13 aparece cuando escribo seriales desde 0 hasta 2006, a partir de 2007 aparece el mensaje de serial inexistente.
> Si escribo desde 00000 hasta 02006 funciona bien y con 02007 funciona bien con el mensaje de serial inexistente.

2) (ocasionalmente) excel puede resolver "conflictos" entre valores "textuales" y valores "numericos"
(cuando las circunstancias se lo permiten) lo que no es una "certeza" de que siempre funcionara si...
buscando p.e. 2006 lo puede encontrar si esta almacenado como 02006 (celda con formato de texto ?)

aunque no es claro si el dato "seriales" en las hojas de busqueda los entraste realmente como 00001
(o solo aplicas ceros en la vista del formato, dando entrada a 1 y que se muestre como 00001)
-> revisa lo que aplica y afecte al tema de las fechas -???-

saludos,
hector.



Respuesta Responder a este mensaje
#10 Héctor Miguel
12/10/2007 - 06:56 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida