帳票フォームに簡易な行番号(1,2,3…)を表示する

f:id:accs2014:20170806011304p:plain:right:w400

 まずは結果から見てみます。
 右のフォームはメインフォーム/サブフォーム形式になっていて、サブフォームは帳票フォームとなっています。
 その左端に「行番号」という値が表示されています。


f:id:accs2014:20170806011301p:plain:right:w400

 サブフォームの並べ替えを「商品コード」の降順に変更してみました。
 しかし「行番号」の表示内容は変わらず、上から1,2,3…となっています。


f:id:accs2014:20170806011257p:plain:right:w400

 そのまま下にスクロールしてみますと、7番以降の数字が現れます。
 メインフォームの固定位置に数字を表示させているようなやり方ではないことがわかります。


f:id:accs2014:20170806011252p:plain:right:w400

 さて、このコントロールの中身が気になるところですが、これは非連結のテキストボックスで、コントロールソースは次のようになっています。



=IIf(IsError([Bookmark]),"",AscW([Bookmark]) Mod 256+1)

 フォームの行ごとに異なる値が割り振られるBookmarkプロパティを利用しています。Bookmarkプロパティをそのまま表示するとただの記号(文字列型)なのですが、文字コードの値に変換すると連番になります。
 ただし、その値は1から始まるとは限らず、並べ替えのたびに変わることもあります。それでも規則性はあり、256で割った余りに1を足すことで1から表示することができます。しかし100%確実とは言い切れません。また、256行目の次は1に戻ってしまうのも欠点ですが、ただの表示用なので実害はないでしょう;-o-)
 注意点ですが、レコードを削除したときに残ったレコードの番号に変更はなく、削除されたレコードの番号は欠番のままとなります。ただし並べ替えをしたときには番号が振り直され、結果的に欠番が埋められます。