Access 2013 VBA: ошибка Complie: метод или элемент данных не найден

У меня проблема с кнопкой в ​​форме доступа 2013 года.

Высокий уровень: я делаю некоторые нормативные формы, 1 - Запрос на обслуживание, другой - запрос на жалобу. Сервисный запрос открывается при каждом сервисном вызове. Если вызов не для замены детали, он также генерирует общий запрос на жалобу.

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

Проблема: я получаю сообщение «Ошибка компиляции: метод или элемент данных не найден» в строке

Private Sub GenerateComplaint_Click()

Это моя первая попытка vba, поэтому, пожалуйста, потерпите меня, я не разработчик.

Ниже VBA для кнопки:

Private Sub GenerateComplaint_Click()
If IsNull([txtAddress]) Or IsNull([txtCity]) Or IsNull([txtCompany]) Or IsNull([txtContact]) Or IsNull([txtDescription]) Or IsNull([txtEmail]) Or IsNull([txtPhoneNumber]) Or IsNull([txtPartNumberOrModel]) Or IsNull([txtSerialNumber]) Or IsNull([txtService Request Date]) Or IsNull([txtState]) Or IsNull([txtZip]) Then
MsgBox "Somethings not right"

Else
 DoCmd.Save
 Dim Prompt As Integer
 Prompt = InputBox("Are you Sure you would like to create a Complaint Record? Type 1 for yes, 0 for No")
    If Prompt = 1 Then
        DoCmd.OpenForm "Complaint Request Form", , , , acFormAdd
         Forms![Complaint Request Form].Form.Company = Me.txtCompany
         Forms![Complaint Request Form].Form.Address = Me.txtAddress
         Forms![Complaint Request Form].Form.Contact = Me.txtContact
         Forms![Complaint Request Form].Form.Phone = Me.txtPhone
         Forms![Complaint Request Form].Form.Email = Me.txtEmail
         Forms![Complaint Request Form].Form.ProductNumber = Me.txtPartNumberOrModel
         Forms![Complaint Request Form].Form.SerialNumber = Me.txtSerialNumber
         Forms![Complaint Request Form].Form.City = Me.txtCity
         Forms![Complaint Request Form].Form.State = Me.txtState
         Forms![Complaint Request Form].Form.Zip = Me.txtZip
         Forms![Complaint Request Form].Form.Description = Me.txtDescription
         Forms![Complaint Request Form].Form.CusDescription = Me.txtCusDescription
         Forms![Complaint Request Form].Form.ServiceRequestNumber = Me.ServiceRequestDate
         Forms![Complaint Request Form].Form.ComplaintRequestDate = Me.txtService_Request_Date

        Dim SN As Long
        SN = Me.ServiceRequestNumber
        DoCmd.Close acForm, "Complaint Request Form", acSaveYes
        DoCmd.Close acForm, "Service_Request_sub", acSaveYes
        'DoCmd.OpenTable "Complaint_Request", , acReadOnly
        'DoCmd.Close acTable, "Complaint_Request", acSaveYes
        DoCmd.OpenReport "ComplaintRequestReport", acViewPreview, , "[Complaint_Request]![ServiceRequestNum]=" & SN
        'DoCmd.OpenReport "ServiceRequestReport", acViewPreview, , "[Service_Request]![ServiceRequestNumber]=" & SN
        'Below line works, I think there is a data type issue, ServiceRequest!ServiceRequestNumber is an autonumber, Where complaintRequest!ServiceRequestNum is autonumber
        DoCmd.OpenReport "ServiceRequestReport", acViewPreview, , "[Service_Request]![ServiceRequestNumber]=" & SN
        'DoCmd.Close acForm, "Service_Request_sub"
    ElseIf Promp = 0 Then
    'do nothing'
    Else
    Prompt = InputBox("Are you Sure you would like to create a Complaint     Record? Type 1 for yes, 0 for No")
    End If




End If

End Sub

Бег

Private Sub GenerateComplaint_Click()
If IsNull([txtAddress]) Or IsNull([txtCity]) Or IsNull([txtCompany]) Or IsNull([txtContact]) Or IsNull([txtDescription]) Or IsNull([txtEmail]) Or IsNull([txtPhoneNumber]) Or IsNull([txtPartNumberOrModel]) Or IsNull([txtSerialNumber]) Or IsNull([txtService Request Date]) Or IsNull([txtState]) Or IsNull([txtZip]) Then
MsgBox "Somethings not right"
End if

Работает просто отлично.

 Mathieu Guindon23 июн. 2016 г., 20:59
Тем не менее, все этиSet ключевые слова вызовут ошибку времени выполнения, как только вы получите его для компиляции и запуска.Set для назначенияссылки на объектыи вы назначаетеценности, УдалитьSet там.
 Tony DeJesus23 июн. 2016 г., 21:20
Я обновил свой оригинальный пост, чтобы отразить тестирование.
 Mathieu Guindon23 июн. 2016 г., 21:08
Вы дважды щелкнули по кнопке и позволили VBA создать для вас этот обработчик кликов, или вы написали его самостоятельно?
 Mathieu Guindon23 июн. 2016 г., 20:54
Похоже, это работает ... Я имею в виду, этогенерирует жалобу [компилятора] право?</dad-joke> ...Тыконечно выделенная строка является методомподпись? Впервые слышу, что происходит ...
 Tony DeJesus23 июн. 2016 г., 21:07
@ Mat's Mug Я создал новую «пустую» кнопку, которая называлась GenerateComplaint. Я вставил первое утверждение If, и кнопка сработала, как и ожидалось. Кнопка была создана VBA
 Mathieu Guindon23 июн. 2016 г., 21:10
Подождиделает скомпилировать и запустить? Есть два типа ошибок:компилировать ошибка делает код невозможным для запуска.время выполнения ошибка взрывает программу во время ее работы. Ваш вопрос упоминаеткомпилировать ошибка, но затем вы говорите, что получаете его для отображения окна сообщения .... в чем конкретно проблема?

Ответы на вопрос(2)

Forms![Complaint Request Form].Form.Phone = Me.txtPhone

должно было

Forms![Complaint Request Form].Form.Phone = Me.txtPhoneNumber

Извините, что потратил ваше время.

Решение Вопроса

ПоложилOption Explicit в верхней части каждого модуля.
Он обеспечивает объявление переменных и сообщает о незадекларированных или неправильно написанных переменных / константах во время компиляции.

Чтобы это было автоматически в новых модулях, установитеТребовать декларации переменной опция в редакторе VBA.

И читать:Отладка кода VBA

Ваш ответ на вопрос