我使用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 = 会突出显示。
我不知道为什么会这样。有人可以就如何解决这个问题提供一些指导吗?非常感谢!
答案 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