
No.9ベストアンサー
- 回答日時:
>ボタン経由は避けたいと思います。
>入力の流れの中でスイッチで出来ればと考えています。
レコード移動時イベントを使います
新規レコードに移動したとき
直前入力したレコードの値をコピーし新規レコードに貼り付ければいいんですね
レコード移動時に下のようなコードを書きます
コピー中フラグをStaticで定義
Ifフラグがオフなら
If新規レコードなら
フラグオン
前のレコードに移動
セットフォーカス
コピー
新規レコードに移動
貼り付け
フラグオフ
End If
End If
レコードを移動するたびにイベントが発生します
これによって無限ループにおちいらないように
フラグを設けています
この回答への補足
”前のレコードに移動して、各フィールドの値(文字)をコピーして、
今回の入力が前回のデータと同じであれば貼り付ける”という手順を
VBAでやらせたかったのですが・・・・
前のレコードに移動するのをVBAできる方法をご教授お願い致します。
有難うございました。
フォームにテキストボックスを必要なだけ付加し、非表示にして、
データを一時保管させ、さらにテキストボックスを付加し、それが「1」の場合に、先にこしらえたテキストボックスの内容をやり取り
する様に致しました。
問題解決です。
No.10
- 回答日時:
>”前のレコードに移動して、各フィールドの値(文字)をコピーして、
>今回の入力が前回のデータと同じであれば貼り付ける”という手順を
>VBAでやらせたかったのですが・・・・
これなら最初に回答した、新規レコードにコピーでいいんじゃないですか
ボタンがいやだとおっしゃいますが、コピーをするには何らかの意思表示が必要です
移動だけではそのレコードをコピーしたいかどうか分かりません
移動だけで何でもかんでもコピーしたら要らない物がガパガパコピーされますよ
ボタンの代わりにダブルクリックでというのも可能です
その場合ウィザードの支援はありませんから
ボタンのウィザードで作ったものをダブルクリックイベントに移し変えればいいですね
>前のレコードに移動するのをVBAできる方法をご教授お願い致します。
DoCmd.GoToRecord(ObjectType, ObjectName, Record, Offset)
でも調べてみれば
ご教授有難うございます。
コントロール(テキストボックス等)のクリック、ダブル
クリックでの呼び出しは、テキストボックスのデフォルト操作で
出来る様です。(イベント発生時の表示)
今、考えていますのは、新規レコード入力の為のフォームの入力順2の
テキストボックス(デフォルトは「0」)に「1」を入力したときに、
以下のフィールド(7項目)全てに前の各レコードの内容が表示される
様にしたいのです。(「0」の時は表示なしで手入力)
今まで、教えて頂いた方法で考えて見ます。
いろりろお手を取らしましてすみませんでした。
No.8
- 回答日時:
補足: 既定値方式について。
tab1:
[ID]_[Zip]____[Address1]_[Address2]_[Address3]_[HouseNumber]
_01__1430016___東京都_____大田区_____大森北_____111-111
で、[ID]と[HouseNumber]以外を連続データ入力するとします。
この場合、[ID]=1、2、3がある場合、4を入力する時のみ3を4へコピー。
2を訂正する場合に、コピーはしないものとします。
つまり、事実上、新規レコード時発生のみコピー。
で、こういう仕掛けは次のようです。
Option Compare Database
Option Explicit
Dim isNewRecord As Boolean
Private Sub Form_AfterUpdate()
If isNewRecord Then
Me.Zip.DefaultValue = """" & Me.Zip & """"
Me.Address1.DefaultValue = """" & Me.Address1 & """"
Me.Address2.DefaultValue = """" & Me.Address2 & """"
Me.Address3.DefaultValue = """" & Me.Address3 & """"
End If
End Sub
Private Sub Form_Current()
isNewRecord = Me.NewRecord
End Sub
Private Sub Form_Load()
Me.Zip.DefaultValue = """" & DLookup("Zip", "tab1") & """"
Me.Address1.DefaultValue = """" & DLookup("Address1", "tab1") & """"
Me.Address2.DefaultValue = """" & DLookup("Address2", "tab1") & """"
Me.Address3.DefaultValue = """" & DLookup("Address3", "tab1") & """"
End Sub
問題は、フォームロード時の既定値の最適化です。
例では最新レコードを表示するための条件を指定していません。
ここは、それぞれに工夫。
で、で、これで目的は達成するかと思います。
なお、既定値方式はInsertイベントが発生しないので便利です。

