2010-07-27 58 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