2012-12-26 62 views
0

我有一個訪問數據庫,這與我提到的上一個問題類似,有一個下拉和一個子窗體。我希望能夠從下拉列表中選擇一個選項,並在下面的子表格中打開相應的子窗體。這裏是我的代碼...訪問編譯錯誤:參數不可選

Option Compare Database 
Option Explicit 

Private Sub btnCloseHRForms_Click() 
    DoCmd.Close 

End Sub 

Private Sub cmbSelectFrms_AfterUpdate() 
Select Case selectSubform 
    Case 1 
    Forms!frm_HRForms!subformHRForms.Form!subform1.Visible = True 
    Case 2 
    Forms!frm_HRForms!subformHRForms.Form!subform2.Visible = True 
    Case 3 
    Forms!frm_HRForms!subformHRForms.Form!subform3.Visible = True 
End Select 
End Sub 

Private Sub Form_Load() 
Dim dba As Database 
Dim rst As Recordset 
Dim SQL As String 

Set dba = CurrentDb 
Set rst = dba.OpenRecordset("tbl_Forms", dbOpenDynaset, dbSeeChanges) 
SQL = "SELECT ListName FROM tbl_Forms" 
Set rst = dba.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges) 

Set rst = Nothing 
Set dba = Nothing 
End Sub 

Function selectSubform(ID) 
Dim dbacurrent As Database 
Dim rstcurrent As Recordset 
Dim SQL As String 

Set dbacurrent = CurrentDb 
SQL = "SELECT * FROM tbl_Forms WHERE ID = " & ID 
Set rstcurrent = dbacurrent.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges) 
selectSubform = rstcurrent.Fields("ID") 

Set dbacurrent = Nothing 
Set rstcurrent = Nothing 

End Function 

有什麼建議嗎?訪問VBA新手

+0

錯誤發生在哪裏? – SeanC

+0

at cmbSelectFrms_AfterUpdate事件 – designspeaks

+0

您是手動寫出'cmbSelectFrms_AfterUpdate'還是隻是使用下拉列表(或表單屬性)來創建事件觸發器?有時候事件觸發器的參數是'(這不是可選的......因此是你的錯誤信息!)'如果你沒有從VBE的下拉菜單或屬性框中的事件處理程序構建它們,你就不會意識到這個問題 –

回答

1

您的函數selectSubform(ID)需要傳遞一個ID參數,並且您沒有傳遞一個ID參數。當您定義函數時:

Function selectSubform(ID) 
    ' ... Do some stuff 
    selectSubform = SomeValue 
End Function 

您正在告訴編譯器需要一個名爲ID的參數。另外,我強烈建議您在每個代碼模塊的頂部放置一個Option Explicit語句,並在編輯器中打開Option Explicit選項。這將要求你指出數據類型。在我們坐下來的時候,我們不知道什麼樣的數據類型是ID參數,也不知道你的函數返回了什麼樣的數據類型(儘管它在你的Select Case語句中被用作一個明顯的整數)。做一些假設,我會嘗試下面的改變(我現在不能測試它,我也不能說你的代碼的其餘部分)。

我在這裏假設組合框中的選擇是適當子窗體的ID。如果沒有,您可能需要澄清ID參數來自哪裏):

Private Sub cmbSelectFrms_AfterUpdate() 
    Select Case selectSubform(Me.cmbSelectForms) 
     Case 1 
      Forms!frm_HRForms!subformHRForms.Form!subform1.Visible = True 
     Case 2 
      Forms!frm_HRForms!subformHRForms.Form!subform2.Visible = True 
     Case 3 
      Forms!frm_HRForms!subformHRForms.Form!subform3.Visible = True 
    End Select 
End Sub 

這裏可能還有其他問題。但是,將VBA IDE設置爲需要顯式變量聲明並將Option Explicit添加到每個代碼模塊將有助於識別問題。