いつもお世話になります。
タイトルの件、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
オフィスの問題でしょうか?
ご教授のほどよろしくお願い致します。
SetWindowPos hwnd, HWND_TOP, 0, 0, 800, 600, SWP_NOMOVE
上記の部分で引数に SWP_NOMOVE を設定しています。これは位置は変更しないという意味です。
また、Accessは前回終了したときの位置を覚えておいて、次に開く時にその位置で開きます。
左上に開く場合は、Accessウィンドウを中央に移動させてから終了してください。
次回からその位置で開くはずです。
hatena様
お返事ありがとうございます。
>左上に開く場合は、Accessウィンドウを中央に移動させてから終了してください。
>次回からその位置で開くはずです。
確かに終了時の場所で開きました。
この場合ユーザーは一人だと問題ないのですが、私が作成しているデータベースは10人以上で共有しています。なので、
>左上に開く場合は、Accessウィンドウを中央に移動させてから終了してください。
が徹底できないリスクがあります。
できれば、位置移動不可、サイズ変更不可としたいのです。
何か良い方法はございますでしょうか?
中央寄せは、下記を参考にしてください。
Accessウィンドウをディスクトップの中央に表示する - hatena chips
サイズ変更不可は、下記を参考にしてください。
Accessウィンドウを表示しない方法 Access2007以降版 - hatena chips
上記の内容を理解して組み合わせる必要はありますが。