VBAのIE(InternetExplorer)制御でIEウィンドウとExcelウィンドウを横並びにするサブルーチンです。
IEウィンドウとExcelウィンドウを横並びに設定について解説しています。こちらで注意しなければいけないのは「単位」になります。何気なく利用している値がどのような単位で表示されているのかを確認することは非常に大切なことですので、しっかり押さえておきましょう。
サブルーチンとは、プログラム処理の中で繰り返し利用されるルーチン作業をモジュール化(部品化)してまとめたものになります。また、呼び出す側をメインルーチンと呼ぶのに対して「サブルーチン」と呼ばれます。
繰り返し利用されるルーチン作業をモジュール化(部品化)することで、同じ処理のプログラムを何度も書く手間が省け、プログラムも全体的に見やすくなります。これによりプログラムソースの可読性や保守性を高く保つことができます。
Sub iePosition(objIE As InternetExplorer, _
winWidth As Integer, _
layout As String)
Dim maxWidth As Integer, maxHeight As Integer
With Application '単位:ポイント(1ポイント=1/72dpi)
'Excelウィンドウサイズ取得
.WindowState = xlMaximized '最大化
maxWidth = .Width
maxHeight = .Height
'Excelウィンドウサイズ設定
.WindowState = xlNormal '通常
'位置・サイズ指定
.Top = 0
If layout = "左" Then
.Left = 0
ElseIf layout = "右" Then
.Left = maxWidth - winWidth
End If
.Width = winWidth
.Height = maxHeight
End With
With objIE '単位:ピクセル(1ピクセル=1/96dpi)
'IEウィンドウサイズ設定
.Top = 0
If layout = "左" Then
.Left = Int(CLng(winWidth) * 96 / 72)
ElseIf layout = "右" Then
.Left = 0
End If
.Width = Int(CLng(maxWidth - winWidth) * 96 / 72)
.Height = Int(CLng(maxHeight) * 96 / 72)
End With
End Sub
こちらの構文と引数の内容は以下になります。尚、引数はすべて参照渡しで渡されます。
構文 | iePosition(objIE,winWidth,layout) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
objIE | InternetExplorer | InternetExplorerオブジェクトを指定します。 | objIE,objIE2 | × | |
winWidth | Integer | Excelウィンドウの幅サイズを指定します。 | 400,800 | × | |
layout | String | Excelウィンドウ配置位置を「左」「右」の文字列で指定します。「左」を設定した場合、左側にExcelウィンドウが配置されます。 | "右","左" | × |
引数objIEは必須項目で、指定したURLを表示させるInternetExplorerオブジェクトを指定します。InternetExplorerオブジェクトを引数に設定することで、複数のオブジェクトを処理することができます。次の引数winWidthも必須項目で、Excelウィンドウの幅サイズを設定します。そして、引数layoutも必須項目で、Excelウィンドウ配置位置を「左」「右」の文字列で指定します。「左」を設定した場合、左側にExcelウィンドウが配置されます。
Dim maxWidth As Integer, maxHeight As Integer
まずは、Dimステートメントを利用して変数maxWidth,maxHeightに整数型(Integer)を変数宣言しています。
With Application '単位:ポイント(1ポイント=1/72dpi)
'Excelウィンドウサイズ取得
.WindowState = xlMaximized '最大化
maxWidth = .Width
maxHeight = .Height
'Excelウィンドウサイズ設定
.WindowState = xlNormal '通常
こちらでは、Withステートメントのオブジェクト名に「Application」を設定しています。こちらはApplicationプロパティを利用してApplicationオブジェクトを取得しています。対象となるオブジェクトが指定されない場合は、Excelアプリーション(Applicationオブジェクト)を返しますので、Withステートメント内の処理はExcelウィンドウの操作になります。
ApplicationオブジェクトのWindowStateプロパティに「xlMaximized」が設定されています。「xlMaximized」はExcelウィンドウの最大化を表しますので、こちらを設定するとExcelウィンドウサイズが最大化されます。
Excelウィンドウの最大化状態からExcelウィンドウの幅と高さを取得したら変数maxWidthにExcelウィンドウの幅を、変数maxHeightにExcelウィンドウの高さを代入します。尚、単位はポイントになります。
そしてApplicationオブジェクトのWindowStateプロパティを利用して、Excelウィンドウのサイズを標準に戻します。これにより、Excelウィンドウの位置やサイズを変更することができます。
'位置・サイズ指定
.Top = 0
If layout = "左" Then
.Left = 0
ElseIf layout = "右" Then
.Left = maxWidth - winWidth
End If
.Width = winWidth
.Height = maxHeight
End With
こちらでは、Excelウィンドウの位置とサイズを設定しています。Applicationオブジェクトの「Topプロパティ」「Leftプロパティ」「Widthプロパティ」「Heightプロパティ」の値にそれぞれ設定していますが、Leftプロパティについては、条件分岐ができるIf~Then~Elseステートメントを利用して引数layoutが「左」の場合は左側の0の位置に配置し、「右」の場合はディスプレイ幅の変数maxWidthからExcelウィンドウ幅の引数winWidthを引いた値の位置に配置されます。
Excelウィンドウのサイズについては、引数winWidthの値をExcelウィンドウの幅にディスプレイ高さの変数maxHeightの値をExcelウィンドウの高さに設定しています。こちらの値の単位はすべて「ポイント」になります。
With objIE '単位:ピクセル(1ピクセル=1/96dpi)
'IEウィンドウサイズ設定
.Top = 0
If layout = "左" Then
.Left = Int(CLng(winWidth) * 96 / 72)
ElseIf layout = "右" Then
.Left = 0
End If
.Width = Int(CLng(maxWidth - winWidth) * 96 / 72)
.Height = Int(CLng(maxHeight) * 96 / 72)
End With
End Sub
こちらでは、Withステートメントのオブジェクト名に「objIE」を設定しています。こちらはInternetExplorerオブジェクトになりますので、こちらではIEウィンドウの操作処理になります。
Withステートメント内では、IEウィンドウの位置とサイズを設定しています。InternetExplorerオブジェクトの「Topプロパティ」「Leftプロパティ」「Widthプロパティ」「Heightプロパティ」の値にそれぞれ設定していますが、こちらもLeftプロパティについては、If~Then~Elseステートメントを利用して引数layoutが「左」の場合はExcelウィンドウ幅の引数winWidthをピクセル変換した位置に配置し、「右」の場合は左側の0の位置に配置されます。
IEウィンドウのサイズについては、変数maxWidthから引数winWidthを引いた値をピクセル変換してIEウィンドウの幅に、ディスプレイ高さの変数maxHeightの値をピクセル変換してIEウィンドウの高さに設定しています。こちらの値の単位はすべて「ピクセル」になります。
これで、自由に左右どちらでもサイズを変更して並べて表示させることができるようになりました。