Microsoft Access 掲示板

アクセスウィンドウサイズの固定

3 コメント
views
4 フォロー

いつもお世話になります。

タイトルの件、hatena様が過去に公開されています以下コードで
作成してみました。
私のPC(Win10、office2010)では正常(画面ほぼ真ん中)に動作しますが、
他のPC(Win10、office2013)では画面左上に位置した状態です。

標準モジュール

Option Compare Database
Option Explicit

#If VBA7 Then
    Public 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
    Public Declare PtrSafe Function GetSystemMenu Lib "user32" _
                                    (ByVal hwnd As LongPtr, _
                                     ByVal bRevert As Long) As LongPtr
    Public Declare PtrSafe Function RemoveMenu Lib "user32" _
                                    (ByVal hMenu As LongPtr, _
                                     ByVal nPosition As Long, _
                                     ByVal wFlags As Long) As Long
#Else
    Public Declare PtrSafe Function SetWindowPos Lib "user32" _
                             (ByVal hwnd As Long, _
                              ByVal hWndInsertAfter As Long, _
                              ByVal X As Long, ByVal Y As Long, _
                              ByVal cx As Long, _
                              ByVal cy As Long, _
                              ByVal wFlags As Long) As Long
    Public Declare PtrSafe Function GetSystemMenu Lib "user32" _
                            (ByVal hwnd As Long, ByVal fRever As Long) As Long
    Public Declare PtrSafe Function RemoveMenu Lib "user32" _
                            (ByVal hMenu As Long, ByVal nPosition As Long, _
                             ByVal wFlags As Long) As Long
#End If

Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const HWND_TOP = &H0
Public Const SC_SIZE = &HF000
Public Const SC_MAXIMIZE = &HF030
Public Const SC_CLOSE = &HF060
Public Const SC_RESTORE = &HF120
Public Const MF_BYCOMMAND = &H0&

フォームを開く時
Private Sub Form_Open(Cancel As Integer)
    #If VBA7 Then
        Dim hwnd As LongPtr
    #Else
        Dim hwnd As Long
    #End If
 
    hwnd = Application.hWndAccessApp
    SetWindowPos hwnd, HWND_TOP, 0, 0, 800, 600, SWP_NOMOVE
    hwnd = GetSystemMenu(hwnd, 0)
    RemoveMenu hwnd, SC_SIZE, MF_BYCOMMAND
 
    'ナビゲーションウィンドウを閉じる
    DoCmd.NavigateTo "acNavigationCategoryObjectType", ""
    DoCmd.RunCommand acCmdDocMinimize
 
End Sub

オフィスの問題でしょうか?
ご教授のほどよろしくお願い致します。

kitty
作成: 2020/03/18 (水) 13:42:05
最終更新: 2020/03/18 (水) 15:11:24
通報 ...
1

SetWindowPos hwnd, HWND_TOP, 0, 0, 800, 600, SWP_NOMOVE

上記の部分で引数に SWP_NOMOVE を設定しています。これは位置は変更しないという意味です。
また、Accessは前回終了したときの位置を覚えておいて、次に開く時にその位置で開きます。

左上に開く場合は、Accessウィンドウを中央に移動させてから終了してください。
次回からその位置で開くはずです。

2
kitty 2020/03/18 (水) 16:09:02 e4054@a3086

hatena様
お返事ありがとうございます。

>左上に開く場合は、Accessウィンドウを中央に移動させてから終了してください。
>次回からその位置で開くはずです。

確かに終了時の場所で開きました。

この場合ユーザーは一人だと問題ないのですが、私が作成しているデータベースは10人以上で共有しています。なので、
>左上に開く場合は、Accessウィンドウを中央に移動させてから終了してください。
が徹底できないリスクがあります。

できれば、位置移動不可、サイズ変更不可としたいのです。
何か良い方法はございますでしょうか?

3
hatena 2020/03/18 (水) 17:26:55 修正 >> 2

できれば、位置移動不可、サイズ変更不可としたいのです。
何か良い方法はございますでしょうか?

中央寄せは、下記を参考にしてください。

Accessウィンドウをディスクトップの中央に表示する - hatena chips

サイズ変更不可は、下記を参考にしてください。

Accessウィンドウを表示しない方法 Access2007以降版 - hatena chips

上記の内容を理解して組み合わせる必要はありますが。