強制終了で困っています

このQ&Aのポイント
  • Windows98とAccess2000を使用している中で、頻繁に強制終了やエラーメッセージが表示されて困っています。
  • 特に削除後にエラーが発生することが多いため、原因はおそらくこれにあると思われます。
  • メインフォームには支店や事業概要、賃金などの複数のタブがあり、それぞれにサブフォームと登録ボタン、削除ボタンが配置されています。
回答を見る
  • ベストアンサー

強制終了になってしまいます

Windows98 ACCESS2000を使用しています。 よく強制終了になったり、"2486 現在このアクションは実行出来ません"などのエラーが頻繁に出て困っています。 削除をした後にエラーになる事が多いので、多分これが原因なのではと思います。 顧客情報フォームというメインフォームに、支店、事業概要、賃金…などの複数のタブがあり、それぞれにサブフォームとサブフォームに対して登録ボタンと削除ボタンが貼り付けてあります。 Private Sub cmd支店削除_Click() Dim rs As DAO.Recordset If Me!sub支店.Form.Recordset.recordcount = 0 Then MsgBox ("削除するレコードはありません。") Exit Sub End If Set rs = Me!sub支店.Form.Recordset.Clone rs.Bookmark = Me!sub支店.Form.Bookmark ret = MsgBox("表示中のレコードを削除します。よろしいですか?", _ vbOKCancel + vbQuestion + vbDefaultButton2, "削除") Select Case ret Case vbOK rs.Delete Me!sub支店.Form.Requery Case vbCancel End Select rs.Close: Set rs = Nothing End Sub Private Sub cmd支店登録_Click() If IsNull(Me!cbo顧客.Value) Then MsgBox "顧客名を選択して下さい。" Exit Sub Else DoCmd.OpenForm "F支店登録", acNormal End If End Sub という風に書いてあるのですが、たくさんサブフォームがあるのでブックマークのつけ方がおかしいのでは?と思うのですがさっぱり分かりません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

Accessのデータベースウィンドウが表示される状態で起動して メニュー→ツール→マクロ→VisualBasic Editor を起動させてメニューにあるデバッグのプルダウンメニューにそのデータベース名のコンパイルと表示されますのでコンパイルすれば断ち切れているイベントがメッセージと一緒に出てコンパイル出来ない記述がマーキングされます。 そのイベントが必要でなければ削除して修正が必要でなれば修正して再コンパイルしていけば不必要な記述は除いていけます。

t-tomo
質問者

補足

コンパイルは終了しました。 でもやはり削除を繰り返すと突然、「現在実行しているコードはリセットされます」というエラーメッセージが出て、強制終了になってしまいます。 タブの中にサブフォームが2つあったりするので、もしかするとどのレコードを削除すればいいのか判断出来ていないのでしょうか?

その他の回答 (2)

回答No.3

よくわかりませんが >Me!sub支店.Form.Requery もし関連するサブフォームがあるなら全てRequeryする必要があるんじゃないでしょうか。

t-tomo
質問者

補足

お返事ありがとうございました。 いろいろとしてみたのですが、やはり駄目でした。 強制終了になるのは、タブにサブフォームが2つ以上表示している場合になっていると思われるので、もしかしたらサブフォームのデータをクリックしないで、削除ボタンをクリックしたために、どのレコードがカレントレコードなのか判断できずにエラーになっているのでは?と思ったのですが、削除ボタンをクリックした時にどのサブフォームにフォーカスがあって、カレントレコードがどれなのか分かる方法はあるでしょうか?

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

削除によってメソッドやデータメンバが途切れている状態なのではないでしょうか? 一度全てコンパイルしてみてはどうでしょう。

t-tomo
質問者

補足

お返事ありがとうございます。 >一度全てコンパイルしてみてはどうでしょう。 コンパイルの仕方がどうしたらいいのかよく分からないのですが、よろしければ教えて頂けないでしょうか?

