2016-06-23 1 views
0

У меня возникла проблема с кнопкой в ​​форме доступа к 2013 году.Доступ к версии 2013 VBA: Ошибка соответствия: нет данных или данных.

Высокий уровень: Я делаю некоторые нормативные формы, 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 

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

+1

Похоже, это работает ... Я имею в виду, что * генерирует [компилятор] жалобу * правильно? '' ... Вы уверены, что выделенная линия является сигнатурой метода *? В первый раз я слышу, что это происходит ... –

+1

Тем не менее, все эти ключевые слова 'Set' вызовут ошибку времени выполнения, как только вы ее скомпилируете и запустите. 'Set' предназначен для назначения * ссылок на объекты *, и вы присваиваете * значения *. Удалите 'Set'. –

+0

@ Mat's Mug Я создал новую «пустую» кнопку, которая называлась GenerateComplaint. Я вставил первый оператор If, и кнопка работала, как ожидалось. Кнопка была создана VBA –

ответ

0

Для дальнейшего использования:

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

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

И прочитал: Debugging VBA Code

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

должен был

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

Извините за тратить свое время.

Смежные вопросы