2017-03-09 30 views
0

我在我的Access項目中有一個表格,名爲MainForm,有一個子表格subForm,同時還有很多按鈕,同時我創建了一個類模塊處理所有按鈕的OnClick事件,模塊名稱爲classButtonsMS Access 2013,Subform操作破壞類模塊

代碼的類模塊中:

Public WithEvents cButtons as Access.CommandButton 

Dim tmpValue as String 

Private Sub cButtons_Click() 
    Select Case cButton.Name 
     Case "ButtonA" 
      MainForm.subForm.Requery 
     Case "ButtonB" 
      Let tmpValue = subForm.ComboBox1.Value 
      DoCmd.RunSQL "update sometable set somefield='" & tmpValue & "'" 
     Case "ButtonC" 
      DoCmd.RunCommand acCmdUnhideColumns 
    End Select 
End Sub 

Open事件MainForm的,我有以下代碼:

For i = 0 to Me.Controls.Count - 1 
    If Left(Me.Controls(i).Name,6) = "cmdbtn" Then 
     set btnClass = New classButtons 
     set btnClass.cButtons = Me.Controls(i) 
     btnClass.cButtons.OnClick = "[Event Procedure]" 
     mdPublic.buttonColl.Add btnClass 'buttonColl is a collection variable declared in another module called "mdPublic" 
    End If 
Next 

然後,一旦MainForm被打開,所有的3名按鈕的作品好,但是一旦ButtonA或ButtonB被點擊,所有3個按鈕將停止工作。

我試圖從ButtonA和ButtonB中刪除subForm操作,發現問題消失了,所以我猜subForm操作只是「銷燬」類模塊。

但我確實需要這些操作,任何人有任何想法?謝謝 !!!!!

+0

對不起,我沒有做足夠的測試之前,我發佈這個問題,事實是: 不僅是子窗體,即使我試圖從一個組合框的值在主窗體,或只是重新查詢的主窗體,它會也破壞了課程模塊。然後我試着創建一個新的空白項目,一切正常,返回到我當前的項目,不再工作。這兩個項目之間唯一的區別是表格,但我不認爲表格中的數據會對班級模塊產生任何影響,這是驅動堅果! – Rick

回答

0

我要做的就是讓一個函數的形式來處理按鈕行爲背後,稱之爲HandleButtonClick(X作爲字符串),然後在每個按鈕的Click事件性質:

= HandleButtonClick(「按鈕a」) - 根據需要更改按鈕的名稱

此外,我總是命名一個子窗體容器,與它所保存的子窗體不同,如ctrDetails。主窗體後面的代碼必須引用子窗體容器名稱。

+0

感謝您的建議,功能是備份解決方案之一,如果我無法解決這個問題,我會放棄並開始使用功能。 至於子表單,'subForm'只是一個例子,我爲容器設置了一個不同的名稱。 – Rick