Ошибка компиляции доступа: аргумент не является необязательным

У меня есть база данных доступа, это похоже на предыдущий вопрос, который я задал, с раскрывающимся списком и подчиненной формой. Я хочу иметь возможность выбрать вариант из раскрывающегося списка и открыть соответствующую подчиненную форму в подчиненной форме ниже. Вот мой код ...

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


person designspeaks    schedule 26.12.2012    source источник
comment
где ошибка?   -  person SeanC    schedule 26.12.2012
comment
в событии cmbSelectFrms_AfterUpdate   -  person designspeaks    schedule 26.12.2012
comment
Вы вручную выписали cmbSelectFrms_AfterUpdate или просто раскрывающийся список (или свойства формы) для создания триггера события? Иногда триггеры событий имеют аргументы (that are not optional .. hence your error message!), которые вы бы не осознали, если бы не создали их ни из раскрывающихся списков в VBE, ни из обработчиков событий в поле свойств.   -  person Scott Holtzman    schedule 26.12.2012
comment
Я использовал обработчик событий в поле «Свойства», чтобы найти событие. Я стараюсь придерживаться любой из упомянутых вами конструкций, потому что я все еще не очень уверен, что смогу получить доступ.   -  person designspeaks    schedule 26.12.2012
comment
Что такое selectSubform?   -  person Scott Holtzman    schedule 26.12.2012
comment
Это определяемая пользователем функция для отображения определенной подчиненной формы на основе раскрывающегося списка.   -  person designspeaks    schedule 26.12.2012


Ответы (1)


Ваша функция selectSubform (ID) требует передачи параметра ID, а вы его не передаете. Когда вы определяете функцию:

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

Вы сообщаете компилятору, что требуется параметр с именем ID.

Кроме того, я настоятельно рекомендую вам разместить оператор Option Explicit в верхней части каждого модуля кода и включить параметр Option Explicit в редакторе. Это потребует от вас указать типы данных. В настоящее время мы не знаем, какой тип данных ожидается в качестве параметра ID, и не знаем, какой тип данных возвращает ваша функция (хотя это подразумевается использованием в качестве очевидного целого числа в вашем операторе Select Case). Сделав некоторые предположения, я бы попробовал внести следующие изменения (я не могу проверить это прямо сейчас и не могу говорить с остальной частью вашего кода).

Я предполагаю, что выделение в поле со списком - это идентификатор соответствующей вспомогательной формы. Если нет, возможно, вам придется уточнить, откуда берется параметр 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 к каждому из ваших модулей кода будет иметь большое значение для помощи в выявлении проблем.

person XIVSolutions    schedule 26.12.2012