MS Access Tips/Sample and VBA and Blog customize etc...

フォームで前レコードの値を複写する関数

前のレコードの同じフィールドの値を挿入したいという場面は結構あると思います。Ctrl +7 というショートカットキーでできますが、ダブルクリックとかコマンドボタンクリックで実行したいという希望がでるときもありますね。

今回をそれを実現するVBAと汎用関数を紹介します。

難易度:

F1 というフィールドに連結したテキストボックスtxtF1があり、テキストボックスのダブルクリックで前レコードの値を代入するイベントプロシージャです。

というようにSendKeysで Ctrl + 7 を送ってやれば実現できますが、SendKeysはいったんOSに渡されて処理されますので、期待した動作をしない危険性もあります。代替手段がないときのみ利用した方がいいでしょう。

で代替案です。

このような処理をあちこちで多数利用する場合は、標準モジュールに汎用関数を作成しておくと楽です。

使い方は、連結テキストボックスの「ダブルクリック時」プロパティ欄に、

=PreviousDataCopy()

と設定するだけです。コマンドボタンのクリックで代入したいときは、「クリック時」プロパティ欄に、下記のように記述します。

=PreviousDataCopy([テキストボックス名])

拍手する

6 Comments

hitommiy says..."知恵袋でお世話になった者です"

知恵袋にて、ご回答いただきました者です。お世話になります。
当サイトでも様々な、VBAを勉強させていただき、また実際の仕事でも、
活用させて頂いて、大変助かっております。
一番ありがたいと思うのは、access初心者でも、コピーして張り付けるだけで
動くというところが、本当に有難く思います。ありがとうございます。

知恵袋でも、補足として書き込みをしたのですが、改めまして、
1)「標準モジュールに汎用関数を作成」のVBAを標準モジュールに追加
2)「ダブルクリック時」プロパティ欄、=PreviousDataCopy() を書き込み
3)hatena1989さんの使用例のVBAを、キー開放時に書き込み

テキストボックスでは問題なく動作します。
またリストボックスはダブルクリックの入力方法の時は問題ありません。
しかし、リストボックスで+キーを押すと、一度前レコードのデータが入力されて(ここまではOKです)、
次のボックスに移動する瞬間にデータが消えて空白になり、何も入力されないという現象が起きています。
色んな場所にVBAを貼り付けては、動作確認しているのですが、どうしても出来ません。
是非ご教授いただけませんか。

2012.09.18 14:27 | URL | #PALsy/As [edit]
hatena says..."re:知恵袋でお世話になった者です"

リストボックスで間違いないですか。
コンボボックスとは違いますか。

単票フォームですか。帳票フォームですか。

現状のリストボックスの下記の設定がどうなっているか教えてください。

コントロールソース
値集合タイプ
値集合ソース
連結列
列数
列幅


2012.09.18 14:53 | URL | #5uE6dEgY [edit]
hitommiy says..."コンボボックスでした。すいません。"

質問の部分を間違えると意味がないです。反省です。
申し訳ありません。ご指摘の通り、コンボボックスです。

メインフォーム(単票フォーム)の中にサブフォーム(帳票フォーム)が存在します。
このサブフォームの中のコンボボックスです。

コントロールソース:T1元帳借方ID
値集合タイプ:テーブル/クエリ
値集合ソース:
SELECT T3勘定借方.T3勘定借方ID AS xyz_ID_xyz, [T3勘定借方ID] & ', ' & [T3勘定借方名1] AS xyz_DIspExpr_xyz, T3勘定借方.T3勘定借方ID, T3勘定借方.T3勘定借方名1, T3勘定借方.T3勘定借方使用 FROM T3勘定借方 WHERE (((T3勘定借方.T3勘定借方使用)=-1)) ORDER BY T3勘定借方.T3勘定借方ID;

連結列:1
列数:2
列幅:0cm;1cm

2012.09.18 16:31 | URL | #PALsy/As [edit]
hatena says..."キークリック時で"

> 3)hatena1989さんの使用例のVBAを、キー開放時に書き込み

キー開放時を見落としてました。

キー開放時ではなく、キークリック時にコードを移動させてください。

Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)
  Select Case KeyCode
  Case vbKeyAdd
    KeyCode = 0
    PreviousDataCopy
  End Select
End Sub

2012.09.18 17:37 | URL | #5uE6dEgY [edit]
hitommiy says..."お世話になります。"

おはようございます。お世話になります。
お返事ありがたく思います。

教えて頂いたとおり、キークリック時に書き込んだのですが、

キークリック時・・・
下記のメッセージが表示されます。
「指定した項目はリストにありません。
リストから項目を選択するか、リスト項目と同じテキストを入力してください。」
(キー入力時、更新前処理、リスト外入力時も試してみましたが上記に同じ。)

しかし、vbKeyF1を使いF1キーに変えると入力できることがわかりました。
できれば、+キーで統一したいのですが、何か解決方法は無いでしょうか・・・。

コンボボックス自体の作りが悪いのでしょうか?
数字と名前が1つのコンボボックスに表示されています。
(これはエクセルからインポートした時に、ウィザードでこういう形を選択した為です)
例)コンボボックスに100と入力すると、100の右側に「,現金」が表示され尚且つ、
「,現金」が選択された状態になり、次にenterを押すと移動します。

頼ってばかりで申しわけありません。

2012.09.19 10:09 | URL | #PALsy/As [edit]
hatena says..."BBSへ移動しましょう"

こちらでは症状が再現できないので、できれば実物のファイルをみたいので、私が管理人をしている掲示板(BBS)で、ファイルをアップしてもらえますか。
その場合は、問題のフォームとその関連するテーブル、データは最低限の件数のみ残して、公開されては困る部分は伏字にするなどしてください。

掲示板はこのサイトの上部のメニューの「BBS」をクリックすると入れます。

2012.09.19 11:14 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/94-87f7015d
該当の記事は見つかりませんでした。