No.7
- 回答日時:
#3、#6です。
面白いのでもう少しやってみましたOption Compare Database
Dim Pnames(50) As String
Dim n, i As Integer
Private Sub Form_AfterUpdate()
RecordItem
End Sub
Private Sub Form_Current()
If IsNull(Form_フォーム2.id) Then
For i = 0 To n - 1
If Form_フォーム2.Controls(i).ControlType = acTextBox Then
On Error GoTo skip2
Form_フォーム2.Controls(i) = Pnames(i)
skip2:
End If
Next i
End If
RecordItem
End Sub
Public Sub RecordItem()
n = Form_フォーム2.Controls.Count
For i = 0 To n - 1
If Form_フォーム2.Controls(i).ControlType = acTextBox Then
Pnames(i) = Form_フォーム2.Controls(i)
End If
Next i
End Sub
これでいくつテキストボックスがあってもコピーされるでしょう。コピーされては困るところは if 文などでスキップしてください。
ちなみにVBAは前から嫌いでしたが、ますます嫌いになりました。コーディングしていて、いらいらさせられること甚だしい。
いらいらさせまして、申し訳ありません。
目的は、直前のレコードの中の幾つかのフィールドデータを
コピーしたかったのですが・・・
私もVisualBasicでなら2元テーブル(マトリックス)データの呼び出しぐらい何とかできるのですが、如何せんアクセスのテーブルの
データの呼び出し方が分からなかったもので・・・・
いろいろご教授有難うございました。

No.6
- 回答日時:
#3です。
ご質問の意味を「直前のレコードを参照したい」のかと誤解していました。同じデータを入力したいのであれば。Dim pname As String
Private Sub Form_AfterUpdate()
RecordItem
End Sub
Private Sub Form_Current()
Form_フォーム2.namex = pname
If IsNull(Form_フォーム2.xname) Then
Form_フォーム2.xname = pname
End If
RecordItem
End Sub
Public Sub RecordItem()
On Error GoTo skip1
pname = Form_フォーム2.xname
skip1:
End Sub
「xname」テキストボックス一つだけですが、必要なだけ増やしてください。
フォームにテキストボックスを必要な数だけこしらえて、これに
各データを一時置きし、ご教授のようにデータのやり取りをする様に
しました。問題解決です。有難うございました。
No.5
- 回答日時:
コピーしたいフィールドの既定値を新規レコードの時に更新。
これでも目的は達成されると思います。
常に、一つ手前のレコードをコピーなんてありえない話ですから・・・。
この回答への補足
ご回答有難うございます。
データ入力でロットNo.(主キー)以外は全く同じなのがいくつも続く
時があります。スイッチを利用してロットNo.以外のデータを
コピーしたいのです。・・・・・
有難うございました。規定値は使わずにテキストボックスにダイレクトにデータがコピーできるようにし、スイッチ用のテキストボックスの
内容で一時保管していたデータを呼び出す様に致しました。
問題解決です。
No.4
- 回答日時:
Accessでは、[Ctrl][Shift][2]と押せば、一つ前のフィールドがコピーされます。
で、この機能を利用するのも一つの手です。
で、私は、[F6]を押せば一つ前のフィールドがコピーされるようにしています。
SendKeys "^("")", False
つまり、[F6]キーが押されたら、このコードが走る仕掛けです。
で、結構、ユーザは多用しているようです。
有難うございます。
ファンクション・キーへの割付は同一レコード内で、
次のフィールドへのデータのコピーによく使用しておりました。
今、困っているのは、前レコードの同一フィールドの内容を
表示させる事なのですが、それも複数フィールドを同時に
と考えております。
フォームのテキストボックスの内容を一時保管する方法が
分かればいいのですが・・・・