関連するQ&A

  • サブフォームのレコード削除

    サブフォーム(帳票)のレコード削除をしたいのですが、レコードセクレタをクリックして選んだレコードではなく、テーブルの最初のレコードから順番に削除されてしまいます。 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim ret As Integer '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset rs.Open "T支店", cn, adOpenKeyset, adLockOptimistic '削除 ret = MsgBox("表示中のレコードを削除しますか?", vbYesNo + vbQuestion, "削除") Select Case ret Case vbYes rs.Delete Me!sub支店.Form.Requery Case vbNo Exit Sub End Select '終了 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing WINDOWS98、ACCESS2000をしようしています。よろしくお願いします。

  • Access レコードの検索と追加

    日報というフォームに日付とリンクしたサブフォームを作成しました。 複数の人がデータを入力するのですが、日報フォームの日付は重複したくありません。 それで日付入力というテキストボックスを作成して、その日付と同じ日付を検索して、なければ新規のレコードを作成するというようにしたいと思っています。 Private Sub txt日付入力_AfterUpdate() Dim rs As DAO.Recordset Set rs = Me.Recordset.Clone rs.FindFirst "日付 = #" & Me!txt日付入力.Value & "#"  If rs.NoMatch Then   rs.AddNew  Else   Me.Bookmark = rs.Bookmark  End If rs.Close: Set rs = Nothing End Sub というようにしたのですが、新規のレコードを作成する部分がどうしても分かりません。 どなたか分かる方、よろしくお願いします。

  • サブフォームのレコードセットをメインフォームで処理したい

    [Access2003] サブフォームのレコードソースをメインフォームでレコードセットとして取得し、処理したいと思い、 Private Sub cmd選択_Click() Dim RS As New ADODB.Recordset Set RS = Me!F_Sub.Form.RecordsetClone End Sub とやってみたのですが、型が一致しません。"とエラーになります。 WEB上でのサンプルも上のコードでいけるような感じで説明がありましたが何が問題なのでしょうか?

  • アクセスのフォームで10件づつ表示する。

    初めて書き込みさせて頂きます。 アクセスのテーブルを帳票形式にて作成して10件づつ表示をさせようとすると一部のデータが表示されません。 方法としては、帳票形式で10件のみ表示出来る様にサイズを調整して「前へ」と「次へ」のボタンをつけて10件づつ表示させています。 ソースは下記の方法で 「次へ」 Private Sub コマンド13_Click() Dim rs As DAO.Recordset, i As Integer Const n As Integer = 10 Set rs = Me.RecordsetClone For i = 1 To n * 2 If rs.EOF Then rs.MoveLast Me.Bookmark = rs.Bookmark Exit Sub End If rs.MoveNext Next Me.Bookmark = rs.Bookmark For i = 1 To n rs.MovePrevious Next Me.Bookmark = rs.Bookmark rs.Close End Sub 「前へ」 Private Sub コマンド16_Click() Dim rs As DAO.Recordset, i As Integer Const n As Integer = 10 Set rs = Me.RecordsetClone For i = 1 To n * 2 If rs.BOF Then rs.MoveFirst Me.Bookmark = rs.Bookmark Exit Sub End If rs.MovePrevious Next Me.Bookmark = rs.Bookmark For i = 1 To n rs.MoveNext Next Me.Bookmark = rs.Bookmark rs.Close End Sub 以上、ご教授の程宜しくお願い致します。

  • access 初心者です。

    Private Sub 患者番号_AfterUpdate() Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Set Cn = CurrentProject.Connection Set Rs = New ADODB.Recordset Rs.Open "[tbl個人情報]", Cn, adOpenKeyset, adLockOptimistic Rs.Find "[患者番号] = " & Me![患者番号] If Rs.EOF Then MsgBox "レコードが見つかりません。ID=" & Me![患者番号] Else Me![性] = Rs![性] End If Rs.Close: Set Rs = Nothing Cn.Close: Set Cn = Nothing End Sub 上記の式を見よう見まねで作成したのですが、エラーが出てしまします。          Me![性] = Rs![性]  が見つかりません どのように解釈すれば良いのでしょうか? ちなみに、サブフォームに入れているテキストボックスの「[性]を 同じサブフォーム内の[患者番号]から検索がしたいです。 初歩的なことで申し訳ございません。よろしくお願いします。

  • コンボボックス 印刷ボタンについて

    アクセス勉強中です。 フォームで見ている画面だけを印刷する、コンボボックスを作成しています。 コンボボックスウィザードにて印刷ボタンを作成したのですが、 すべてのデーターが印刷されてしまい困っております。 どこを変更すれば1枚だけ印刷ができるのでしょうか? イベントプロジャは下記です。 どうぞ宜しくお願いいたします。 Option Compare Database Private Sub リスト70_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[IDI] = " & Str(Me![リスト70]) Me.Bookmark = rs.Bookmark End Sub Private Sub コンボ73_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[NO] = " & Str(Me![コンボ73]) Me.Bookmark = rs.Bookmark End Sub Private Sub コンボ73_BeforeUpdate(Cancel As Integer) End Sub Private Sub 生年月日_AfterUpdate() Me.年_____齢 = Int(DateDiff("d", [生年月日] - 1, Date) / 365.25) End Sub Private Sub 郵便番号_AfterUpdate() Me!現住所.SetFocus Me!現住所.SelStart = Len(Me!現住所) End Sub Private Sub コマンド121_Click() On Error GoTo Err_コマンド121_Click Dim stDocName As String Dim MyForm As Form stDocName = "顧客リスト" Set MyForm = Screen.ActiveForm DoCmd.SelectObject acForm, stDocName, True DoCmd.PrintOut DoCmd.SelectObject acForm, MyForm.Name, False Exit_コマンド121_Click: Exit Sub Err_コマンド121_Click: MsgBox Err.Description Resume Exit_コマンド121_Click End Sub

  • 複数の条件で検索したい!

    複数の条件で検索したい! 現在下記のコードでフォームのtxtBoxとcmbBoxの条件でサブフォームを絞込みしています。 これを複数の条件を満たしたレコードだけを絞込みしたいのですが、 txtBox1の条件も拾うしcmb1の条件も拾ってしまう・・・ これを txtBox1の条件を満たした中のcmb1条件も満たすのレコードで絞込みしたいのですが、 どのようにしたら良いか教えてください。よろしくお願いいたします。 Private Sub cmd検索_Click() If Not IsNull(txtBox1) Then サブフォーム.Form.Filter = "顧客コード like '*" & txtBox1.Value & "'" サブフォーム.Form.FilterOn = True End If If Not IsNull(cmb1) Then サブフォーム.Form.Filter = "顧客区分 like '" & cmb1.Value & "'" サブフォーム.Form.FilterOn = True End If If Not IsNull(txtBox2) Then サブフォーム.Form.Filter = "顧客名カナ like '*" & txtBox2.Value & "*'" サブフォーム.Form.FilterOn = True End If

  • コンボボックスでの絞り込み2つはOKなのに3つ目がNGです

    Access2000で社内システムを作っています。 行き詰ってしまいました。コンボボックス3つを利用してサブフォームを開くフォームを作っています。 サブフォームは取引マスタを利用してQ_売上げというクエリを元にしています。 サブフォーム名 売上げです。レコードは い  1/1 A商店 みかん 三ケ日 100円 100個 ろ  1/2 A商店 なし  長十郎 80円  50個 は  1/3 A商店 みかん 愛媛  80円  100個  に  1/3 B商店 なし  長十郎 80円  100個 コンボ1で「A商店」を選ぶとコンボ2では「なし」と「みかん」が選べます。 フォームの動作はコンボ1を選ぶとい、ろ、は、に全部の レコードが表示されます。 コンボ1を選ぶとい、ろ、はのレコードに絞り込まれます ここまではうまくいくのですがコンボ3を開いたとき レコードい、はを表示したいのに該当なしに なってしまいます。 コードは以下の通りです。 アドバイスよろしくお願い致します。 Private Sub cmd取引先_AfterUpdate() If Me.cmd取引先 & "" = 0 Then Me.売上げ.Form.RecordSource = Q_売上げ Else Me.売上げ.Form.RecordSource = _ "SELECT * FROM Q_売上げ " & _ "WHERE 取引先 = '" & Me.cmd取引先 & "'" End If End Sub Private Sub cmd商品名_AfterUpdate() Me.売上げ.Form.FilterOn = False Me!売上げ.Form.Filter = _ "取引先='" & Me!cmd取引先 & _ "' and 商品名='" & Me!cmd商品名 & "'" Me!売上げ.Form.FilterOn = True End Sub Private Sub cmdブランド_AfterUpdate() Me.売上げ.Form.FilterOn = False Me!売上げ.Form.Filter = _ "取引先='" & Me!cmd取引先 & _ "' and 商品名='" & Me!cmd商品名 & _ "' and ブランド='" & Me!cmdブランド & "'" Me!売上げ.Form.FilterOn = True End Sub

  • サブフォーム同士を連動 フィルタをかけると解除

    http://bekkoame.okwave.jp/qa8213065.html の Private Sub Form_Open(Cancel As Integer) Set Me.SubForm2.Form.Recordset = Me.SubForm1.Form.Recordset End Sub の方法でサブフォーム同士を連動させたのですが Form_Open後に、フィルタをかけると連動しなくなってしまいます。 連動させつつ、フィルタをかけて連動を維持させる方法はありますか?

  • プログラムが実行されません

    フォームは、メインフォームに業務No.(オートNo.)と日付(可視していない)と非連結で日付入力というフィールドがあり、日付でリンクしたサブフォームがありまあす。 日付入力フィールドにはDate関数でフォームを開いた時に今日の日付が表示されており、日付入力を変更すると他の日付も見られるようにしたいのですが、同じ日付を重複したくありません。 テーブルの業務No. インデックス→いいえ      日付  インデックス→いいえ に設定しておいて、 VBAで Private Sub 日付検索() Dim rs As Recordset Set rs = Me.Recordset.Clone rs.FindFirst "日付 = #" & Me.txt日付入力.Value & "#" If rs.NoMatch Then rs.AddNew rs!日付 = Me.txt日付入力.Value rs.Update Me.Requery rs.FindFirst "日付 = #" & Me.txt日付入力.Value & "#" Me.Bookmark = rs.Bookmark Else Me.Bookmark = rs.Bookmark End If rs.Close: Set rs = Nothing End Sub Private Sub txt日付入力_AfterUpdate() 日付検索 という風に書きました。 Windows98 Access2000で作成したものなのですが、作成をしたパソコンではうまく出来ます。WindowsMeでもうまく出来ます。でも違うパソコンでWindows98なのに、このプログラムは無視されて日付入力の値を変更すると値が重複されてしまいます。 なぜなのでしょうか? よろしくお願いします。