Причина, по которой функции не распознаются, заключается в том, что вы не указали полностью имя.Публичная функция в модуле формы должна быть указана с именем формы:
Forms!MyForm.GetSubName()
Но это неправильный подход, и ваш код слишком запутан.Вы можете получить доступ к значению поля со списком в своем запросе напрямую:
Forms!MyForm!SubcontractorCombo
Теперь тот факт, что вы используете .SelText, подсказывает мне, что вы делаете что-то очень очень сложное, или выневерно настроено поле со списком.У полей со списком могут быть найденное поле и отображаемое значение, так что список сотрудников может отображать LastName / FirstName сотрудника, в то время как поле со списком фактически имеет в качестве связанного поля идентификатор EmployeeID.
Если в вашем поле со списком естьскрытое связанное поле, но вы хотите отображаемое значение, вам не нужно использовать .SelText - просто используйте соответствующий .Column () поля со списком:
Forms!MyForm!SubcontractorCombo.Column(1)
(количество столбцов равно нулюна основе этого, поэтому скрытый столбец будет столбцом 0, при условии, что это первый скрытый столбец)
Кроме того, существует проблема, заключающаяся в том, что если пользователь выберет ЧАСТЬ текста в поле со списком, вы получитенеполное совпадение, так что вы действительно не хотите использовать .SelText вообще.
Итак, предложение WHERE вашего SQL в итоге окажется таким (при условии, что я все правильно диагностировал):
WHERE Projects.Completed<>True
AND Subs.Subcontractor=Forms!MyForm!SubcontractorCombo.Column(1)
... и вы можете потерять весь отмеченный код:
Option Compare Database
Option Explicit
<strike>Private stSubName As String</strike>
Private Sub Command2_Click()
On Error GoTo Err_Command2_Click
Dim stDocName As String
Dim stSubName As String
SubcontractorCombo.SetFocus
<strike>stSubName = SubcontractorCombo.SelText</strike>
'Confirm that stSubName variable is holding correct value'
<strike>MsgBox "Name of Subcontractor Selected is " & stSubName</strike>
<strike>SetSubName stSubName</strike>
<strike>GetSubName</strike>
DoCmd.Close
stDocName = "Summary Asphalt Production for Subcontractor"
DoCmd.OpenQuery stDocName
Exit_Command2_Click:
Exit Sub
Err_Command2_Click:
MsgBox Err.Description
Resume Exit_Command2_Click
End Sub
<strike>Public Sub SetSubName(Value As String)
'Set the module variable to be the value passed in from externally'
stSubName = Value
End Sub</strike>
<strike>Public Function GetSubName() As String
'Returns the value of the module variable'
GetSubName = stSubName
'MsgBox "GetSubName Variable is " & stSubName'
End Function</strike>