Access 2013编译错误 - 需要对象

时间:2016-09-14 14:00:43

标签: vba ms-access-2013

我使用Access相当多,但只涉及VBA代码。我有一些可行的代码,但我尝试编译代码并得到以下错误。

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 = 会突出显示。

我不知道为什么会这样。有人可以就如何解决这个问题提供一些指导吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

在VBA中,Set仅在分配给对象变量时使用。 Date类型的变量不是对象变量,所以你只需说

RS = CurrentDb.OpenRecordset("tblDate")

(请注意,可以,如果你真的想要,请在前面放一个Let,但几乎没有人做过。)

答案 1 :(得分: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

修改 如果您正在使用查询来获取记录:

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