WinAPI はClassモジュールにするのが有効かもしれない
今の共用関数は長いので、単純に値を返すものは有効みたいです
ここでも取り上げましたが、画面のサイズというか解像度、それを返すGetSystemMatirxです
注意点
Classモジュールの名前は指定した名前にしてください。
それがオブジェクト名になります。
厳密に言うとオブジェクト名ではありませんが、インテリセンスが発動するのです。
コード
標準モジュール
Sub DisplaySizeClassUsingStandardModle()
'https://www.moug.net/tech/acvba/0020033.html
'ここのサンプルからClassモジュールを作成し書き換えました
'この Sub Procedure(サブプロシージャ)は標準モジュール用のコードです
'Display 画面の縦と横のサイズ(解像度)を長整数型(long)で取得します。単位はPixcelです
'このSub Procedure(サブプロシージャ)はDisplaySizeClassが必要です。
'Class 用の変数とNew命令
Dim c As DisplaySizeClass : Set c = New DisplaySizeClass
Debug.Print c.GetDisplaySizeXPixels, c.GetDisplaySizeYPixels
End Sub
Classモジュール
Option Explicit
'----------------------------
' Display Class Module
'----------------------------
'このScriptはVBAのクラスモジュール用です
' 標準モジュールでは動きません
' Classモジュールの名前をVBEにおいてF4を押しプロパティウィンドウを出し、(オブジェクト名)に半角で
' DisplaySizeClass
' と入力してください
' GetsystemMetrixとは...
'"たとえば、GetSystemMetrics 関数は、オペレーティング システムの異なる機能を指定する 75 個の定数のいずれかを取得します。
'関数により返される情報は、渡した定数により異なります。GetSystemMetrics を呼び出すには、75 個のすべての定数ではなく、使用する定数のみを含めます。
'メモ 定数を表す値を渡すよりも、定数を定義する方法をお勧めします。定数は Microsoft 製品がバージョンアップしても変わりませんが、定数値は変更する可能性があります。
'DLL 関数に必要な定数は一般的に予測不可能なものが多いので、特定の値を返すためには、目的の関数のドキュメントを参照して、渡す定数を確認する必要があります。
# If VBA7 Then
Private Declare PtrSafe Function GetSystemMetrics _
Lib "USER32" _
(ByVal nIndex As Long) As Long
# Else
Private Declare Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
# End If
Private Const SM_CXSCREEN As Long = 0
Private Const SM_CYSCREEN As Long = 1
'取得 Property Get
'設定 オブジェクト Property Set
'設定 それ以外 Property Let
'アクセサ
Property Get GetDisplaySizeXPixels() As Long
GetDisplaySizeXPixels = GetSystemMetrics(SM_CXSCREEN)
End Property
Property Get GetDisplaySizeYPixels() As Long
GetDisplaySizeYPixels = GetSystemMetrics(SM_CYSCREEN)
End Property
'Sub DisplaySizeClassUsingStandardModle()
''https://www.moug.net/tech/acvba/0020033.html
''ここのサンプルからClassモジュールを作成し書き換えました
''この Sub Procedure(サブプロシージャ)は標準モジュール用のコードです
'Dim c As DisplaySizeClass
'Set c = New DisplaySizeClass
'Debug.Print c.GetDisplaySizeXPixels, c.GetDisplaySizeYPixels
'End Sub
長所
標準モジュールが軽くて見やすくなる
Mougのページのコードを共用のClassに変えました
こうすると標準モジュールではDim と Set NewでClassが使えます。
しかし、
標準モジュールの上部にはDeclare、宣言がなくなります。Class用の1行だけ増えただけです。