• 締切済み

Accessでレコードの保存をVBAで

Access2000です。 入力するとすぐに集計をしたいのですが、 フォームフッターの集計用テキストボックス (=sum([フィールド名])が設定されている) は、レコードを保存しないと、再計算されないようです。 そこで、入力して、フォーカスを喪失するときに DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 を実行して、レコードを保存しているのですが、 デバッグのとき、エラーが発生しますし、 (デバッグ中は、VBAエディタが表示されるため) また、メニューの実行のコマンドは物足りないので、 指定したフォームのレコードを保存する方法は、 他にないでしょうか? よろしくお願いいたします。

  • tiga-
  • お礼率77% (170/219)

みんなの回答

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

> フォームフッターの集計用テキストボックス > (=sum([フィールド名])が設定されている) この場合、[フィールド名]フィールドの「更新後処理」イベントに次のように 記述してみてください。 どうなりますか。 Private Sub フィールド名_AfterUpdate()   Me.Recalc End Sub

tiga-
質問者

お礼

ありがとうございます。 しかし、更新する前に計算結果を表示したいのです。 キークリックイベントで、入力されたキーの数字等チェックをして、レコードを保存して、計算結果を表示しています。 Enterキーが押されたら、テキストボックスを抜けます。 このときのレコード保存を、VBAでDocmd以外の方法がないかと思ったのですが。

