¿La combinación de código de VBA de acceso no funciona, problema con sub de salida? [cerrado]


0

Soy muy nuevo en VBA y parece que no puedo resolver este problema. Parece que debería ser un problema fácil de solucionar, simplemente no sé cómo.

Entonces, qué hace el código: en la forma principal es un registro. Este registro se copiará en otra tabla presionando un botón en el formulario. Antes de que comience la copia, el código verifica primero si el 'OMnummer' se ha completado en el subformulario. Si no, aparece un cuadro de mensaje que dice que el usuario debe completar el subformulario y el código deja de ejecutarse.

En segundo lugar, el código verifica si el registro ya está presente en la otra tabla. Si es así, aparece un cuadro de mensaje y el registro no se copiará. De lo contrario, el registro se copiará en la otra tabla.

Ambas piezas de código funcionan bien por separado. Sin embargo, cuando trato de incluir ambas piezas en el mismo submarino privado, solo funciona la primera. Puede ser algo con el código 'Exit Sub' o no estoy usando el If - Then correcto.

¡Espero que me pueda ayudar! Monika

Private Sub KnopProjectVersturen_Click()
On Error GoTo ErrProc

If IsNull(Me!Subform_OMnummers.Form!Omnr) Then
 If MsgBox("Vul het OMnummer in. Je kan het project niet exporteren zonder OMnummer.")     Then
      Exit Sub


   DoCmd.OpenQuery "Qry_Depo_ControleAanwezig"
 If DCount("Deponering.projectnummer", "Qry_Depo_ControleAanwezig") = 0 Then
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Qry_projectnaarDepot"
         DoCmd.OpenQuery "Qry_ToevoegProjectDepot"
        DoCmd.OpenForm "Depot_uitvoer", , , "[Projectnummer] = '" & Me![Projectnummer] & "' And [subID]=[subID]"
    Me.Status = 8
    DoCmd.Close acQuery, ("Qry_Depo_ControleAanwezig")
    DoCmd.SetWarnings True

Else
        MsgBox "Dit project bestaat al in de Depot_Uitvoer, verander de status in het projectformulier", vbInformation, "Example"
        DoCmd.Close acQuery, ("Qry_Depo_ControleAanwezig")



 End If
 End If
 End If



'Als er fouten zijn laat deze code een messagebox zien met het nummer en de melding.
 ExitProc:
 Exit Sub
 ErrProc:
    Select Case Err.Number
    Case Else
        MsgBox Err.Number & "--" & Err.Description
        Resume ExitProc
        End Select
End Sub

El código después de Exit Sub nunca se ejecuta, verifique dónde coloca End If -statements!

Gracias AKDADEVIL por tu respuesta! Leeré las ubicaciones de las declaraciones End If y mejoraré mis códigos en consecuencia. No me di cuenta de que la colocación era un problema.

use esto para la sangría de código: le mostrará los niveles y facilitará la coincidencia de if / endif y otras construcciones similares. Funciona en Office 2007 y 2010, pero el sitio web no los muestra
SeanC

Respuestas:


0

No hay condición para esa iffórmula con el cuadro de mensaje. Pruébalo

If IsNull(Me!Subform_OMnummers.Form!Omnr) Then
 if msgbox("foo",vbAbort,"error") = 3 then
 exit sub
 end if
end if

O no use el ifen la línea del cuadro de mensaje

If IsNull(Me!Subform_OMnummers.Form!Omnr) Then
 MsgBox("Vul het OMnummer in. Je kan het project niet exporteren zonder OMnummer.")
 Exit Sub
end if

Queridos todos, muchas gracias por sus respuestas y lamento mucho la publicación cruzada. No me di cuenta de que los dos foros estaban conectados. Raystafarian, gracias por tu código. Lo intenté, pero no funcionó. Funcionó sin el If en la línea del cuadro de mensaje: Matzone me arregló el código en el lugar en el que escribí: stackoverflow.com/questions/17830433/… . ¡Así que gracias a todos! Me salvó el día :) Me estaba poniendo muy gruñón.
Monika

@Monika, necesitarías dos end ifen el primer fragmento de código. necesitas cerrarlos a los dos, simplemente no incluí el primero allí, así que no lo cerré. Edité para incluirlo, en caso de que desee solicitar al usuario.
Raystafarian

1

No estoy tan seguro ... pero puedes probar esto ...

Private Sub KnopProjectVersturen_Click()
On Error GoTo ErrProc


'This is the first part of the code checking if the subform has been filled in

If IsNull(Me!Subform_OMnummers.Form!Omnr) Then
  MsgBox("Vul het OMnummer in. Je kan het project niet exporteren zonder OMnummer.")
  Exit Sub
End If    


'This is the second part of the code, checking if the record exists in the other table and then copying part of the record

DoCmd.OpenQuery "Qry_Depo_ControleAanwezig"
If DCount("Deponering.projectnummer", "Qry_Depo_ControleAanwezig") = 0 Then
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "Qry_projectnaarDepot"
    DoCmd.OpenQuery "Qry_ToevoegProjectDepot"
    DoCmd.OpenForm "Depot_uitvoer", , , "[Projectnummer] = '" & Me![Projectnummer] & "' And [subID]=[subID]"
    Me.Status = 8
    DoCmd.Close acQuery, ("Qry_Depo_ControleAanwezig")
    DoCmd.SetWarnings True

Else
    MsgBox "Dit project bestaat al in de Depot_Uitvoer, verander de status in het projectformulier", vbInformation, "Example"
    DoCmd.Close acQuery, ("Qry_Depo_ControleAanwezig")

End If    


'Als er fouten zijn laat deze code een messagebox zien met het nummer en de melding.
 ExitProc:
 Exit Sub
 ErrProc:
 Select Case Err.Number
 Case Else
    MsgBox Err.Number & "--" & Err.Description
    Resume ExitProc
    End Select
 End Sub

Querido Matzone, ¡gracias, eso funciona como un sueño! Entonces, si entiendo correctamente, ¿el problema radica en la declaración If con el primer cuadro de mensaje?

@ user2613982 ... sí, está en tu IFbloque ... Entonces, no olvides hacer una marca verde debajo del signo de
voto negativo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.