<Access>基本からVBAまでまるわかり!独学時に使える参考書

【AccessVBA】サブフォームの行番号を任意で入れ替えるコードとやり方

スポンサーリンク
アクセス【Access】

 

エクセルで見積書を作っている時にいつも思っていたことがあります。

 

あ!この途中に一項目入れ忘れた!とか思うことが多々ありました。

 

もちろん、行挿入などをして対応するのですが、行挿入するとレイアウトが崩れるので削って直したりします。

 

そういうのを考えずに印刷すると2ページになって白紙が出てきたり…なんてことありませんか??

 

せっかくなので、そういう機能を持たせることができればいいなぁと思いましたが、コードを組める知識がなかったので、ネットで探しました。

 

親切な方がいらっしゃるんですね。

 

教えてくださる方がいました。こちらのHatenaChipsさんというサイトです。

 

帳票サブフォームで行番号フィールドの連番を維持する
一対多の関係のデータをメイン/サブフォーム形式で入力する場合、サブフォームのデータに連番(行番号)を振りたい。途中のレコードを削除しても欠番がでることなく連番を維持したい。また、任意に並び替えをしたい。 上記のような仕様を実現する方法を紹介します。  連番(行番号)に関しては、テーブルに持たせなくても、計算やVB...

 

さっそく読んで、サンプルをダウンロードしてバラバラにして解読しました。

 

すごく作りこんでいるのでとても勉強になって参考になりました。

 

私もこういうふうにアイデアも交えて作れたらいいなと思います。

 

HatenaChipsさんのサイトで理解できる方はそれでいいですが、私なりにやっと理解したので早速作りながら解説します。

 

まずは、簡単にということで順番テーブルを作ります。

 

 

とくにいじったところはありません。

 

データビューにするとこんな感じです。

 

簡単にくだものリストにしてみました。順番、品名は自分で入力します。

 

 

次はクエリです。

 

 

クエリもテーブルをそのまま利用するので特にいじったところはありませんが、順番は『昇順』に設定してください。

 

フォームもそのまま作り、使いました。

 

まずは順番の説明から入ります。

 

 

ボタンは『上へ』、『下へ』、『削除』、『挿入』を作りました。

 

『上へ』のコードはこちらです。

 

考え方
最初に1と新しいレコードじゃないか判断します。 それ以外なら(例題どおりなら2~10)今カーソルがある位置を確認後、-1します。 そして再クエリする。

 

ちょっと待って?!

 

再クエリすると一番上にカーソルが戻るんですけど?!

 

ということで、戻らないようにします。

 

それが、Dim varBM As Variantから続くコードです。

 

Me.Bookmarkを使うと、再クエリする直前にあったレコードに戻ります。

 

これは他でも十分使えそうですね♪

 

次は『下へ』です。

 

 

考え方
最初に最終レコードでないか確認します。 それ以外なら(例題どおりなら1~9)今カーソルがある位置を確認後、+1します。 そして再クエリする。

 

これで『上へ』と『下へ』ができました。

 

次は削除と挿入です。次回公開をお楽しみ♪