MS Access Tips/Sample and VBA and Blog customize etc...

サブフォーム間のスクロールを同期させる方法

タイトル画像

フォーム上に2つのサブフォームを並べて配置して、片方をスクロールするともう一方のサブフォームを同期してスクロールさせたいという要望が出ることがあります。

Windows API を使ってスクロールバーの位置の取得と設定が必用で非常に難易度の高いものですが、YU-TANG 氏がホームページでサンプルを紹介していました。しかし、そのホームページは現在閉鎖されています。

そこで、YU-TANG 氏に転載と改変の許可をお願いした所、快諾いただいたので、こちらで公開いたします。

難易度:

経緯

Windows API を使ってスクロールバーの位置の取得と設定に関しては、Stephen Lebans 氏が下記でモジュールを公開していました。

SetGetSB

それを元に、YU-TANG 氏が応用例として、サブフォーム間のスクロール同期のサンプルを公開していましたが、現状はそのサイトは閉鎖されています。

WEBアーカイブのページ(サンプルのダウンロードはできません。)
サブフォーム間のスクロールを同期させる方法 | YU-TANG's MS-Access Discovery

ただ、上記の2つのモジュールは、Access2003までの対応で、2007以降では動作しませんでした。YU-TANG 氏のサンプルを hatena が一部改変して、Access2007以降のバージョンでも動作するようにしたものが今回公開するサンプルです。(改変といっても2行ほど変更追加しただけですが)

謝辞

有用なモジュールを公開されている Stephen Lebans 氏、サンプルの転載、一部改変を快諾していただいた YU-TANG 氏に感謝します。

サンプルのダウンロード

サブフォームのスクロール同期のサンプル

サンプルファイルが下記からダウンロードできます。
FrmSyncScrl_07.zip (Access 2007-2010 形式 - 590kb)
FrmSyncScrl.zip (Access 2002-2003 形式 - 581kb)
FrmSyncScrl_2k.zip (Access 2000 形式 - 581kb)

拍手する

3 Comments

アロハ says..."最下段に来たときの処理"

お世話になります。
サンプルを拝見させていただきました。どうもありがとうございました。
動作的には希望通りで解決しているのですが、1つだけわからないことがあります。
サンプルの「frmMainPM」ですが、マウスのホイールで最下段まで表示したところで、下へグリグリするとアクティブの方のサブフォームだけが、1段ずれて下にずれてしまいます。
帳票フォームの特性なのかマウスのホイールで下へグリグリするとそれ以下を表示してしまいます。
最下段でずれてしまうのはどうにもならないのでしょうか。
ご指導の程、よろしくお願いします。

2016.08.14 19:11 | URL | #7UwZw232 [edit]
hatena says..."re:最下段に来たときの処理"

> サンプルの「frmMainPM」ですが、マウスのホイールで最下段まで表示したところで、下へグリグリするとアクティブの方のサブフォームだけが、1段ずれて下にずれてしまいます。
> 帳票フォームの特性なのかマウスのホイールで下へグリグリするとそれ以下を表示してしまいます。
> 最下段でずれてしまうのはどうにもならないのでしょうか。

その現象についてはサンプルを作成してみて私も気づいたのですが、
データシートビューだとそのような現象が発生しないので、
どうも帳票フォームの特性みたいですね。

他にも下記のような現象も発生します。

スクロールバーのボタンをマウスでドラッグして一番下まで移動させると、
最終行までスクロールされます。ここまでは別サブフォームは同期してます。
そこで、下の▼ボタンをクリックすると、最終行が上まで移動しますが、
別サブフォームは移動しません。

この状態のとき、スクロールバーの位置情報を調べてみると2つのサブフォーム感で変化がないので、APIのスクロールバー位置情報を利用する方法では対処しようがないですね。

ちなみに、データシートビューでスクロールバーのボタンをマウスで最後までドラッグすると、最終行が表示部分の一番上まで移動します。

どうしても最終行まで完全同期したいなら、データシートビューでということになりますね。

2016.08.15 12:25 | URL | #5uE6dEgY [edit]
アロハ says...""

お世話になります。

ご指摘いただいた通り、データシートビューで対応することで目的が達成できました。
今回はとても勉強になりました。
どうもありがとうございました。

hatenaさんのサイトには参考になるネタがたくさんあるので、いろいろ勉強させていただきます。

またよろしくお願いします。

2016.08.23 20:47 | URL | #uvAcD55g [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/497-0e5a0f9e
該当の記事は見つかりませんでした。