بعد تجربة المرفق ، والتمعن فيه ، مشكلتك أخي الكريم في الجزء :-
ElseIf vbNo Then
السبب طبعاً أنه لا يفحص نتيجة رد الرسالة الكلي ، بل يعتبر vbNo قيمة ثابتة . وبالتالي يدخل إليه دائماً إذا لم تكن النتيجة vbYes .
لذا فالأفضل من وجهة نظري ، والأصح هو استخدام Select Case في حالتك هذه . خلاف ذلك قد نضطر لاستخدام الرسالة مرتين في الجملة الشرطية ، وهذا سيكرر الرسالة مرتين داخل نفس الحدث . لذا جرب الفكرة التالية :-
Private Sub أمر0_Click()
Select Case MsgBox("ماذا تريد ان تفعل Yes فتح نموذج NO فتح تقرير Cancel تراجع" & vbCrLf & vbCrLf & "الحمدلله", _
vbYesNoCancel + vbCritical + vbMsgBoxRight + vbMsgBoxRtlReading, _
"الله المستعان")
Case vbYes
DoCmd.OpenForm "22"
Case vbNo
DoCmd.OpenReport "33", acViewPreview
Case vbCancel
Exit Sub
End Select
End Sub