関連するQ&A

  • レコードが保存できません。

    Access2002です。 連結フォームで値に更新があった場合、保存を意図的に行って 他のレコードへ移るようにしたいと思っています。 ウィーザードでは次のようなコードが発生されますが、 このコードで保存しようとすると「DoMenuItem アクションの 実行はキャンセルされました。」とエラーになります。 DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 なお、Me.Dirty=Falseの場合だと、エラーになりません。 でも、これだと意味がありません。 この場合、どうしたらいいのでしょうか? 情報不足の場合、追加いたします。

  • Access2003 レコード削除時のメッセージを変更するには

    いつもお世話になっております。 フォーム上の削除ボタンをクリックすると、メッセージが表示されて”OK”をクリックすると該当のレコードが削除されます。 このメッセージを任意に変更したいのですが、どうすればいいでしょうか? 現在のコードはこのようになっています。 DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70 具体的にはリレーションシップが組んであるレコードを削除しようとすると、 「このリレーションシップには参照整合性の・・・」という長いメッセージが表示されるのを「このデータを削除しますか?」のように変更したいのです。 ご教授いただければ幸いです。よろしくお願いいたします。

  • Access レコード削除時に「カレントレコードがありません」エラーが表示されてしまう

    いつもお世話になっております。 フォームに「レコードの削除」ボタンを作成して実行したところ、 「カレントレコードがありません」と表示されてしまいます。 削除そのものは、正しく行われている(削除したいレコードが削除されている)のですが、 なぜ、そのようなメッセージが出てしまうのか分かりません。 他のフォームでは、削除するレコードが最後のレコードで無い限り、 そのようなメッセージは出ません。 また、そのフォームのレコードソースになっているクエリでは、 問題なく削除が実行されます。 削除ボタンの作成は、コントロールウィザードを使って行いました。 ちなみにVBAでは下記のような記述になっています。 Private Sub 削除テスト_Click() On Error GoTo Err_削除テスト_Click DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70 Exit_削除テスト_Click: Exit Sub Err_削除テスト_Click: MsgBox Err.Description Resume Exit_削除テスト_Click End Sub メッセージを表示させないためには、どのようにしたら良いでしょうか?? また、最後のレコードを削除した場合にも、 「カレントレコードがありません」メッセージを表示させなくするには どのようにしたら良いでしょうか? 教えてください。

  • Access2000のVBA

    社内で、既に退社した方が作成したDBで在庫管理をしています。 VBAの記述でよくわからない箇所があるので教えていただきたいのです。 フォームに部品情報を入力し、「コピー」というボタンをクリックすると、「部品番号」のみ空白になり、それ以外の項目は新しいレコードにコピーされるようになっています。 この部分のVBAは Private Sub Copy_Click DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 DoCmd.OpenQuery "qCopy" Me![PartsCode] = Null となっていて、2行目、3行目は理解できたのですが、1行目が何を行っているのか不明です。 初歩的な質問で申し訳ありませんが、よろしくご教授ください。

  • ACCESSでのデータ削除について

    XP&ACCESS2003 メインフォーム/サブフォーム形式のフォームで、受注番号で連結しています。 メインフォームが受注、サブフォームが受注明細です。(1対多) サブフォームに削除ボタンをつけて、受注明細のレコードを1件削除するようにしています。以下が削除ボタンのクリック時のプロシージャーです。 DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70 クリックした段階で、クエリーで見てみると確かに削除されています。 ただ、フォームを再度開くと空のデータが追加されています。(=削除前とレコード件数は同じ) このサブフォームでは、レコード追加時にフィールド「行」に行ナンバーを入力させるために、隠しで [行NO]テキストボックスを持たせて、自動的に行NOをいれています。 サブフォームの挿入前処理は以下です。 [行NO] = Val(DMax("[行NO]", "Q_受注_工程_明細_行NO") & ".0") + 1 削除してもこの行NOが自動的に別のレコードを追加しているようです。 何か、よい方法をご存知の方、よろしくお願いします。

  • Access2007 サブフォームの新規レコードをすぐにフォームに表示させる方法

    サブフォーム上で適当なレコード(IDと商品名)を選択して、そのレコードにある入力ボタンを押すと、フォームのコンボボックス上にその商品名が出るようなフォームがあります。 すでに入力済みのIDと商品名は表示されます。 ところが、サブフォーム上でIDと商品名を新規入力して入力ボタンを押すと、フォームのコンボボックスは空白となり、商品データが表示されません。 しかし、一旦フォームを閉じて開くと、データは表示されています。 IDと商品名を新規入力して、そのままフォームのコンボボックスに反映させたいと思います。 入力ボタンはこのようにやってみました。 Private Sub 入力_Click() DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Forms!フォーム!ID = Me.ID End Sub または、 Private Sub 入力_Click() DoCmd.RunCommand acCmdSaveRecord Forms!フォーム!ID = Me.ID End Sub ご教授いただければ幸いです。よろしくお願いいたします。

  • ACCESSのサブフォームコピーについて

    ACCESSのサブフォームコピーについて お世話になります。色々検索してたのですがなかなか解決できず、教えて下さい。 下記のようなフォームがあります。 メインフォームにボタンを設置し、メインフォームとサブフォームを同時にコピーしたいです。 【メインフォーム】 ID(オートナンバー) 登録名 住所 電話番号 など 【サブフォーム】 SubID(オートナンバー) ID(メインフォームと連結) ライセンス数 開始日 など メインフォームの「内容のコピーを作成」ボタンのクリック時の[イベント プロシージャ]に下記が記載してあります。 --- Private Sub 内容のコピーを作成_Click() On Error GoTo Err_内容のコピーを作成_Click Select Case MsgBox(srchXls & "◆内容のコピーを作成しますか?◆", vbOKCancel) Case vbOK DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 'Paste Append MsgBox (srchXls & Chr(13) & Chr(10) & "◆コピーを作成しました◆") Err_内容のコピーを作成_Click: Case Else Exit Sub End Select End Sub --- これではメインフォームのコピーしか出来ません。 サブフォームも一緒にコピーしたいのですが、どういった方法があるでしょうか。 宜しくお願いいたします。

  • レコードを保存するコード アクセスvba

    アクセスですが DoCmd.Save acForm, Me.Name このコードはフォームを保存するコードですよね? フォームではなく、レコードを保存するコードはありますか?

  • メインフォームとサブフォームのレコードを複製

    (昨日同じ質問をあげましたがカテゴリが間違っていたのでこちらにあげなおしました) メインフォーム「MAIN」にサブフォーム「REN」を埋め込んでいます。 【メインフォームMAIN】 テーブル名:JIK ID:事件ID 【サブフォームREN】 テーブル名:REN ID:連絡先ID(・事件ID) ボタンをクリックすると、メインフォームで表示させているレコードを複製させたいです。 以下を参考に、そのとおり(のつもり)に作ってみたのですが (メインフォーム「MAIN」に「txtCopy事件ID」という名前のテキストボックスも作成しました) 「コマンドまたはアクション”追加貼り付け”は無効です。」 とエラーメッセージが出てしまいます。 どのように修正すればよいでしょうか? http://www.accessclub.jp/bbs3/0103/superbeg36719 … ちなみに追加クエリだけを実行すると 表示させているメインフォーム「MAIN」のレコードに、 サブフォーム「REN」のレコードが追加され、 サブフォーム「REN」のレコードが2倍になりました。 以下追加クエリとコードです。 【追加クエリ】 INSERT INTO REN ( 事件ID, 氏名, フリガナ, ・・・ ) SELECT [Forms]![MAIN]![事件ID] AS 式1, REN.氏名, REN.[フリガナ], REN.報告書, ・・・ FROM REN WHERE (((REN.事件ID)=[Forms]![MAIN]![txtCopy事件ID])); 【VBA】 Private Sub 明細コピー_Click() On Error GoTo Err_明細コピー_Click Me!txtCopy事件ID = Me!事件ID DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 'Paste Append Dim stDocName As String DoCmd.SetWarnings False ' システムメッセージ非表示 stDocName = "追加クエリ" DoCmd.OpenQuery stDocName, acNormal, acEdit DoCmd.SetWarnings True ' システムメッセージ表示 ' サブフォーム再クエリ Me!REN.Requery Exit_明細コピー_Click: Exit Sub Err_明細コピー_Click: MsgBox Err.Description Resume Exit_明細コピー_Click End Sub よろしくお願いいたします!

  • Accessレコードの削除(VBA)

    Accessで入力フォームを使用して入力をしていますが、 全項目の入力がされていない場合そのレコードを削除したいのです。 閉じるときに消そうと思い DoCmd.RunCommand acCmdDeleteRecord を入れてみたのですが、レコードの削除はできません、とメッセージが出てしまい消せません。 次のレコードを選択すれば消せるかと思い DoCmd.GoToRecord , , acNewRec を足してみたりしてみたのですが、やっぱりダメでした。 この場合はどのようにすればいいのでしょうか?

専門家に質問してみよう