No.3
- 回答日時:
アクセスには「レコード移動前」「レコード移動後」でイベントが発生しないので、面倒ですが、以下のコードで一応前のデータを表示できます
Dim pid, pname As String
Private Sub Form_Current()
Form_フォーム2.idx = pid
Form_フォーム2.namex = pname
End Sub
Private Sub id_AfterUpdate()
RecordItem
End Sub
Private Sub id_Enter()
RecordItem
End Sub
Private Sub xname_AfterUpdate()
RecordItem
End Sub
Private Sub xname_Enter()
RecordItem
End Sub
Public Sub RecordItem()
On Error GoTo skip1
pid = Form_フォーム2.id
pname = Form_フォーム2.xname
skip1:
End Sub
idとnameをidx、namex非連結テキストボックスに表示するだけですが、適当にチューニングしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) 非表示にしたい行をグループ化して折り畳み 4 2022/09/17 20:17
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- その他(Microsoft Office) VBA CSV出力について 3 2023/04/19 14:14
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
このQ&Aを見た人はこんなQ&Aも見ています
-
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
Accessでフォーム上に 直前の データを表示させるには
Access(アクセス)
-
1つ前のレコードのフィールドをコピーするVBAについて
Access(アクセス)
-
-
4
ACCESSでのひとつ前レコードの求め方について
その他(Microsoft Office)
-
5
テキストボックスに入力した値を、次に入れ替えるまで保持させたいのですが、どのような方法があるでしょう
Access(アクセス)
-
6
「Access」のフォームで、同じデータの入力の手間を省くには?
Access(アクセス)
-
7
2つ目のレコードの値を取得するには?
Access(アクセス)
-
8
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
9
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
10
空白はダメというエラーの表示(アクセス)
その他(データベース)
-
11
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
12
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
13
accessで未入力の場合にメッセージボックスを表示したい
Access(アクセス)
-
14
accessでイベントを中止するようなコマンドはあるのでしょうか?
その他(データベース)
-
15
AccessでIDを入力したら他の項目も自動で表示
Access(アクセス)
-
16
Access2010 Enterで次テキストへ移動
その他(Microsoft Office)
-
17
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
18
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
19
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
20
Accessの桁区切りについて教えてください。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
前レコードのテキストボックス...
-
ファイルメーカー「出力ファイ...
-
新規レコードをボタンで開くと...
-
アクセスデータベースのUnicode...
-
Accessのフォームへ、記録者の...
-
ADOで現在のレコードの次のレコ...
-
PSQLで-- More --を表示しない方法
-
ファイルメーカーでレコード複...
-
ファイルメーカープロでレコー...
-
こんなクエリを作りたいのですが
-
差込印刷で顧客別に複数行のデ...
-
ファイルメーカーで最大シリア...
-
レコードセレクタ、移動ボタン...
-
VSAM
-
csvデータをレコード毎に改行さ...
-
accessのマクロで「一時変数設定」
-
ACCESS2002のタブオーダーで、...
-
Filemakerで検索フォームを作り...
-
AccessからWordにデータだけコ...
-
ファイルメーカー印刷時の改ページ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
差込印刷で顧客別に複数行のデ...
-
ACCESSのフォームで次のレコー...
-
Accessのレポートの集計に条件...
-
ACCESSでオフセットを求める方法
-
「ファイルメーカー」で宛先の...
-
日付の加算・減算ってできますか?
-
ADOで現在のレコードの次のレコ...
-
ファイルメーカーで最大シリア...
-
ファイルメーカーで該当件数を...
-
ラベルをクリックしてレコード...
-
accessのマクロで「一時変数設定」
-
ホスト汎用機でのNDBアクセス方法
-
FileMakerで全レコードを対象外...
-
FM8で文字列の連結
-
アクセスデータベースのUnicode...
-
ファイルメーカーで一括入力す...
-
PSQLで-- More --を表示しない方法
-
Accessで最終レコードの削除に...
-
ファイルメーカーで検索条件の...
-
ACCESSでのランダムのレ...
おすすめ情報