我使用Access VBA 2013應用程序,該項目的這一部分重點關注窗體控件和按鈕。用於設置窗體控件屬性的Eval()
由於預留了按鈕,我想鎖定/解鎖控制修改。 更多通用性,我希望通過這些事件稱爲潛艇稱之爲自制功能:
Sub LockAssociateControl(fctName As String, val As Boolean)
Dim code As String
code = "Forms!" & getModuleName & ".Controls!" & fctName & ".Locked = " & CStr(val)
Debug.Print (code) 'just to test
Eval code
End Sub
(getModuleName也是一個自制的函數,返回模塊的調用函數的正確名稱)
對於例如,這一個被稱爲象下面這樣:
Private Sub FirstName_Exit(Cancel As Integer)
Call LockAssociateControl("FirstName", True)
End Sub
和「代碼」變量,它設置(與模塊1屬「形式Module1.Controls Name.Locked =真!」 ted by getModuleName和Name作爲參數(我還沒找到更好的))。
現在我想要評估這段代碼,以避免硬編碼每個事件子。
我的問題是,在線上發生了錯誤,並說:
錯誤代碼:2770到您在Visual Basic程序作爲OLE對象下文稱的對象不是一個OLE對象
我環顧了StockOverflow和其他論壇,找出有什麼問題,並且我發現這個函數的行爲並不是爲我想要的。所以我試圖找到另一種方式來做到這一點,因爲Evaluate
函數不存在於Access等,但我沒有發現真正有用的東西。
我試圖用對參數字符串DoCmd
或Call
或各種變換,但至今沒有奏效...
所以我的問題是:做任何你有這個問題的解決方案?如果沒有,你是否知道一個替代方案,不必在每個事件函數中寫入完整的語句,如:Forms!Module1.Controls!Name.Locked = False
?
首先測試一下,如果你的方法是硬編碼的,那麼該怎麼辦?如果這有效,然後嘗試eval()。 –
由於我沒有能力找到通用的方法來做,我確實做了一個我正在處理的表單的複製版本,而且我目前正在處理這個版本來處理代碼的其他方面。這是一個臨時的解決方案,但我希望不要因爲它的靈活性而永久卡住這個版本。 – Immoskyl