2010-07-27 5 views
1

J'ai une petite application à choix multiple. Il y a 4 coches vertes et 4 x rouges qui apparaîtront en fonction de la bonne réponse ou de la mauvaise réponse. Tout d'abord, ils ne sont pas visibles et se trouvent à des endroits précis sur le formulaire. Ainsi, lorsqu'ils deviendront visibles, ils seront comme une coche verte s'ils sont placés juste à côté de leur réponse et une coche rouge suivra. à leur réponse s'ils se trompent.Passage d'objets de formulaire aux sous-réseaux/fonctions VBA dans MS-Access

J'ai décidé de faire une sous-procédure qui accepte trois arguments, leur réponse ("A", "B", "C" ou "D"), la référence d'image verte pour rendre visible et la référence rendre visible.

Malheureusement, je ne peux pas les faire passer les références du tout. L'intellisense sait de quels objets je parle.

Private Sub btnA_Clicked() 
    Question_Answered("A", imgGreenA, imgRedA) 'images referenced from form' 
End Sub 

Private Sub Question_Answered (strUserAnswer as String, imgGreen as Image, imgRed as Image) 
    ... 
End Sub 

Un autre problème (probablement lié) est que je ne peux pas affecter les images de la forme de variables locales dans ce sous Question_Answered, comme ceci:

Dim imgGreen as Image 
imgGreen = imgGreenA 

Utilisation de MS-Access 2003 MDB avec MS-Access 2007

Répondre

2

L'appel d'une fonction VBA avec un objet de contrôle fonctionne sans problème. Avez-vous écrit votre fonction sous la même forme ou dans un module?

Pour affecter une variable de contrôle, vous devez utiliser set, il s'agit donc de Set imgGreen = imgGreenA.

+0

Les sous-marins sont dans le même code VBA. Le btnA_Clicked est généré par Access, mais le sous-question interrogé est écrit à la main par moi-même. – Nitrodist

+0

Si vous êtes sous la même forme, vous n'avez pas besoin de passer le contrôle, car il est disponible de toute façon! – dwo

+0

mais dwo il essaye de passer à la même fonction pour le traitement logique pour l'objet différent sur la forme principale. – dmc2005

0

Si vous obtenez une erreur lorsque le sous est appelé le,

Change: Question_Answered("A", imgGreenA, imgRedA)

Pour: Question_Answered strUserAnswer:="A", imgGreen:=imgGreenA, imgRed:=imgRedA

+0

Pas besoin d'ajouter les noms de paramètres - supprimez simplement les parens, c'est-à-dire, Question_Answered "A", imgGreenA, imgRedA –

1

Avez-vous essayé

Private Sub Question_Answered (strUserAnswer as String, ByRef imgGreen as Image, ByRef imgRed as Image) 
    ... 
End Sub 

et aussi essayer d'écrire l'appel déclaration sans crochets, j'ai eu des problèmes avec VBA ne pas passer des références lorsque les choses sont/ne sont pas entre parenthèses. par exemple.

Private Sub btnA_Clicked() 
    Question_Answered "A", imgGreenA, imgRedA 'images referenced from form' 
End Sub 

et comme HansUp dit que vous n'avez pas besoin (ou si vous voulez) pour re-dim imgGreen lorsqu'il se trouve dans Question_Answered

1

Puisque vous ne publiez pas le contenu de votre sous-programme Question_Answered(), il est impossible de dites quel est le problème, mais la première chose qui me vient à l'esprit est que vous avez déclaré les images comme des images plutôt que comme des contrôles. Une image n'est jamais directement sur un formulaire, mais encapsulée dans un contrôle d'image, de sorte que le contrôle avec lequel vous allez travailler ne sera pas une image du tout.

Alors:

Private Sub Question_Answered (ByVal strUserAnswer As String, ByRef imgGreen As Control, ByRef imgRed As Control) 

Maintenant, je peux me tromper là-bas, mais il est un endroit pour commencer.

(note aussi que je suis explicite à appeler ByRef ou ByVal)

0

J'ai eu le même problème et je l'ai résolu en utilisant « comme objet » dans l'interface sous.Essayez ceci:

Private Sub btnA_Clicked() 
     Question_Answered("A", imgGreenA, imgRedA) 'images referenced from form' 
    End Sub 

    Private Sub Question_Answered (strUserAnswer as String, imgGreen as Object, imgRed as Object) 
     ... 
    End Sub 
Questions connexes