● Access2000Tips Win32 API サブフォームの大きさをAccessウィンドウの大きさの変化に伴いフィットさせたり、ウィンドウのサイズ自体を変更したり、最前面を固定化したり、のサンプルダウンロード
  
  

※関連記事
Access2000Tips Win32 API サブフォームの大きさをAccessウィンドウの大きさの変化に伴いフィットさせたり、ウィンドウのサイズ自体を変更したり、最前面を固定化したり、の方法

★ サンプルのダウンロード
(ESETでウィルスチェックしてあります)
(01)「サブフォームフィット例.mdb
(02)「Access2000ランタイムダウンロード

※ランタイムはバージョン2000のものです。Access2000を持っていない方でも、サンプルのmdb(ここでは「サブフォームフィット例.mdb」)の動作の確認をしていただけます。
ただ、Win10で動くかはまだチェックしていません。仮想マシンのXPなどで動かすほうが確実かと思います。
なお、仮想マシンの中ではAccessランタイムでの動作では、「Accessウィンドウ(ガワ)の大きさを変える」ボタンでエラーになってしまいました。そのほかは動くようです。仮想マシンでないマシン上で正常動作するかもチェックはしていません。
ランタイムではないAccess2000ならエラーにはならないと思います。
  
  

  

  
   ↑
   ↓
  

  

★ フォームのイベントプロシージャの内容

  
  

★ Win32APIのプログラム
以下のコードを、Accessの標準モジュールを1個つくってコピペして使ってください。
イベントプロシージャや標準モジュールのプロシージャから呼び出せば、以下のようなことができます。

(a)サブフォームの大きさをAccessウィンドウの大きさの変化に伴って
  連動フィットさせる場合の、最小化時のエラーやCPU使用率100%の回避
(b)自mdbのウィンドウのサイズ自体を変更
(c)他mdbのウィンドウのサイズを変更
(d)メモ帳などの他のソフトのウィンドウのサイズをAccessから変更
(e)自mdbの画面(Access画面丸ごと)の「最前面」設定の固定化
(f)デスクトップに開いている各ソフトのウィンドウを左右に並べる(4分割以上)
(g)同じく上下に並べる

※ 最後の2つの(f)と(g)は、事前に、VBEの参照設定にて「Microsoft Shell Controls And Automation」に照設定をしておきます。APIとは関係ありません。

  
  

★ サブフォームの大きさを、「ガワ(親)」のAccessのアプリケーションウィンドウの大きさの変化に合わせて、フィットさせるコードは以下の通りです。
フォームの「リサイズ」のイベントに書きます。

以下のコードをサブフォームを持つフォームに書きます。
「Private Sub Form_Resize()」と「End Sub」は抜いて、中身だけをコピペすればOKかと思います。

フィットさせること自体にはWin32APIは必要ないのですが、最小化するときなどにエラー回避などで必要になります。(「frm_size_State01()関数による状態チェックで。)

  
以下、参考。
  

★以下、64bitのExcelやAccess用の簡単な事例
(最前面にする機能などはなし。ガワのウィンドウサイズの変更のみ。)

MOUGのサンプルを64bit用にしただけのものです。
Excelファイルを開いたときに、Auto_Openプロシージャにより、
ガワのサイズを「1000×640」に自動変更しています。

64bitのAccessやWordなどでも動くと思います。

64bitのAccessでは、AutoExecマクロに「プロシージャの実行」で自動実行させたら
ちゃんと動きました。

  

  

★ 以下、最初のAccessMDBファイルの32bit用のコードの、64bit版。
(最前面に固定する機能もあり。ガワのウィンドウサイズの変更ももちろんあり。通常はAPIのウィンドウ操作は最前面固定もよく求められるので、基本、こちらを使います。)

32bit用のDeclare文の「Function」の前に、「PtrSafe 」を付けるコード
   ↓
Public Declare PtrSafe Function GetForegroundWindow Lib "user32" () As Long

Public Declare PtrSafe Function GetWindowPlacement Lib "user32" (ByVal hWnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare PtrSafe Function SetWindowPlacement Lib "user32" (ByVal hWnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long

Declare PtrSafe Function FindWindow% Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As Any, _
ByVal lpCaption As Any)
Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hWnd As LongPtr, _
ByVal hWndInsertAfter As LongPtr, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
  

  

「hWnd 」や「hWndInsertAfter 」などのポインタ系の値のデータ型を「Long」から「LongPtr」に変更するコード
(LongPtrは64bitならLongLong、32bitならLongに自動変換してくれるデータ型だそうです。64bitしか絶対に使わないなら、LongPtrをLongLongにしてもOK。逆に、「32bitAccessでも使うかも?と心配なら、LongPtrのほうがいいそうです。)
   ↓
Public Declare PtrSafe Function GetWindowPlacement Lib "user32" (ByVal hWnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare PtrSafe Function SetWindowPlacement Lib "user32" (ByVal hWnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long

Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hWnd As LongPtr, _
ByVal hWndInsertAfter As LongPtr, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long