2016-09-14 2 views
0

Я использую Access совсем немного, но только в коде VBA. У меня есть код, который работает, но я попытался скомпилировать код и получить следующую ошибку.Access 2013 Ошибка компиляции - требуется объект

Private Sub Report_Open(Cancel As Integer) 
Dim RS As Date 
Set RS = CurrentDb.OpenRecordset("tblDate") 
MsgBox ("The month and year are: " & RS) 
DoCmd.OutputTo acOutputReport, "LP Completions", "PDFFormat(*.pdf)", Chr(34) & "\\sharepoint.xx.yyyy.zzz\Reports\" & Format(RS.Fields(0), "yyyy-mm") & Chr(32) & " - LP Completions - Exec Report.pdf" & Chr(34), False 
End Sub 

Я получаю ошибку компиляции: требуется объект. В представлении кода подсвечивается RS =.

У меня нет подсказки, почему это происходит. Может ли кто-нибудь дать некоторые рекомендации относительно того, как это исправить? Спасибо!

+1

Снимите 'Set' – arcadeprecinct

+0

Кроме того, если я Google вашего точного вопроса названия первого удара я получаю объясняет именно это. – arcadeprecinct

+0

Я тоже погуглил и увидел запись, которую вы упомянули. Когда я удаляю Set I, получаю еще одну ошибку. Ошибка компиляции: несоответствие типов. –

ответ

1

Если вы открываете набор записей, переменная должна быть набором записей. Затем вы указываете поле в таблице, в которой вы находитесь, в окне сообщений.

Если в таблице имеется более одной записи, она вернет первое значение - так что создайте временный запрос, чтобы вернуть значение, которое вы хотите, или выполните поиск в наборе записей и перейдите к правильной записи.

Private Sub Test() 
    Dim RS As dao.Recordset 
    Set RS = CurrentDb.OpenRecordset("tblDate") 
    MsgBox "The month and year are: " & Format(RS.Fields("MyDateField"), "yyyy-mm") 
End Sub 

Edit: Если вы используете запрос, чтобы получить запись:

Private Sub Test2() 
    Dim qdf As DAO.QueryDef 
    Dim rs As DAO.Recordset 

    Set qdf = CurrentDb.CreateQueryDef("", "SELECT MAX(MyDateField) AS MaxDateField FROM tblDate") 
    Set rs = qdf.OpenRecordset 
    MsgBox "The month and year are: " & Format(rs.Fields("MaxDateField"), "yyyy-mm") 
End Sub 
+0

Настройка Dim на dao.Recordset исправлена. Благодарим вас за быстрый ответ и помощь! –

1

В VBA, Set используется только при назначении объекта переменных. Переменный типа Date не является изменяемым объектом, так что вы просто сказать

RS = CurrentDb.OpenRecordset("tblDate") 

(обратите внимание, что вы может, если вы действительно хотите, поставить перед собой Let, но в значительной степени никто не делает) ,

+0

Когда я удаляю Set I, получаю еще одну ошибку. Ошибка компиляции: несоответствие типов. –

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