dポイントプレゼントキャンペーン実施中!

よろしくお願いします。
仕様環境
WinXP
access2002

今、accessで顧客管理システムを作っているのですが、
フォームに情報を入力したら「更新ボタン」押して、
情報を更新できるようにしています。

「更新ボタン」はマクロで”最新の情報に更新”を使い
できたのですが、ボタンを押したときに何のリアクションもないので
気になります。(しっかり更新(保存)はされてますけど。)

そこで質問なのですが、「更新ボタン」を押したときに
「更新しますか? ”はい””いいえ”」と確認の意味でも
選べるようにしたいのですがどうすればよいでしょう?

MsgBox関数を使うとよいとみたいなのですが、
「更新しました、”OK”」とは出ますが、「~しますか?”はい””いいえ”」のように
選択する画面の出し方がわかりません。

もし、マクロでそのような方法がありましたら教えてください。
よろしくお願いします。

A 回答 (4件)

No.2です。



> どちらを押しても更新されてしまいます。

連結フォーム(=レコードソースにテーブル/クエリ等を指定してあるフォーム)の、
連結コントロール(=コントロールソースにフィールド名を指定してあるコントロール)を
直接編集している場合、そうなります。

対処方法はいくつかありますが・・・どれにするにしても、結構複雑なことをやることに
なり、全ての手順の解説をここで行うのはさすがに無理がありますので、それぞれの
概要だけ、ごく簡単に説明させていただきます(汗)

A)更新可否を記録する非表示コントロールを設置し、『更新』ボタン以外による更新
 (→レコード移動など)は、フォームの「更新前イベント」で「イベントのキャンセル」
 アクションを行うことでキャンセルする
 (更新を中止して閉じるときのために、「元に戻す」アクションを実行する『取消』ボタン
  を別途設置する必要あり)
 →開発工数は少ないけれど、使い勝手はいまひとつ。

B)記録用テーブルとは別に、同じフィールド構成のテーブル(ワークテーブル)を作成し、
 そのテーブルを基にしたフォームで編集後、『更新』ボタンで元のテーブルに書き戻す
 (「ワークテーブルの全レコード削除」、「記録用テーブルからワークテーブルへの
  レコード追加」、「ワークテーブルから記録用テーブルへの書き戻し」には、それぞれ
  削除クエリ・追加クエリなどを使用)
 →1レコードずつではなく、複数レコードをまとめて編集後、『更新』ボタンで一括更新
  できるなど、工夫次第で使い勝手はよいが、テーブル・クエリなどの追加作成は多い

C)テーブルから、1レコード分のデータを非連結コントロールに転記させて、そこで編集
 を行い、『更新』ボタンを押したら追加クエリなどでテーブルに書き戻す
 →ワークテーブルとその関連クエリが不要な分、「B」に比べて追加作成するものは
  少ないが、編集したデータが実際にテーブルに入力できる内容かのチェックを行う
  マクロなどが必要


> 半角で「条件」のところに「...」と半角ピリオドを入れる

すみません、こちらは全くわかりません(汗)
(ビルダボタンのことかとも思いましたが、『条件』欄にはそれは表示されませんし、
 何より、試しに「...」と入れてみたところ、特にエラーも起こらずに(→1つ又は2つのみだと
 エラー発生)マクロは動きましたので、何らかの意味は持っているようですが・・・)
    • good
    • 0
この回答へのお礼

DexMachina 様

回答ありがとうございます!
かなり難しそうですね、初心者の私ではまだまだ勉強不足です。

accessを多少触ったことがある人ならaccessを閉じたり、
他のレコードに移動したら、保存されることを何となく知ってたりしますが、
ワードやエクセルは使ったことはあるけどaccessを初めて使う人、それも
技術者ではない人(例えば電話のオペレーターや受付など)そういう人でも
見た目にわかるようなものを作りたかったので、やってみました。

