VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -