• 締切済み

アクセス2000の実行時エラー'-2147352567(80020009)'に関して

Windows2000にて、先日までエラーの出なかったコードがいきなりエラーになって困っています。 フォーム上で単純なテキストボックスを配置し、入力値の加工用サブルーチンに飛ぶときに、 「Update または CancelUpdate メソッドには、対応する AddNew または Edit メソッドが必要です。」 の実行時エラーが出ます。 テキストボックスの object名 RTrimTest に対するコードは、以下のものだけです。 Private Sub RTrimTest_LostFocus()   If IsNull([RTrimTest]) Then [RTrimTest] = Space$(20)   [RTrimTest] = Left(RTrim([RTrimTest]) & Space$(20), 20) End Sub 実行時のエラーメッセージもなんかスッキリしないのですが、どなたかこの現象に関してご存知の方がいらっしゃいましたら、ご教授ください。

みんなの回答

noname#11157
noname#11157
回答No.1

「Update または CancelUpdate メソッドには、対応する AddNew または Edit メソッドが必要です。」 これは「AddNew または Edit メソッド」がある場合、その前には必ず対応する「Update または CancelUpdate メソッド」が必要であるという意味です。「on error goto xxx」、「on error resume next 」などを無効にして本当にエラーの出ている箇所を発見しましょう。

Juanjo
質問者

補足

回答有難うございます。 エラートラップや不要なルーチンは全て削除したうえで、このエラーが出るのです。 ちなみにデバッグ中断時に Rtrim のある行が反転されています。 以前、雑誌記事だったか、どこかの掲示板だったかで見かけたのですが、 VBAの参照設定の誤動作等で、こういったケースが出るような事を読んだ覚えもあるので、同じような経験されている方がいらっしゃらないかと思いまして・・・。 その場合、アクセスのアンインストール&再インストールで復帰できるような事だったような気がするのですが、今回はそれも通用しませんでした。

関連するQ&A

  • 実行時エラー -2147217887

    一つのアクセスファイルに エクセルからADOでデータを追加しているのですが その外套のアクセスファイルも捜査をしているタイミングで 実行時エラー -2147217887 他のユーザー が同じデータに対して同時に更新を試みているので、 プロセスが停止しました。 と表示されますが このエラーを表示せず、エクセルADOを優先されるには どういうコードにすればいいですか? ちなみに一度中断モードにして 同じコードを再度実行しようとすると 実行時エラー -2147217887 Update または CancelUpdateメソッドには、対応するAddNewまたはEditメソッドが必要です とエラー内容が変わります。 コードは rs.Open "SELECT * FROM テーブル", cn, adOpenStatic, adLockPessimistic rs.Filter = "番号 = " & 番号 rs("フィールド") = str文字 ’ココでエラー の時です。

  • Accessの実行時エラーについて

    度々恐れ入ります。 実行時エラー’2424’: 指定した式にMicrsoft Accessが見つけることができないフィールド、コントロール、プロパティ名が含まれています。 のメッセージが出てしまいます。 記述したのは オブジェクト=商品コード、プロシージャボックス=Exitの状態で Private Sub 商品コード_Exit(Cancel As Integer) 商品名 = DLookup("商品名", "商品", "商品コード='" & 商品コード & "'") 販売単価 = DLookup("販売単価", "商品", "商品コード='" & 商品コード & "'") 仕入単価 = DLookup("仕入単価", "商品", "商品コード='" & 商品コード & "'") End Sub 以上です。 商品名と商品コードは、商品テーブルと見積明細テーブルの両方に存在するフィールドで、商品名は商品テーブルの主キーにしています。 また、データ型はすべてテキストです。 またもや、テキストどおりの設定をしたはずなのに、何が原因なのか見当つかない状態です。

  • 実行時エラー 2001

    http://officetanaka.net/excel/vba/vbe/05.htm を参考に VBAコードを取得したいのですが Declare Function GetTickCount Lib "kernel32" () As Long Public sampledata As String Sub Sample9() Dim Code As String Code = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(7, 5) MsgBox Code End Sub を実行すると 実行時エラー 2001 'VBProject'メソッドは失敗しました:'_Workbook'オブジェクト が、 Code = ThisWorkbook.~ の行で発生します。 何が間違ってますか?

  • 実行時エラー 3020の対策

    アクセス2003で次のエラーが発生します。 実行時エラー 3020 Update または CancelUpdateメソッドには、対応するAddNewまたはEditメソッドが必要です。 以下のソースは、「テスト」フォームにtestフィールドがある簡単なデータベースですが、全レコードを最初から最後までtestフィールドの先頭に"abc "を付加するというものです。 Public Sub Test() Dim form_name as String Dim frmObj As Form Dim rstObj As Recordset Dim fld_dat As String form_name = "テスト" DoCmd.OpenForm form_name Set frmObj = Application.Forms(form_name) Set rstObj = frmObj.Recordset '先頭のレコードに移動する DoCmd.GoToRecord acDataForm, form_name, acFirst Do fld_dat = rstObj.Fields("test").Value fld_dat = "abc " & fld_dat rstObj.Fields("test").Value = fld_dat '<--- *** ここでエラー *** '次のレコード DoCmd.GoToRecord acDataForm, form_name, acNext DoEvents Loop While frmObj.NewRecord = False End Sub

  • 実行時エラー

    教えてください。 エクセルを開くと、ボタンがあって、それをクリックするとユーザーフォームが開いて、記入が出来るように作りました。でも、 実行時エラー438 オブジェクトは、このプリパティまたはメソッドをサポートしてません。 とでてしまいます。 Sub ShowForm() UserForm1.Show{←ここが黄色} End Sub なぜでしょうか? 説明不足でしたら補足させていただきますので 宜しくお願いします。

  • 実行時エラー -'-2147417848

    エクセルがおかしいです。 ファイルが壊れてるのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Range("a2") = Empty Range("a3") = Empty という、単純なコードなのですが イベントが発生すると 「メモリ不足です。完全に表示できません。」となったり、 実行時エラー -'-2147417848(80010108) '_default'メソッドは失敗しました 'range'オブジェクト となります。 Range("a2") = Empty の部分で発生します。 そして強制終了され、再起動されます。 コードとしては問題ないですよね? バージョンは2010です。

  • 実行時エラー3021「BOFとEOFのいずれかTR

    Sub test() Set cn = CurrentProject.Connection rs.Open "T分類", cn, adOpenStatic, adLockPessimistic rs.Filter = "中分類 = '不明' And (大分類 <> '不明')" For i = 1 To rs.RecordCount str大分類 = rs("大分類") rs("中分類") = str大分類 & "(不明)" rs.Update rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub アクセスADOで上記のようなコードなのですが よく意味の分からないエラーが発生します。 コードの内容は 大分類が不明ではなく中分類が不明なら 中分類のレコードに大分類の値+不明にする です。 例えば該当のレコードが8レコードあれば i=5の時に、 実行時エラー3021「BOFとEOFのいずれかTRUE になっているか、 または現在のレコードが削除されています。 要求された操作には、 現在のレコードが必要です。」 が発生します。 規則としては rs.RecordCountの半分の値までは大丈夫ですが rs.RecordCountの半分+1の時に 上記のエラーが発生します。 ADOでデータの追加をする時にAddNewメソッドを入れ忘れた場合も 上記と同じエラーが発生しますが 今回のコードはフィルターをかけ 更新したいレコードを掴んでいるので AddNewメソッドは不要だと思っています。

  • VBAで実行時エラー 1004 がでる

    Excel2013です。以下のコードでエラーがでます。 どのシートがアクティブでもデータを閉じる時に特定のシート(sheet1)のA行の最終行の一つ下をアクティブにし上書き保存して閉じるようにしたいです。 以下記述したコードです。 Sub Auto_Close() Worksheets(1).Activate Range("A60000").End(xlUp).Offset(1).Select 'Aセル60000から最終行のセルの一つ下に下がる ActiveWorkbook.Save End Sub 閉じるときは問題ないのですが、開いたときにエラーがでます。 以下エラー文です。 実行時エラー 1004 'Worksheets'メソッドは失敗しました'_Global'オブジェクト どこを直せばいいのでしょうか? アドバイス願います。

  • 実行時エラー3021

    実行時エラー3021「BOFとEOFのいずれかTRUEになっていか、または現のレコード要求された操作には、現在のレコードが必要です。」 というエラーが発生します。 エラーになるコードの一部を掲載します。 コードの内容は、アクセスのT_店名テーブルで、str店名の値同じレコードの地図フィールドの値を取得する内容です。 地図フィールドがnullなら何も取得しないようにifステートメントで分けています。 ------------------------------------------------------------ str店名="abc会社" rs.Open "SELECT * FROM T_店名", cn, adOpenStatic, adLockPessimistic rs.Filter = "店名 = '" & str店名 & "'" If IsNull(rs("地図")) = True Then Else ’ここでエラーになる str地図 = rs("地図") End If rs.Close: Set rs = Nothing ------------------------------------------------------------ "abc会社"は、コード上(VBA上) IsNull(rs("地図")) = True では、Falseになってしまい、 str地図 = rs("地図") でエラーになります。 目で見た限り "abc会社"は、T_店名テーブルに存在しますし、 地図フィールドはNullっぽいです。 なのになぜ If IsNull(rs("地図")) = True Then で、True にならないのでしょうか? True にならないために、 str地図 = rs("地図") で、実行時エラー3021というエラーになってしまうようです。

  • アクセス 実行時エラー3265

    お世話になっております。 先ほどまで、違うスレで質問していたものです。 おかげさまで、Private Sub scdSelect()のようなコードとなり、 こちらの方は無事動作しましたが、それをコピーして、 Private Sub denbanSelect()を作成すると、実行時エラー3265が 発生しました。 なぜエラーが発生するのか、検討もつきません。 何かほかに前提条件があるのでしょうか? 各サブフォームのイミディエイトウインドウで ?me.parent.openargs とすると、しっかりと引数は入っております。 教えて君で申し訳ありませんが、どなたご教授よろしくお願いします。 ★呼び出し元フォーム  Private Sub cmdSeekDenban_Click()   DoCmd.OpenForm "resultJDenban", , , , , , Me.Name & ".resultViewJyutyuDenban"  End Sub  Private Sub cmdSeek_Click()   DoCmd.OpenForm "resultScd", , , , , , Me.Name & ".resultViewJyutyu"  End Sub  Public Sub resultViewJyutyu() ☆結果の表示(商品コード検索用)  end sub  Public Sub resultViewJyutyuDenban() ☆結果の表示(伝票番号検索用)  end sub ★検索画面 商品コード用 サブフォーム  Private Sub 商品コード_DblClick(Cancel As Integer)   Call scdSelect  End Sub  Private Sub scdSelect()   Dim Pos   Dim MyFrm   Dim ProcName  Pos = InStr(Me.Parent.OpenArgs, ".")  Set MyFrm = Forms(Left(Me.Parent.OpenArgs, Pos - 1))  ProcName = Right(Me.Parent.OpenArgs, Len(Me.Parent.OpenArgs) - Pos)   MyFrm.txtScd.Value = 商品コード.Value   MyFrm.txtEdaban.Value = 枝番.Value   DoCmd.Close acForm, "resultScd", acSaveNo   CallByName MyFrm, ProcName, VbMethod End Sub ★検索画面 受注伝票番号用 サブフォーム  Private Sub 商品CD_DblClick(Cancel As Integer)   Call denbanSelect  End Sub  Private Sub denbanSelect()   Dim Pos   Dim MyFrm   Dim ProcName   Pos = InStr(Me.Parent.OpenArgs, ".")  Set MyFrm = Forms(Left(Me.Parent.OpenArgs, Pos - 1))  ProcName = Right(Me.Parent.OpenArgs, Len(Me.Parent.OpenArgs) - Pos)  MyFrm.txtDenban.Value = 伝票番号.Value  CallByName MyFrm, ProcName, VbMethod   ←エラー発生★★★   DoCmd.Close acForm, "resultJDenban", acSaveNo End Sub エラー内容  実行時エラー '3265' アプリケーション定義またはオブジェクト定義エラーです。

専門家に質問してみよう