Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1227 / 2272 ツリー ←次へ | 前へ→

【8136】フォームのデフォルトに前のレコード値 うらめ 06/7/3(月) 16:48 質問[未読]
【8147】Re:フォームのデフォルトに前のレコード値 小僧 06/7/3(月) 17:51 発言[未読]
【8151】Re:フォームのデフォルトに前のレコード値 うらめ 06/7/4(火) 10:03 質問[未読]
【8153】Re:フォームのデフォルトに前のレコード値 小僧 06/7/4(火) 10:28 発言[未読]
【8156】Re:フォームのデフォルトに前のレコード値 うらめ 06/7/4(火) 11:07 質問[未読]
【8158】Re:フォームのデフォルトに前のレコード値 小僧 06/7/4(火) 11:31 回答[未読]
【8160】Re:フォームのデフォルトに前のレコード値 うらめ 06/7/4(火) 13:23 お礼[未読]

【8136】フォームのデフォルトに前のレコード値
質問  うらめ E-MAIL  - 06/7/3(月) 16:48 -

引用なし
パスワード
   まったくの初心者です、宜しくお願いします。
フォームにて次の新規レコード行くコマンドボタンを以下のようにしたいと思うのですが、可能でしょうか。

ある一部のフィールドだけデフォルトに前のレコードの値にしたい

【8147】Re:フォームのデフォルトに前のレコード値
発言  小僧  - 06/7/3(月) 17:51 -

引用なし
パスワード
   ▼うらめ さん:
こんにちは。

> フォームにて次の新規レコード行くコマンドボタンを
> 以下のようにしたいと思うのですが、可能でしょうか。

可能、不可能というお話でしたら可能です。

現在御自分でできている所までをご提示して頂けると
回答が付き易くなると思われますよ^^

【8151】Re:フォームのデフォルトに前のレコード値
質問  うらめ E-MAIL  - 06/7/4(火) 10:03 -

引用なし
パスワード
   ▼小僧 さん:

 小僧さん 宜しくお願いします。
初心者なのでコマンドボタンウィザードにて「レコードの複製」を
利用使用としました。

Private Sub 複製_Click()
On Error GoTo Err_複製_Click


  DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
  DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
  DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70

Exit_複製_Click:
  Exit Sub

Err_複製_Click:
  MsgBox Err.Description
  Resume Exit_複製_Click

このプログラムを利用できればと思うのは 素人考えなのでしょうか?

【8153】Re:フォームのデフォルトに前のレコード値
発言  小僧  - 06/7/4(火) 10:28 -

引用なし
パスワード
   ▼うらめ さん:
おはようございます。

>このプログラムを利用できればと思うのは 素人考えなのでしょうか?

自分もVBAを覚え始めの頃は(Excelですが)、
ソフトが勝手に作ってくれるコードを真似する事が多かったですね。
ですが、今回のAccess君が作ってくれたコードは
残念ながらかなり時代遅れの書き方になってしまっています。
(Access97以前の書き方です)

DoMenuItem というメソッドは 現在ですと
RunCommand というメソッドに置き換えられています。

以下英語のページですが敬遠なさらずに参考にされて下さい。

http://home.clara.net/tkwickenden/domenuitem.htm


>  DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
>  DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
>  DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70

は恐らく、

  DoCmd.RunCommand acCmdSelectRecord
  DoCmd.RunCommand acCmdCopy
  DoCmd.RunCommand acCmdPasteAppend

と置き換えられると思います。
(動作は未確認です、すみません)

なんとなく英語から理解できそうですよね。
レコードを選んで、コピーして、追加貼り付け…をしています。


さて、ここからが問題なのですが、

> ある一部のフィールドだけ
> 前のレコードの値

という点が問題になってくるため、
残念ながらこのコードは流用できません。

うらめ さんに下記2点をお尋ねします。

1) フォームのレコードソースはどのようになっていますでしょうか。
 テーブルの場合:「主キー」は設定していますか?
 クエリの場合:「並び順」は設定していますか?


2)「前のレコードの値」というのが少し曖昧なのですが、

  ・現在のレコードの1つ前
  ・最終レコードの1つ前

 のどちらなのでしょうか。

【8156】Re:フォームのデフォルトに前のレコード値
質問  うらめ E-MAIL  - 06/7/4(火) 11:07 -

引用なし
パスワード
   ▼小僧 さん:
 早速のご返事 ありがとうございます。
やはり 簡単にはいかないのですね。

>1) フォームのレコードソースはどのようになっていますでしょうか。
> テーブルの場合:「主キー」は設定していますか?
> クエリの場合:「並び順」は設定していますか?

テーブルに「記録ID」(オートナンバー)で設定してあります。
 
>2)「前のレコードの値」というのが少し曖昧なのですが、
>
>  ・現在のレコードの1つ前
>  ・最終レコードの1つ前

すみません「最終レコードの1つ前 」という意味です。

【8158】Re:フォームのデフォルトに前のレコード値
回答  小僧  - 06/7/4(火) 11:31 -

引用なし
パスワード
   ▼うらめ さん:
こんにちは。

初めにお聞きしておくべきだったのですが、
OSやAccessのバージョンによって使用できるコードが変わってきますので
ご質問をされる際には明記しましょうね^^

Access2000、Access2002をお使いでしたら
コードを表示させた状態で、ツールバーより

[ツール] → [参照設定] で

「Microsoft DAO x.x Object Library」

にチェックが付いているかどうかを確認されてみて下さい。

もしチェックの無いようでしたら、
リストから探して一番大きな値のもの選択して下さい。
(恐らく Microsoft DAO 3.6 Object Libraryがあると思います。)

Private Sub 複製_Click()
'要参照 Microsoft DAO x.x Object Library
Dim RS As DAO.Recordset
  
  DoCmd.GoToRecord Record:=acNewRec
  
  Set RS = Me.RecordsetClone
  RS.MoveLast
  'Me![DATA1] = RS![DATA1]
  'Me![DATA2] = RS![DATA2]
  RS.Close
  Set RS = Nothing
End Sub


先ほどの 複製_Click の所にそのままコピーしてみてください。

「DATA1」「DATA2」の所が

> ある一部のフィールドだけ

という部分に相当します。
ここはうらめさんの環境に合わせて設定して下さい。

【8160】Re:フォームのデフォルトに前のレコード値
お礼  うらめ E-MAIL  - 06/7/4(火) 13:23 -

引用なし
パスワード
   ▼小僧 さん:
 解決しそうです。
ご丁寧な 回答ありがとうございました。
これからもどんどん勉強していきたいと 思います。
ご指導 宜しくお願いいたします。
追記 
>「Microsoft DAO x.x Object Library」
は 3.6とありました。

1227 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078222
(SS)C-BOARD v3.8 is Free