2010-11-29 29 views
0

Je voudrais avoir deux boîtes de msg oui/non. Le premier pour enregistrer le formulaire et le second pour l'impression. Bien que le code suivant fonctionne:DoCmd.OpenReport Frm, acViewNormal ne fonctionne pas après vbYes Alors ... pourquoi?

Private Sub CmdPrint_Click() 
    DoCmd.OpenReport Frm, acViewNormal 
End Sub 

Il ne fonctionne pas dans un oui/non MsgBox, il semble que les informations ne sont pas analysées.

Je ne suis pas un programmeur, mais j'aime apprendre, probally il est mauvais de tous les côtés: D

Private Sub Form_BeforeUpdate(Cancel As Integer) 

    If MsgBox("Je staat op het punt de ingevoerde gegevens op te slaan." & vbCrLf & vbCrLf & "Weet je zeker dat je dit formulier wilt opslaan?", vbYesNo, "Gegevens opslaan") = vbYes Then 
    DoCmd.Save 
    Else 
    DoCmd.RunCommand acCmdUndo 
    End If 

    If IsNull(Me.WrkOrdr) = True Then 
    Me.WrkOrdr = Val(Nz(DMax("[WrkOrdrNr]", "WrkPlts"), "0")) + 1 
    ''# or Me.txt2BookNumber = CLng(Nz(DMax("[BookNumber]", "Participant"), "0")) + 1 
    End If 

    If MsgBox("Je staat op het punt dit formulier uit te printen." & vbCrLf & vbCrLf & "Weet je zeker dat je dit formulier wilt uitprinten?", vbYesNo, "Formulier printen") = vbYes Then 
    DoCmd.OpenReport Frm, acViewNormal 
    Else 
    Exit Sub 
    End If 
End Sub 

Répondre

1

Avez-vous renforcé dans le code - mis un point d'arrêt en appuyant sur F9 sur une ligne de code, appuyez sur F8 pour exécuter chaque ligne? Quand vous faites, frm a-t-il une valeur? Vous pouvez vérifier en passant la souris dessus, ou en tapant? Frm dans la fenêtre immédiate (ctrl + G pour basculer la fenêtre immédiate). Il doit renvoyer une chaîne, car le nom du rapport doit être une chaîne. Je suppose que vous voulez dire soit frm.Name ou Me.name, si vous n'avez pas déjà dit que votre test d'origine a fonctionné.

BTW pour cela:

If IsNull(Me.WrkOrdr) = True Then 

Pourquoi ne pas utiliser ceci:

If IsNull(Me.WrkOrdr) Then 

De plus, je ne voudrais pas trop compter sur:

DoCmd.Save 

Et:

DoCmd.RunCommand acCmdUndo 

La valeur par défaut pour l'accès est d'enregistrer et il y a un certain nombre de choses qui vont arrêter d'annuler de travailler de la manière que vous attendez.

+0

ok merci, je suis un noob complet à vba, ce qui serait une meilleure solution. – Chris

0

code Vous semble bon.

Essayez d'ajouter

Dim ans As Integer 
ans = MsgBox("ja of nee?", vbYesNo) 
MsgBox ("ans=" & ans & " vbyes=" & vbYes & " vbno=" & vbNo) 

et voir ce que le résultat est