ここから本文です

【続き】VBAでフォームのリストボックス内の行全体(複数列)を上下移動する方法

esp********さん

2013/9/3011:27:26

【続き】VBAでフォームのリストボックス内の行全体(複数列)を上下移動する方法

前に下記URLで質問させて頂いた者です。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1411409405...

ご回答頂いた皆様のコードを素に実行したのですが、下記の問題が発生しております。

頂いたコードで実行したところ、リストボックス(名前:ListBox_SofuFileName)上での表示順番は変わっておりました。
しかし、ListBox_SofuFileNameのソースであるAAAテーブルのレコードは順番が変わっておりませんでした。
(順番フィールドのみ更新されていました)

■上ボタン押下
'項目並び替え(UP)
Private Sub cmd_Up_Click()

Dim SofuFile As String

If ListBox_SofuFileName.ItemsSelected.Count = 0 Then Exit Sub
'選択行が1行目ならEND
If ListBox_SofuFileName.ListIndex = 0 Then Exit Sub
'行の入れ替え
Call RowExchenge(ListBox_SofuFileName.ListIndex, Me.cmb_SofuFile)

'順フィールド昇順並び替え
Dim RS As DAO.Recordset
Dim SQNO As Variant
Dim strSQL As String


strSQL = "SELECT LBID FROM [" & AAA & " ] "
'「LBID 」:順フィールド名,「AAA 」:リストボックスに表示元のテーブル名
SQNO = 0
Set RS = CurrentDb.OpenRecordset(strSQL)

Do Until RS.EOF = True
SQNO = SQNO + 1
RS.Edit
RS("LBID") = SQNO
RS.Update
RS.MoveNext
Loop
RS.Close
Set RS = Nothing

End Sub

Private Sub RowExchenge(RowNum, SofuFile As String)

'RowNumレコードを退避
CurrentDb.Execute "UPDATE [" & SofuFile & " ] SET LBID=-1 WHERE LBID=" & RowNum
'RowNum+1レコードをRowNumレコードに更新
CurrentDb.Execute "UPDATE [" & SofuFile & " ] SET LBID=" & RowNum & " WHERE LBID=" & RowNum + 1
'退避レコードをRowNum+1レコードに更新
CurrentDb.Execute "UPDATE [" & SofuFile & " ] SET LBID=" & RowNum + 1 & " WHERE LBID=" & -1

'リストボックス再描画
ListBox_SofuFileName.Requery

End Sub

どうしたら、AAAテーブルの順番も変わるのでしょうか?
(初歩的な質問で本当に申し訳ございません)

閲覧数:
407
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hat********さん

編集あり2013/10/110:26:33

Accessのようなデータベースソフトではテーブルで並び順というものを保持していません。
クエリで並び替えを指定するか、フォームやレポートのプロパティで並び替えを指定するなどします。
詳細は下記を参照してください。

[ACC2003] MDB のレコードの並び順について
http://support.microsoft.com/kb/834927/ja


追記---
テーブルのデザインビューで「LBID」の「インデックス」プロパティを「はい(重複あり)」に設定して、
メニューの[表示]-[インデックス]をクリックして、設定画面で LBID をドラッグして一番上に移動させれば、
LBID の昇順で並びます。
が、上記のリンク先でも言われてるようにクエリなどで明示的に並べ替えを指定するのが確実です。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

yc_********さん

2013/9/3020:52:18

前の方がおっしゃってるとおり、
ACCESSの並び順は使用者が並び順の指示を出さないと希望通りになりません。

今回の場合、追加したフィールド[LBID]を主キーにすればテーブルのビュー画面でも指示順に並びますよ。
ですが、LBIDはあくまでも作業用にと追加した汎用的なフィールドであって、
主キーにしてもいいものかどうかは、それこそ使用者が決定することになると思います。
(きっと、値が重複してしまいエラーになると思われます)

ベストは、クエリで並び順を指示してご覧になる方法だと思います。

採用ありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる