投稿日 | : 2003/03/17(Mon) 14:19 |
投稿者 | : よれ |
Eメール | : |
URL | : |
タイトル | : DAO 実行時エラー3164 |
初めて質問します、よろしくお願いします。
実行時エラー3164「フィールドを更新できません」
というエラーが出て困っています。
MS-Excelのワークシートの内容を編集したいので、DAOを使っています。
読み込みは問題ありません。
また、書き込みは最初のレコードではうまくいくのですが、2番目以降の
レコードで、表題のエラーが発生してしまい、編集できません。
問題のソースを添付しますのでよろしくお願いします。
LeftByte関数は入力された文字列を、指定バイト数までで切り取る機能
です。
gsDBNameは、Excelですでに編集&保存してあるExcelのブック形式ファ
イルのファイル名が設定されています。
仕方なく、RS(レコードセット)を、1回編集ごとに作成&クローズする
方式に書き換えてもやはりだめでした。
皆さん、打開策をご教授よろしくお願いします。
Public Sub hosei()
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim MyData As String
Dim SeetName As String
Dim i As Integer
'open
Set DB = OpenDatabase(gsDBName, False, False, "Excel 8.0;HDR=NO;")
SeetName = DB.TableDefs(0).Name
Set RS = DB.OpenRecordset(SeetName)
Do Until RS.EOF
With RS
.Edit
.Fields(0) = LeftByte(.Fields(0), 4) ' ←ここを2度目に通過するときにエラー
.Fields(1) = LeftByte(.Fields(1), 1)
.Fields(2) = LeftByte(.Fields(2), 8)
.Fields(3) = LeftByte(.Fields(3), 16)
.Fields(4) = LeftByte(.Fields(4), 16)
.Update
.MoveNext
Debug.Print .EditMode, .LockEdits
MyData = .Fields(0) & vbTab & .Fields(1) & vbTab & .Fields(2)
i = i + 1
Debug.Print i, MyData
End With
Loop
Set RS = Nothing
Set DB = Nothing
End Sub