今は、更新ボタンを押して「更新しました!(保存もできてる)」のテキストを出す
ことぐらいしかできませんが、保存しない方法もあることを知っていると
ニーズがあった時に人に説明をする幅が広がります。

長い時間、お考え頂きましてありがとうございました!

お礼日時:2008/06/18 12:57

>できたのですが、ボタンを押したときに何のリアクションもないので


>気になります。(しっかり更新(保存)はされてますけど。)

とありますが、
逆に更新(保存)しないように作れますか?


つまり、なにもしなくても更新(保存)されます。
    • good
    • 0

> 「~しますか?”はい””いいえ”」のように選択する画面の出し方



マクロの『条件』列で、MsgBox関数を使用すれば、対応できます。


具体的には以下の通りです:
1)当該マクロをデザインビューで開く
2)『アクション』列の左に『条件』列が表示されていない場合は、メニューで
 「表示(V)→条件(C)」を選択
3)メッセージに対して「はい」を選択したときに実行したいアクションと同じ
 行の『条件』欄に、以下の1行を記述します:
  MsgBox("更新しますか?",4,"確認")=6
4)マクロを保存して閉じる。

・・・以上です。

なお、MsgBox関数の2番目の引数「4」は、「はい/いいえ」の選択肢を、
戻り値の「6」は、「はい」が選ばれた場合を、それぞれ意味します。
「OK/キャンセル」で「OK」選択時にしたい場合は以下の式に変更します:
  MsgBox("更新します。",1,"確認")=1

詳しくは、MsgBox関数についてのオフライン ヘルプを参照して下さい。
(なお、ヘルプには「組み込み定数」についての記述がされていたかと
 思いますが、これはVBA使用時のみ有効で、マクロでは上記のように
 数値を指定しないとエラーになりますので、注意してください)


以下、余談:

メッセージで「はい」を選択した場合に、複数の動作を行わせたい場合は、
その動作ひとまとまりを別のマクロとして保存した上で、『アクション』列に
「マクロの実行」を指定し、左下の画面で、マクロ名を指定します。
なお、上でいった「別のマクロ」は、新規にマクロを作成してもいいですし、
メニューで「表示(V)→マクロ名(M)」を選択して『マクロ名』列を表示させて
サブマクロとして保存する方法もあります。

例)
『マクロA』のデザインビュー
マクロ名    条件          アクション
マクロ1                 値の代入
       MsgBox("",4,"")=6   マクロの実行
                      メッセージボックス

マクロ2                 クエリを開く
                      テーブルを開く


上のようになっていた場合、「マクロの実行」で、左下の『マクロ名』欄に
「マクロA.マクロ2」を指定しておけば、メッセージで「OK」を選択した時には
クエリとテーブルが開かれることになります。
(『マクロ名』列で指定したマクロ名(=サブマクロ名)を使用する場合は、
 上記のように「マクロ名.サブマクロ名」という形で指定する必要があります)

この回答への補足

DexMachina様

回答ありがとうございます!
早速やってみたところ出来ました!
但し、もう一つ問題が・・

更新ボタンを押すと
更新しますか?”はい””いいえ”と出てくるようにはなったのですが、どちらを押しても更新されてしまいます。
”いいえ”を押すと更新されないようにしたいのですが・・。

おそらく「マクロの中止」とかを使えばいいんでしょうが、
いまいちわかりません。
また僕の持っている書籍に半角で「条件」のところに「...」と半角ピリオドを入れるみたいなことが書いてありますがよくわかりません。

差し支えなければご教授ください。

補足日時:2008/06/16 10:54
    • good
    • 0

マクロではなくイベントモジュールになりますが


  RC = MsgBox("更新しますか? ""はい"" ""いいえ""", vbYesNo, "更新の確認")
  
  If RC = vbYes Then
    MsgBox """はい""が選択されました", vbOKOnly, "選択の結果"
  Else
    MsgBox """いいえ""が選択されました", vbOKOnly, "選択の結果"
  End If

という感じで処理をこないます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す