2013-10-10 65 views
1

模塊我有一個表格在Access 2010,看起來像這麼一個click事件:凡checkDataIntegrity定義麻煩傳球形式在VBA

Private Sub SaveRecord_Click() 
    checkDataIntegrity(Me) 
End Sub 

如下:

Function checkDataIntegrity(ByVal fForm As form) As Boolean 

這工作正常和丹迪。不過,我還有一個click事件:

Private Sub LFS_Flashed_Successfully_Fail_Click() 
    preventSimultaneousPassAndFail (Me) 
End Sub 

preventSimultaneousPassAndFail定義如下:

Function preventSimultaneousPassAndFail(ByVal fForm As form) As Boolean 

當我調用這個點擊事件中,我得到以下錯誤:

Run-time error '13': 
Type mismatch 

什麼時我在這裏做錯了嗎?這兩個事件調用都以相同的形式調用,並調用同一模塊中的函數。

回答

0

您似乎沒有對函數的返回值做任何事情,所以不要將參數括在圓括號中。

'preventSimultaneousPassAndFail (Me) 
preventSimultaneousPassAndFail Me 

這是標準的VBA練習。不幸的是,我無法解釋爲什麼它會在一個案例中觸發錯誤,而不是另一個案例。所以這個問題可能不會導致這個問題,但我仍然建議你做出這個改變來排除這個問題。

雖然我們不知道這些功能的任何細節,但我建議您考慮通過表單對象ByRef而不是ByVal

+1

謝謝。這解決了我的問題。 access-vba(或者也許是所有的vba)對於它的錯誤消息來說是令人沮喪的。 – ttremblay

+0

'ByRef'或'ByVal'對於手頭的錯誤沒有任何影響。只有在被調用的方法必須能夠改變調用者傳遞的值的極少數情況下,才需要傳遞參數'ByRef'。在引用最可能不是某人想要的東西的情況下。傳入的對象的屬性無論如何都可以改變。 – paulroho

0

爲什麼你錯誤的原因是,在

preventSimultaneousPassAndFail (Me) 

的情況下,括號表達式會調用該對象的默認成員。在Access.Form的情況下,這是String類型的Name屬性。這就是類型不匹配錯誤的原因。

preventSimultaneousPassAndFail Me 

的參考形式本身的情況下被傳遞到方法中。