Access VBA質問箱 IV

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

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


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

【6953】前後のデータをスクロールで表示 マサ 05/12/12(月) 11:06 質問[未読]
【6956】Re:前後のデータをスクロールで表示 小僧 05/12/12(月) 15:40 発言[未読]
【6959】Re:前後のデータをスクロールで表示 マサ 05/12/12(月) 21:08 質問[未読]
【6960】Re:前後のデータをスクロールで表示 小僧 05/12/13(火) 9:21 発言[未読]
【6963】Re:前後のデータをスクロールで表示 マサ 05/12/13(火) 13:45 質問[未読]
【6965】Re:前後のデータをスクロールで表示 小僧 05/12/13(火) 14:43 回答[未読]
【6974】Re:前後のデータをスクロールで表示 マサ 05/12/14(水) 13:15 お礼[未読]
【6975】Re:前後のデータをスクロールで表示 小僧 05/12/14(水) 13:50 回答[未読]
【6976】Re:前後のデータをスクロールで表示 マサ 05/12/14(水) 14:04 お礼[未読]

【6953】前後のデータをスクロールで表示
質問  マサ  - 05/12/12(月) 11:06 -

引用なし
パスワード
   マサと申します。データ表示でスクロールして前データや次データをコマンドボタンで表示したいのですがよい方法をお教え下さい。
 リストボックスから任意のデータを選択してデータを表示してから次ボタンをクリックして実行したのですが上手く行きませんでした。
Private Sub 次_Click()

  DoCmd.GoToRecord , , acNext

End Sub

以上のように例題を見ながらコーディングしましたが2105のエラーが出て上手くできませんでした。宜しくお願いします。

【6956】Re:前後のデータをスクロールで表示
発言  小僧  - 05/12/12(月) 15:40 -

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

>  DoCmd.GoToRecord , , acNext

こちらのコードですと

連結フォーム時に、次のレコードを表示したい場合

に使われますが、マサさんの行いたい事はそういう事なのでしょうか?
(非連結のフォームですと、ご提示されたように実行時エラー'2105'が発生します。)

コマンドボタンを押すとリストボックスの次のアイテムが選ばれるようにしたい、
という事でしたら、

Private Sub 次_Click()
Dim i As Long
  i = Me.リスト0.ItemsSelected(0) + 1
  Me.リスト0.Value = Me.リスト0.ItemData(i)
End Sub

※最後のアイテムを選択した状態で実行するとエラーになります。

【6959】Re:前後のデータをスクロールで表示
質問  マサ  - 05/12/12(月) 21:08 -

引用なし
パスワード
   ▼小僧 さん:
 早速のご返事 ありがとうございます。リストボックスを使わない処理の場合にはどのようにすればよいのですか。例えば 得意先マスタのメンテナンス画面で 現在表示している得意先コードの次のコードや1つ前のコードのデータを表示したい場合 movenextやmovepreviousのコマンドを使うのですか。 一から十までお聞きして申し訳ありませんがお教えください。

【6960】Re:前後のデータをスクロールで表示
発言  小僧  - 05/12/13(火) 9:21 -

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

>得意先マスタのメンテナンス画面で 
>現在表示している得意先コードの次のコードや
>1つ前のコードのデータを表示したい場合 

こちらのフォームはどのような作りになっていますでしょうか?

連結フォームで行っているのか、
非連結のフォームで行っているのかによって動作は変わりますね。

非連結のフォームで行っている場合は
テーブルの情報などもあった方が回答がつきやすくなるかもしれません。

【6963】Re:前後のデータをスクロールで表示
質問  マサ  - 05/12/13(火) 13:45 -

引用なし
パスワード
   小僧さん。
お手数をお掛けします。
フォームは非連結のフォームです。得意先のテーブルは次の通りです
得意先コード:テキスト型
得意先名  :テキスト型
住所    : ↑


以上のようになっています。どうぞ宜しくお願いします。

【6965】Re:前後のデータをスクロールで表示
回答  小僧  - 05/12/13(火) 14:43 -

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

フォームに以下のものを用意して下さい。

リストボックス:lst得意先コード
値集合ソース :SELECT テーブル名.得意先コード FROM テーブル名;

テキストボックス:txt得意先コード
         txt得意先名
         txt住所

コマンドボタン : 次へ
         前へ

