Access VBA質問箱 IV

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

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


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

【10284】テキストボックスを新レコードに複写したい クロ 08/3/3(月) 23:04 質問[未読]
【10289】Re:テキストボックスを新レコードに複写し... 小僧 08/3/4(火) 12:38 回答[未読]
【10296】Re:テキストボックスを新レコードに複写し... クロ 08/3/6(木) 18:22 お礼[未読]

【10284】テキストボックスを新レコードに複写した...
質問  クロ  - 08/3/3(月) 23:04 -

引用なし
パスワード
   皆様、はじめまして。クロと申します。
3日ほど前に、仕事で突然アクセス97を使うことになった初心者です。
皆様のお知恵を拝借できればと思い、投稿させてもらいます。

1.使っているデータベースの概略
  ・mdbファイルをオープンすると、最初のレコードが表示される。
  ・レコードは、数個のテキストボックスからできている。
  ・数個のテキストボックスは、プルダウンメニューで文字列が入力できる
   ようになっている。
  ・レコード1から1000には、すでに文字列が入力されている。
  ・ここで新規レコードを追加のボタンをクリックすると、新しい1001番目の
   レコードに移る。1001番目のレコードのテキストボックスは、すべて何も
   入力されていない。
   通常は、プルダウンメニューを使用して、テキストボックスを入力して
   ゆく。

2.やりたいこと
  ・新規レコードを追加のボタンを押したときに、新規の1001番目のレコー
   ドに、今まで表示させていたレコードのテキストボックスの文字列を複写
   したい。

   例えば、今表示させているのが、レコードの100で、新規レコードを追加
   したら、レコード100のテキストボックスの文字列が、あたらしい1001番
   目のレコードにコピーされて表示してほしい。また、今までレコードが
   2000まで入力されていてレコード2000が表示されている場合は、新規レコ
   ードボタンを押すと、レコード2000のテキストボックスの文字列が、レコ
   ード2001に複写されて、表示されてほしい。

3.とりあえずやったこと。
  アクセスもプログラムも素人ですが、市販本を見て、今までのVBAのモジュー
  ルに追加をしました。
  やったことは、複数のイベントプロシージャで使えるkakariという変数を定
  義して、これに係というテキストボックスの内容をいれて、新規レコードの
  ボタンが押されたときに、新規レコードの係のテキストボックスに複写する
  、としたつもりです。
  新規レコードのボタンが押される前と後でUpdateを使用して、テキストボッ
  クスの内容を複写したつもりです.......(^^;)
  
Option Compare Database
Option Explicit
Dim kakari As String  ←追加

 途中略


Private Sub 係_BeforeUpdate(Cancel As Integer) ←追加

  kakari = Me!係 ←追加
 
End Sub ←追加


Private Sub 係_AfterUpdate() ←追加
 Me![係].DefaultValue = kakari ←追加

End Sub ←追加

  ★これを、追加しても全く新しいレコードには、テキストボックスの内容
   が複写されません。
   きっと、とても基本的なことでつまずいていると思います。
   おわかりの方、どうぞご教授ください。

  ★また、この程度のことならVBAをつかわずにコンボボックスの設定ででき
   るよ!というご提案でもうれしいです。

           長文、失礼しました。それでは失礼します。   クロ

【10289】Re:テキストボックスを新レコードに複写...
回答  小僧  - 08/3/4(火) 12:38 -

引用なし
パスワード
   ▼クロ さん:
こんにちは。

>アクセスもプログラムも素人ですが

プログラムをする上で大事なものの一つに、
どういった処理を行えば自分がやりたい結果を導き出せるかを
設計する(ロジックと言ったりします)事があります。


クロさんのロジックはなかなか面白いのですが、一つ残念な事があります。

BeforeUpdate も AfterUpdate も起きない場合
⇒ レコード選択をしたけれど、値を変えなかった場合

こちらについては 変数:kakari に値が入らないため
思ったとおりの動作にならないかと思われます。

もうちょっと考え方を整理して

新規ボタンを押した際に、今までカーソルのあったレコードの
「係」という値を新規レコードの「係」に代入する

という様な流れでは駄目でしょうか。

Private Sub cmd新規レコード追加_Click()
Dim kakari As String
  kakari = Me![係]
  DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
  Me![係] = kakari
End Sub


ただし、こちらですと

>  ・mdbファイルをオープンすると、最初のレコードが表示される。
>  ・ここで新規レコードを追加のボタンをクリックすると、新しい1001番目の
>   レコードに移る。1001番目のレコードのテキストボックスは、すべて何も
>   入力されていない。

という条件が守れなくなってしまいます。

「最初のレコードが表示されている」と状態と、
「ユーザが最初のレコードを選択した」と状態を
判別するのは非常にむずかしいですね。

【10296】Re:テキストボックスを新レコードに複写...
お礼  クロ  - 08/3/6(木) 18:22 -

引用なし
パスワード
    小僧 様

 クロです。いろいろ教えてくださり、どうもありがとうございます。
 ご提案の方法、その他を試してみたいと思います。
 どうもありがとうございました。

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