2016-09-14 1 views
0

私はかなりのアクセスを使用しますが、VBAコードではたやすいです。私は動作するいくつかのコードがありますが、私はコードをコンパイルしようとし、次のエラーを取得しようとしました。アクセス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

を削除します正確に説明しています。 – arcadeprecinct

+0

私はまたそれをgoogledし、あなたが言及したエントリを見た。 Setを削除すると、別のエラーが発生します。コンパイルエラー:型が一致しません。 –

答えて

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 
+0

Dimをdaoに設定します.Recordsetはそれを修正しました。迅速な対応とお手伝いをありがとう! –

1

VBAでは、オブジェクトに割り当てるときにのみ、Setが使用されます。あなただけ

RS = CurrentDb.OpenRecordset("tblDate") 

を言うように、タイプDateの変数は、(あなたが本当に、前にLetを入れたいのですが、ほとんど誰もいない場合、あなたができることに注意してください)、オブジェクト変数ではありません。

+0

Setを削除すると、別のエラーが発生します。コンパイルエラー:型が一致しません。 –

関連する問題