プロが教える店舗&オフィスのセキュリティ対策術

タイトルの件、コードをご存じの方教えて下さい。

【やりたい事】
すでに、任意のIEが1ページ開いています。
同ページのサイズや表示位置を変更したいです。

下記のコードは、ヤフートップページとういうて特定の
ページの表示サイズや表示位置を指示したものです

このヤフートップページを、既に開いているページに
変更をしたいということです


【コード】
Public Sub changePosAndSize()
'IEを格納する変数(オブジェクト型)
Dim ie As Object
'IEを起動
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate2 ("https://www.yahoo.co.jp/")

With ie
.Top = 0 '上位置
.Left = 0 '左位置
.Width = 1600 '幅
.Height = 800 '高さ

.Resizable = True 'サイズ変更可否
End With
End Sub

A 回答 (4件)

#3です 


見直しましたら
>開いているページのアドレスが分からない仕様
>すでに、任意のIEが1ページ開いています。
https://www.yahoo.co.jp/ でないと言う事ですね

If objWindow.document.URL = "https://www.yahoo.co.jp/" Then

If objWindow.Name = "Internet Explorer" Then とかで良いかな・・

あと すでにと言うことは・・
IEに複数タブが存在するケースもありと言う事でしょうか
With ie .Top = 0 とあったので一例としてShell.Applicationにしたけれど

1タブだけなら#3で条件を変えれば・・・動くと思いますが

複数タブが存在する場合、機能しないと思いますので
WindowsAPIのSetWindowPosを使って以下のようにすれば出来ると思います(一例です macはNG)

Option Explicit

Public Const SWP_NOZORDER = &H4& 'Zオーダーを維持
Private Declare Function SetWindowPos Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal hWndInsetAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal uFlags As Long _
) As Long

Public Sub changePosAndSize()
Dim objIE As InternetExplorer
Dim objShell As Object, objWindow As Object
Dim flg As Boolean
Set objShell = CreateObject("Shell.Application")
For Each objWindow In objShell.Windows
If TypeName(objWindow.document) = "HTMLDocument" Then
If objWindow.Name = "Internet Explorer" Then
Set objIE = objWindow
flg = True
Exit For
End If
End If
Next
Set objShell = Nothing
If flg = True Then
Call SetWindowPos(objIE.Application.hWnd, 0, 0, -1, 1600, 800, SWP_NOZORDER)
Else
MsgBox "IEが見つかりません"
End If
End Sub

Set objIE = objWindow を#3で書いているので そのまま使って
objIE.Application.hWnd で対応(APIで特定する方法もあります)
WindowsAPIについては Private Declare Function SetWindowPos Lib  など(パラメータなど)で調べてください
参考 https://www.tokovalue.jp/function/SetWindowPos.htm
_
    • good
    • 0
この回答へのお礼

大変、大変、勉強になります。ありがとうございます

お礼日時:2022/12/06 17:38

こんばんは


やり方は色々ありますが、Shell.Applicationのコードだけです・・

Public Sub changePosAndSize()
Dim objIE As InternetExplorer
Dim objShell As Object, objWindow As Object
Dim flg As Boolean
Set objShell = CreateObject("Shell.Application")
For Each objWindow In objShell.Windows
If TypeName(objWindow.document) = "HTMLDocument" Then
If objWindow.document.URL = "https://www.yahoo.co.jp/" Then
Set objIE = objWindow
flg = True
Exit For
End If
End If
Next
Set objShell = Nothing
If flg = True Then
With objIE
.Top = 0 '上位置
.Left = 0 '左位置
.Width = 1600 '幅
.Height = 800 '高さ
.Resizable = True 'サイズ変更可否
End With
Else
MsgBox "指定IEが見つかりません"
End If
End Sub
    • good
    • 0

マクロからは出来ないと思います。



開いてるページのソースコードに書き込まないと無理ゲーかな
    • good
    • 0
この回答へのお礼

なるほどですねぇ。

開いているページのアドレスが分からない仕様の
環境にいまして、それで、既に開いているWEBぺーじの

表示サイズと位置を変更できないかなぁと考えました

お礼日時:2022/12/02 01:14

こんばんは



ご提示のコードは、新規にIEを起動して制御するコードです。
ですので、ご質問にある「既に起動しているIE」とはあまり関係がないと言えます。

既に開いているのなら、まず最初に、「起動しているWindowを順に調べてIEを探す」必要があります。
以下のページが、ご参考になるのではないかと思います。
https://vba-create.jp/vba-ie-shell-set-objie-new …

※ 一方で、IEのサポートは既に終了していますので、通常利用としてお使いになるのはあまり勧められることではないとも思いますけれど・・・
    • good
    • 0
この回答へのお礼

なかなか、難しいですねえ。既に開いているIEのサイズを変更
するのはですね

IEサポート終了は承知しています

お礼日時:2022/12/02 01:13

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