Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

error 13

Estas en el tema de error 13 en el foro de Visual Basic clásico en Foros del Web. hola! alguien me puede ayudar? tengo un programa donde vchildcomp as variant (es un object() )se va cargando. el caso es q cuando le doy ...
  #1 (permalink)  
Antiguo 25/11/2008, 07:02
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
error 13

hola! alguien me puede ayudar?
tengo un programa donde vchildcomp as variant (es un object() )se va cargando. el caso es q cuando le doy a ejecutar me marca los siguiente y me pone error 13:no coinciden los tipos.
For i = 0 To UBound(vChildComp)
pero al ejecutaro x segunda vez no me da ningun problema y me funciona bien.
el caso es q en la primera ejecucion no se me carga el array y x eso me da el error xq vchildcomp esta vacio. xq en la primera ejecucion no me carga el array y en la segunda si?

gracias x adelantado!
  #2 (permalink)  
Antiguo 25/11/2008, 07:06
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: error 13

Antes del bucle For prueba poner algo como esto:
Código vb:
Ver original
  1. If vChildComp = Empty Then Exit Sub
O sea, en caso de que vChildComp esté vacío salir del procedimiento.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 25/11/2008, 07:28
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: error 13

ahora no me da error pero ni dando a ejecutar dos veces me hace bien.
he probado con if vchildcomp=empty then go to q llame otra vez al procedimiento, pero parace ser q vchildcomp siempre es =empty y se me queda pillado.
no le veo la logica...
  #4 (permalink)  
Antiguo 25/11/2008, 08:25
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 6 meses
Puntos: 6
Respuesta: error 13

Por que no haces un Debug y te bas paso a paso y ahi pruebas que valor tiene vchildcomp.
posicionate en la linea donde tienes esa variable y le das F9, Posteriormente F5 para corre el programa y con F8 te vas paso a paso y ahi te vas a dar cuenta como corre el programa y si te esta haciendo la operación correcta es la forma mas facil de saber si se estan ejecutando bien tus procedimientos.

espero no haberte enredado.
  #5 (permalink)  
Antiguo 25/11/2008, 08:25
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: error 13

Después de llamar a la función que retorna el array. Coloca esto:
Código vb:
Ver original
  1. MsgBox TypeName(vChildComp)
Así sabremos qué es lo que devuelve cuando no retorna un array.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 25/11/2008, 09:05
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: error 13

Cita:
Iniciado por SalomonSab Ver Mensaje
Por que no haces un Debug y te bas paso a paso y ahi pruebas que valor tiene vchildcomp.
posicionate en la linea donde tienes esa variable y le das F9, Posteriormente F5 para corre el programa y con F8 te vas paso a paso y ahi te vas a dar cuenta como corre el programa y si te esta haciendo la operación correcta es la forma mas facil de saber si se estan ejecutando bien tus procedimientos.

espero no haberte enredado.
si lo estoy ejecutando el programa con el F8 paso a paso y he visto q el ultimo componente del array se salta el for. una cosa muy rara...
  #7 (permalink)  
Antiguo 25/11/2008, 09:10
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: error 13

Cita:
Iniciado por David el Grande Ver Mensaje
Después de llamar a la función que retorna el array. Coloca esto:
Código vb:
Ver original
  1. MsgBox TypeName(vChildComp)
Así sabremos qué es lo que devuelve cuando no retorna un array.
si lo estaba usando y me devuelve object(). ahora como le he dixo a salomon sab el ultimo componente del array se salta el for. no se creo q estare metiendo la pata en las llamadas de los objetos. estoi probando codigos diferentes. con lo q sea ya os aviso.
muchas gracias a los dos!
  #8 (permalink)  
Antiguo 25/11/2008, 09:34
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: error 13

¿En qué sentido dices que "salta"?. Y, a lo que me refería con el TypeName era al valor que tenía cuando se producía el error.

¿Puedes poner el código completo de la función?. Será más fácil ver el error.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 26/11/2008, 08:04
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: error 13

hola de nuevo!perdonen el retraso...
tengo el siguiente procedimiento recursivo:
Sub hijos(swComp As object)

Dim vChildComp As Variant 'object ()
Dim i As Integer
Dim swChildComp As object

vChildComp = swComp.GetChildren 'se llena el array con unos objetos
For i = 0 To UBound(vChildComp)
Set swChildComp = vChildComp(i)

