Error 13 al abrir formulario dando doble clic en una lista de otro formulario

Tengo dos formularios Form1 y Form 2.

En Form1 tengo una lista, Lista1, que toma sus valores de una consulta. La consulta tiene varios campos, entre ellos CveSolicitud, CveProcedimiento.

La CveSolicitud, siempre existe porque la registro antes en otro formulario, pero el procedimiento, cuyo ID es CveProcedimiento, se va a registrar en el Form2, entonces lo que quiero hacer, es que al hacer doble clic en la lista si no existe el procedimiento, abra el Form2 en un nuevo registro, y si ya existe que lo abra en la CveProcedimiento elegida de la lista.

Para esto tengo el código siguiente:

Dim idCve As Integer
Dim idProc As Integer
idCve = Me.Lista1.Column(0)
    If idCve = 0 Then Exit Sub
idProc = Me.Lista1.Column(11)
If idProc = 0 Then
    DoCmd.OpenForm "Form2", , , , acFormAdd
    Else
    idProc = Me.Lista1.Column(11)
    DoCmd.OpenForm "Form2", , , "[CveProcedimiento]=" & idProc, acFormEdit
End If

Cuando ya tengo CveProcedimiento funciona bien, sin embargo en la línea donde está la instrucción idProc = Me.Lista1.Column(11), si el procedimiento no existe (porque en la consulta sale vacío), truena y me marca error 13 en esa línea.

1 respuesta

Respuesta
-1

Has probado poniendo un If ..Then más o menos así, después del Else y antes de DoCmd:

idProc = Me.Lista1.Column(11)
   If IdProc <>"" Then
       DoCmd.OpenForm "Form2", , , "[CveProcedimiento]=" & idProc, acFormEdit
   Else
       MsgBox "No hay datos que mostrar",vbCritical,"CONJUNTO VACIO"
   End If
...

He reparado en que IdProc es un Integer, con lo que el If debe ser

If IdProc >0.....

Mis saludos >> Jacinto

El problema es que no entra al if, se detiene justo en la línea anterior, según entiendo compara 0 = "" en el IdProc = Me.Lista1.Column(11), Probé con not isnull, pero tampoco...

Rasave: ¿Qué tienes en la columna 11 de la lista?

El error 13 suele emitirlo Access cuando hay conflicto de Tipos de datos.

También podrias sondear con un DCount, contra la Tabla de datos del Form2 o un Dlookup

Quizá ésto te abra alguna puerta, porque quien mejor conoce la estructura eres tu mismo.

Mis saludos >> Jacinto

¡Gracias! al final salir a refrescarme bastó un poco, ja! En la columna consulto números, que son la clave principal de otra tabla, pero como no existía el registro pretendía crearlo, como lo que hacía el conflicto era el tratar de asignar a una variable el contenido de la columna que daba como resultado un vacío, lo que hice fue comparar directamente, sin variable, y así funcionó...

If Me.Lista1.Column(11) <> "" Then
    DoCmd.OpenForm "Form2", , , "[CveProcedimiento]=" & Me.Lista1.Column(11), acFormEdit
     Else
    DoCmd.OpenForm "Form2", , , , acFormAdd
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas