2016-12-13 80 views
0

當我的方法/子程序執行後發生事件時,如何將變量傳遞給VBA中的事件?執行後將變量傳遞給VBA事件處理程序

詳情:

'My Sub'''''''''''''''''''''''''' 
Private Sub mySub() 
    structCalculateDateValues 'calculates a number of dates that I want to be unlocked on my form 
    fnCreateTable 'create a table will all dates form my database 
End Sub 

'Event handler for continous form''''''''''''''' 
Private Sub Form_Current() 
    'Some code to get the value of my Struct - structCalculateDateValues 
    'Lock records that do not fall within of the date parameters of the values in structCalculateDateValues 
End Sub 

這裏的概念是我想一個形式展現在一個臨時表中的所有日期的記錄,但只允許其中的一些記錄可編輯。這發生在MS Access 2013年我有它設置的方法是:

  1. 創建一個結構包含所有日期計算基於這些計算
  2. 連續的形式,是
  3. 負載值到臨時表綁定到該表已存在
  4. 執行通常會在這裏結束
  5. 作爲形式打開它觸發Form_Current事件處理程序
  6. 通行證結構值,該處理程序以某種方式??????

這是一個比其他任何事情都更有效率的問題,一個大問題就是如何觸發該事件。我也想避免一個答案,導致我寫我的結構成員值到數據庫(將是一個cop-out)。我認爲在VBA中必須有一種方法來暫停執行來檢測事件嗎?

感謝,

+0

將它設置爲模塊變量,其中我的子項是私有的myStruct,因爲xyz然後分配和使用。使用structCalculateDateValues作爲函數返回你的結構也可能 –

+0

如果我明白這一點,你建議我在事件處理程序中重新計算我的結構。這很容易做到,而且我的結構是按照您的建議設置的模塊。但是,如果可能的話,我想盡我所能保存處理器。基本上我會重複工作(如果我在這裏理解你)。 –

+0

所以只是使用它,如果你有頂部的私人結構,那麼你可以在當前使用 –

回答

1

你需要一個模塊級變量。這樣你就可以從模塊中的任何地方訪問它:

Option Explicit 
Private MyValue As MyValueType '<--- 

Private Sub Some_ParameterlessEventHandler() 
    MyValue.SomeMember = 42 
End Sub 

Private Sub SomeProcedureThatRunsAfterTheHandler() 
    Debug.Print MyValue.SomeMember 'outputs 42 
End Sub 
+0

全局或模塊級別的變量不會丟失垃圾收集?我相信在我的Main Sub結束後,VBA會釋放引用,並且所有變量都是垃圾回收,對嗎?另外,對於連續形式的事件處理程序我沒有任何限制。它們位於自己的訪問對象內部的獨立模塊中。 –

+0

VBA沒有垃圾回收,它是引用計數的,它不會「重置」,直到遇到'End'關鍵字或者你的宏突然冒出火焰。 –

+1

@JamieMarshall注意:'End'是指實際的'End'指令,而不是'End Sub'標記的'End'部分。只要宿主應用程序處於活動狀態,模塊變量就會存活,除非你用'End'核殺死了'em。 –

相關問題