2010-07-27 61 views
1

我有一个小小的多选应用程序。根据正确的答案或错误的答案,会出现4个绿色复选标记和4个红色的x。将表单对象传递给MS Access中的VBA子版/功能

它们最初都不可见,并且位于表单上的特定位置,以便当它们变得可见时,如果它们正好在答案旁边并且接下来是红色的复选标记,它就会像绿色的复选标记如果他们弄错了他们的答案。

我决定做一个子程序,它接受三个参数,它们的答案(“A”,“B”,“C”或“D”),绿色图像引用使可见和红色图像引用使其可见。

不幸的是,我不能让他们通过参考。 intellisense知道我指的是什么对象。

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 

另一个(可能是相关的)问题是,我不能指定从形式到局部变量的图像在Question_Answered子,像这样:

Dim imgGreen as Image 
imgGreen = imgGreenA 

使用MS-Access 2003中MDB与MS-Access 2007.

回答

2

用控件对象调用VBA函数确实没问题。你是用相同的形式还是在某个模块中编写函数?

要分配控制变量,您必须使用set,因此它是Set imgGreen = imgGreenA

+0

该子目录在同一个窗体的VBA代码中。 btnA_Clicked由Access生成,但是question_answered子是由我自己手写的。 – Nitrodist 2010-07-27 14:30:36

+0

如果您使用的是同一种形式,则根本无需传递控制权,因为无论如何它都可用! – dwo 2010-07-28 10:55:17

+0

但是他试图传递给主窗体上不同对象的逻辑处理的相同函数。 – dmc2005 2014-06-21 13:04:37

0

如果你得到一个错误,当子被调用的,

变化:Question_Answered("A", imgGreenA, imgRedA)

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

+0

无需添加参数名称 - 只需删除parens,即Question_Answered“A”,imgGreenA,imgRedA – 2010-07-28 19:11:45

1

你试过

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

,并尝试写通话没有括号的语句,我遇到了问题,当事情不在括号中时,VBA不传递引用。例如。

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

和HansUp说,你并不需要(或希望)内Question_Answered

1

何时重新暗淡imgGreen既然你不发表您的Question_Answered()子程序的内容,这是不可能的说出问题是什么,但是对我而言,第一件事就是你已经将图像声明为图像而不是控件。图像永远不会直接放在窗体上,而是封装在图像控件中,所以您将要使用的控件实际上不会是图像。

所以:现在

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

,我可能是错在那里,但它是一个起点。

(也请注意,我明确有关调用的ByRef或BYVAL)

0

我有同样的问题,我在它的子界面中,使用“作为对象”解决。试试这个:

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