フォームの読み込み時の右側の「…」をクリックしてコードビルダを選択。
表示された画面に

Private Sub Form_Load()
  Call xxx(DLookup("得意先コード", "テーブル名"))
End Sub

Private Sub lst得意先コード_AfterUpdate()
  Call xxx(Me.lst得意先コード.value)
End Sub

Private Sub 次へ_Click()
'要参照 Microsoft DAO x.x Object Library
Dim RS As DAO.Recordset
Dim strCode As String
  
  Set RS = CurrentDb.OpenRecordset("テーブル名", dbOpenSnapshot)
  strCode = Me.txt得意先コード.value
  
  RS.FindFirst "得意先コード = '" & strCode & "'"
  RS.MoveNext
  If Not RS.EOF Then strCode = RS![得意先コード]
    Call xxx(strCode)
  RS.Close
  Set RS = Nothing
End Sub


Private Sub 前へ_Click()
'要参照 Microsoft DAO x.x Object Library
Dim RS As DAO.Recordset
Dim strCode As String

  Set RS = CurrentDb.OpenRecordset("テーブル名", dbOpenSnapshot)
  strCode = Me.txt得意先コード.value
  
  RS.FindFirst "得意先コード = '" & strCode & "'"
  RS.MovePrevious
  If Not RS.BOF Then strCode = RS![得意先コード]
    Call xxx(strCode)
  RS.Close
  Set RS = Nothing
End Sub

Private Function xxx(strCode As String)
  Me.lst得意先コード = strCode
  Me.txt得意先コード = strCode
  Me.txt得意先名 = DLookup("得意先名", "テーブル名", "得意先コード ='" & strCode & "'")
  Me.txt住所 = DLookup("住所", "テーブル名", "得意先コード ='" & strCode & "'")
End Function


以上を記述して、動作を確認されてみて下さい。

【6974】Re:前後のデータをスクロールで表示
お礼  マサ  - 05/12/14(水) 13:15 -

引用なし
パスワード
   小僧さん。
 ありがとうございました。お蔭で前後のデータ表示が上手く出来るようになりました。
 因みに リストボックスは必ずしも必要はありませんネ。
 もう1つ教えて頂きたいのですが、スクロールのテストをして初めて気が付いたのでが 得意先データの表示順序が昇順になっていません。
 テーブル:得意先マスタ
 得意先コード:テキスト型 インデックス(重複なし)
 テーブルを表示した順序
 1
 11
 123
 2
 22
 3
 これをスクロールで表示すると
 1
 2
 3
 11
 123
 と なります
 何故ですか。初歩的なこてで申しわけありませんがお教え下さい

【6975】Re:前後のデータをスクロールで表示
回答  小僧  - 05/12/14(水) 13:50 -

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

>得意先データの表示順序が昇順になっていません。

元々、Access (に限らずデータベース) において、並び順というものは存在しません。

Microsoft サポートページより MDB のレコードの並び順について
http://support.microsoft.com/default.aspx?scid=kb;ja;834927


現在規則通りにならんでいるデータも、ある日突然狂ってしまう場合があります。


>得意先コード:テキスト型 インデックス(重複なし)
>テーブルを表示した順序

該当のテーブルをデザインビューで開き、
ツールバーの [表示] → [インデックス] でインデックスの状態を確認されてみてください。

「並び替え順序」という項目を指定しているため、
テーブルの表示においては並び順が保証されています。

ところが、先に当方が提示させて頂いたコードには何も指定せずにテーブルを開いているために、
並び順に関しては何も保証がされない事になってしまいます。

そこで Recordset を Open する前に並び順について明記してみましょう。

Private Sub 次へ_Click()
'要参照 Microsoft DAO x.x Object Library
Dim RS As DAO.Recordset
Dim strSQL As String
Dim strCode As String
  
  strSQL = "SELECT * FROM テーブル名 ORDER BY 得意先コード"
  
  Set RS = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
  strCode = Me.txt得意先コード.Value
  
  RS.FindFirst "得意先コード = '" & strCode & "'"
  RS.MoveNext
  If Not RS.EOF Then strCode = RS![得意先コード]
    Call xxx(strCode)
  RS.Close
  Set RS = Nothing
End Sub

【6976】Re:前後のデータをスクロールで表示
お礼  マサ  - 05/12/14(水) 14:04 -

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

本当にありがとうございました。助かりました。ありがとう御座いました。

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