Dans mon exemple avec vbOKCancel, la réponse 1 est "OK".
J'ai mis "ByRef" mais ce n'est peut-être pas obligatoire. Je l'ai mis par précaution.
On a le choix entre ByRef et ByValue. Je ne sais pas ce qui est pris par défaut, quand on ne l'indique pas explicitement.
Si c'était ByValue cela n'irait pas car le contenu de la variable Cancel serait mise sur la pile et donnée à la subroutine, qui ensuite la modifierait. Dans ce cas, après le déroulement de la subroutine, le programme appelant ne verrait pas le changement, car par convention, un programme appelant ne va pas récupérer le contenu d'une variable sur la pile.
Alors que si la variable Cancel est passée ByRef, alors c'est son adresse qui est mise sur la pile et donnée à la subroutine, qui ensuite va modifier la donnée qui se trouve à l'adressse indiquée sur la pile. Dans ce cas, après le déroulement de la subroutine, le programme appelant voit le changement du contenu de la variable Cancel.