swChildComp.ReferencedConfiguration = a

hijos swChildComp
Next i

cuando vchildcomp=empty (el typename q tenia cuando me daba el error) no entra en el bucle.
el caso es q una vez dentro de la funcion hijos, cuando vuelve a llamar a la misma funcion puede q vchildcomp=empty. en este caso entraria en el bucle con el siguiente object del array q ha cargado en la primera vuelta y continuaria bien.
mi problema es q a veces vchildcomp=empty cuando no lo es, es decir, aun habiendo objetos el array no los carga. pero al ejecutar por segunda vez si los carga.debe de ser algun problema del programa de donde 'exporto' los objetos.

x lo menos se soluciono lo del error 13!
muchas gracias!
  #10 (permalink)  
Antiguo 26/11/2008, 09:49
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: error 13

problema solucionado!

estaba cogiendo un string de la casilla A1 de excel.y cuando le daba a un command button se ejecutaba el programa. el caso es q despues de escribir en la celda A1 hay q darle a return para q en a (la variable string q he definido en vb para coger el valor de la casilla A1) se guarde el valor. a veces como no le daba a return no se asignaba el string a la variable por lo q no se ejcutaba del todo bien el programa.
puede ser ese el problema?...ahora dandole a return antes q clickar el command button me hace bien.

saludos!

Última edición por ebu; 26/11/2008 a las 10:14
  #11 (permalink)  
Antiguo 27/11/2008, 02:21
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: error 13

estaba confundida...
el error es el siguiente:

vChildComp = swComp.GetChildren
For i = 0 To UBound(vChildComp)

el vchildcomp es un array donde se carga datos tipo object. aqui viene lo raro; a veces los carga y otras veces no.entonces si no los carga q vaya a un procedimiento llamado sw y si los carga q siga con el bucle for.
he probado las siguientes opciones y me dan los siguientes errores:

vChildComp = swComp.GetChildren
If vChildComp = Empty Then sw
Else 'error de compilacion:else sin if.
For i = 0 To UBound(vChildComp)
...
End if

vChildComp = swComp.GetChildren
Select Case vChildComp
Case Empty 'error 13:no coinciden los tipos
sw
Case Not Empty
For i = 0 To UBound(vChildComp)
....
End select

con el select case se pueden usar object? yo creo q puede dar error x eso.
alguien sabe xq no son validas estas opciones?
gracias de antemano!
  #12 (permalink)  
Antiguo 27/11/2008, 20:09
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: error 13

Prueba así:
Código vb:
Ver original
  1. If IsEmpty(vChildComp) Then 'Si está vacío
  2.   sw 'Ejecutar el otro Sub
  3.   Exit Sub 'Salir del procedimiento actual
  4. End If
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Última edición por David; 27/11/2008 a las 20:25
  #13 (permalink)  
Antiguo 28/11/2008, 04:47
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: error 13

gracias david, sq me faltaba en exit sub. q diferencia hay entre:
If IsEmpty(vChildComp) Then
sw
Exit Sub
end if
for i=...
y
If IsEmpty(vChildComp) Then
sw
end if
for i=...

(lo he probado yo primero pero me gustaria q me corrigierais si no estoy en lo cierto).
de los end sub de otros procedimientos, cuando llega al procd. donde esta este if salta al exit sub y de hay al end sub. si no estuviese el exit sub entraria en el bucle for.
pero no me queda del todo claro: una vez ejecutado el procedimiento como es q si no le pones el exit sub sigue ejecutando?..
gracias de nuevo!
  #14 (permalink)  
Antiguo 28/11/2008, 09:41
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: error 13

Sí, es así. Exit Sub simplemente indica que debe Exit (Salir) del Sub. O sea, si colocas Exit Sub sale sin ejecutar el resto del código (en este caso el bucle For). Si no colocas, el resto se ejecuta.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #15 (permalink)  
Antiguo 28/11/2008, 09:59
ebu
 
Fecha de Ingreso: noviembre-2008
Mensajes: 153
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: error 13

Cita:
Iniciado por David el Grande Ver Mensaje
Sí, es así. Exit Sub simplemente indica que debe Exit (Salir) del Sub. O sea, si colocas Exit Sub sale sin ejecutar el resto del código (en este caso el bucle For). Si no colocas, el resto se ejecuta.
gracias, x la aclaracion!
saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:36.