2013-01-07 39 views
0

我遇到了動態分配OnMouseMove事件的問題。access vba:奇怪的行爲分配onMouseMove

在報告中,我有幾百個按鈕,我分配了一個OnClick事件。此事件在呼叫中使用條件WHERE打開另一個報告。 我這樣做是通過提取Button的名稱(包括其號碼),提取該數字並將其作爲參數提供給函數。
這很好,並打開正確的報告。我沒有檢查就認爲這個論點是正確的。

其工作原理如下:

報告的初始化函數我有

For Each ctl In Me.Controls 
If ctl.ControlType = acCommandButton Then 
nSekNr = ParseNumber(ctl.Name, 6) 
    ctl.OnClick = "=MapButtonClick('" & sBtnName & "', '" & nSekNr & "')" 
[...] 

的ParseNumber功能只包括

ParseNumber = Right(ctlName, (Len(ctlName) - z)) 

然後,我有我的點擊功能如下

Public Function MapButtonClick(ByVal sBtnName As String, ByVal nSekNr As Byte) 
DoCmd.Minimize 
DoCmd.Close acReport, "repSektion" 
DoCmd.OpenReport "repSektion", acViewPreview, , "[SekID] = " & nSekNr 
End Function 

這可以工作並在我點擊每個按鈕時打開正確的報告。 (是的,我知道一個參數是不需要的,它只是從我嘗試的其他東西的遺留物)

現在我想顯示報告中使用標籤和OnMouseMove按鈕的數量,以便用戶可以在點擊按鈕之前查看部分ID。

問題是,當我複製我的函數時,Access似乎不會將nSekNr變量作爲參數發送。 我通過使用新的功能

Public Function MapButtonShowID(sBtnName As String, nSekNr As Integer) 
Me.sekshow.Visible = True 
Me.sekshow.Caption = "Sektion: " & sSekNr 
End Function 

在這sekshow是空標籤做到這一點。 我呼的一下事件的初始化下面這種權利像這樣

For Each ctl In Me.Controls 
If ctl.ControlType = acCommandButton Then 
nSekNr = ParseNumber(ctl.Name, 6) 
    ctl.OnClick = "=MapButtonClick('" & sBtnName & "', '" & nSekNr & "')" 
ctl.OnMouseMove = "=MapButtonShowId('" & sBtnName & "', '" & nSekNr & "')" 
[...] 

這給了我一個空的「Sektion:」沒有對報告的數量。

現在開始奇怪的事情: 我檢查了nSekNr是否通過添加一個MsbBox甚至正確地給任何一個函數。我的意思是,如果點擊事件起作用,那是因爲正確的nSekNr被給出了。結果都沒有功能,甚至收到變量 - 它是空的!

但爲什麼然後我的點擊事件工作?這個報告實際上沒有任何內部過濾,它只是一個顯示一些數據的基本報告。

我迷路了。

手動分配事件幾乎不是一種選擇,因爲有這麼多。

也許有一種方法可以正確地做到這一點,並找出爲什麼點擊事件甚至工作,如果參數爲空?

+0

如果ctl.Name只是一個數字,請嘗試'CInt(ctl.Name)'。在你的處理程序assingment中,你在引號之間有'nSekNr'(將它作爲字符串發送?)如果刪除引號並將'nSekNr'作爲整數發送,會發生什麼? –

+0

該名稱包含一個我也解析的附加標識(「SekButtonA-D」) - 不包括樣本中的那個。刪除nSekNr的引號不會改變結果。由於某種原因,這個論點沒有被賦予該函數。現在我將調查nSekNr變量是否被正確解析。 – IMA

+0

好吧,SekBtNr和它的名字在init函數中被正確解析。此外,事件過程的字符串設置正確。分配參數時出現錯誤,該參數爲空。然而,(靜態)字符串sBtnName IS確實給出了正確的。我勒個去。我現在將嘗試將完整的ctl.Name賦予該函數,並在MapButtonShowID函數中解析它,而不是在init函數中解析它。 – IMA

回答

0

神祕感解決了,這是一個錯字。 對不起,浪費你的時間,但如果有人希望爲報表中的某種類型的每個控件動態地分配事件過程,那麼該函數將按預期工作。這可能需要Access 2010,雖然

+0

我剛剛在訪問2010年做了一個快速測試,原理起作用。然而,如果由於某種原因,你的解析失敗並且'nSekNr'爲空,你將會得到一個訪問對話框,彈出'你輸入的表達式OnClick作爲事件屬性......等等。 –