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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次はクエリです。

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

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

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

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

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

考え方

最初に1と新しいレコードじゃないか判断します。

それ以外なら(例題どおりなら2~10)今カーソルがある位置を確認後、-1します。

そして再クエリする。

ちょっと待って?!

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

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

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

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

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

次は『下へ』です。

考え方

最初に最終レコードでないか確認します。

それ以外なら(例題どおりなら1~9)今カーソルがある位置を確認後、+1します。

そして再クエリする。

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

最後までお読みいただきありがとうございました。

関連記事