お世話になっております。
Access2003で問題なく使っていたプログラムを2007用accdbに変換して2007で動かしたところ、コンパイルエラーが出るようになりました。
エラー表示
コンパイルエラー:メソッドまたはデータ メンバが見つかりません。
コードは以下のとおりで(抜粋)、.Edit部分が反転します。
簡単なVBAはわかりますが、今回のエラーは何が原因かわかりませんので、ご教授いただければ幸いです。
よろしくお願いいたします。
Private Sub 元に戻す1_Click()
Dim dbs As Database
Dim rst1 As Recordset
Dim rst2 As Recordset
Dim strSQL As String
Dim lngTmpVol As Long
Dim lngSubVol As Long
DoCmd.RunCommand acCmdSaveRecord
Set dbs = CurrentDb
'売上構成テーブルから画面上のb伝票コードのレコードセットを開く
strSQL = "SELECT bbコード, 数量 FROM 売上構成 " & _
"WHERE b伝票コード = " & Me!b伝票コード & _
" ORDER BY 売上構成コード DESC"
Set rst1 = dbs.OpenRecordset(strSQL)
'売上構成の読み込みループ
Do Until rst1.EOF
'カレントレコードの数量を変数に保存
lngTmpVol = rst1!数量
'カレントレコードのbbコードと画面上の社員コードで出庫履歴のレコードセットを開く
strSQL = "SELECT 出庫数量, 確定数量, 返却数量 FROM 出庫履歴 " & _
"WHERE bbコード = " & rst1!bbコード & " AND 社員コード = " & Me!社員コード & _
" ORDER BY 出庫日 DESC, 出庫コード DESC"
Set rst2 = dbs.OpenRecordset(strSQL)
With rst2
If .RecordCount > 0 Then
'出庫履歴の読み込みループ
Do Until .EOF
.Edit
If Nz(!確定数量) >= lngTmpVol Then
'数量すべてを確定数量から減算できるとき
'減算後の数量を取得
lngSubVol = Nz(!確定数量) - lngTmpVol
!確定数量 = IIf(lngSubVol <> 0, lngSubVol, Null)
lngTmpVol = 0
Else
'数量すべては確定数量から減算できないとき
lngTmpVol = lngTmpVol - Nz(!確定数量)
!確定数量 = Null
End If
.Update
'すべてを割り当てたらループを抜ける
If lngTmpVol <= 0 Then Exit Do
.MoveNext
Loop
End If
.Close
End With
rst1.MoveNext
Loop
rst1.Close
End Sub
ADOのRecordsetと解釈されていることが原因でしょう。
EditメソッドはDAOのRecordsetの方にしかありません。
モジュールのデザイン画面で、以下の操作を行ってみてください。
(1)メニューバーの「ツール」→「参照設定」と進む。
(2)DAOがチェックされているか確認する。
されていなければ、チェックする。
(3)DAOの優先度をADO(ActiveX Data Object)より上げるため、
↑で、DAOがADOより上に来るように操作する。
ADOかDAOか、Accessのバージョンが変わる度にコロコロ変わります。
MSにも困ったものですが、明示的に定義するのも一つの方法です。
Dim rst2 As Recordset → Dim rst2 As DAO.Recordset
こうすると、優先度に関わらずDAOのRecordsetになります。
質問者
お礼
早々のご回答をありがとうございました。
ご指示のとおり優先度を変更したら正常に動作しました。
Dim rst2 As DAO.Recordsetも勉強になりました。
助かりました。ありがとうございました。
お礼
早々のご回答をありがとうございました。 ご指示のとおり優先度を変更したら正常に動作しました。 Dim rst2 As DAO.Recordsetも勉強になりました。 助かりました。ありがとうございました。