プロが教えるわが家の防犯対策術!

アクセスのアプリケーションの横幅の値をvbaで取得する事は可能でしょうか?

Sub サンプル()
Debug.Print Application.Width
End Sub

はエラーになっちゃいました。

「アプリケーションの横幅の値を取得したい 」の質問画像

A 回答 (2件)

#1です。


こっちの、なんちゃってバージョンの方が良いかも?
Sub fff()
Dim frmName As String
Dim frm As Form
frmName = "f_dmy" '適当なダミーフォーム
Application.Echo False '画面の描画をしない、ちらつき防止
DoCmd.OpenForm frmName
Set frm = Forms(frmName) 'フォームオブジェクトをセット
DoCmd.Maximize '最大化
Debug.Print frm.InsideWidth 'フォームのサイズ取得 Twip単位
DoCmd.Restore 'なくても構いません
DoCmd.Close
Set frm = Nothing '後始末
Application.Echo True '後始末、無いとAccessがだんまりに
End Sub

適当な空っぽのフォームを作り、名前を仮に、f_dmy にします。
このフォームを最大化してそのサイズを取得する流れです。
前回回答のAPIを使用した値は画面のピクセル数ですので
RightとLeftを引き算してそれを96で割って1440を掛けます。
なお、96dpi は規定値ですが変更が可能なので
このなんちゃってバージョンが簡単ですね (^^ゞ
1cm は約567Twipです。
    • good
    • 0
この回答へのお礼

最大化した値を取得するのですね。たくさんの案、ありがとうございました。

お礼日時:2013/01/13 08:22

作業領域のサイズはAccess2010で試したところ以下で取得できました。


標準モジュールにて

Public Declare Function FindWindowEX Lib "user32.dll" _
Alias "FindWindowExA" _
(ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _
ByVal lpszClass As String, ByVal lpszWindow As String) As Long

'ウインドウ全体のサイズを取得
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
'構造体
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Sub ww()
Dim myHd As Long
Dim Rc As RECT
Dim Ret As Long

myHd = Application.hWndAccessApp
myHd = FindWindowEX(myHd, 0, "MDIClient", vbNullString)

Ret = GetWindowRect(myHd, Rc)
'イミディエイトウィンドウに出力
Debug.Print "TOP: " & Rc.Top & " LEFT: " & Rc.Left & " RIGHT: " & Rc.Right & " BOTTOM: " & Rc.Bottom
End Sub

解説できるだけのスキルは持ち合わせていないのでご勘弁を。
参考になったところ
http://www.vbstation.net/sample/0207.htm
何に使うのかな?
    • good
    • 0
この回答へのお礼

取得できました!

何に使うか・・・横幅に対してフォームのサイズを決めたいのです!うまくできるかな。

お礼日時:2013/01/13 08:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!