CreateObjectを使用し、IEを起動するには?


たかし  2003-07-27 02:19:07  No: 78796

たかしと申します。よろしくお願い致します。
お聞きしたいことは、以下のプログラムにより、IE(印刷プレビュー)を
起動しております。(ボタンを押すと以下のプログラムが動きます)

  Set IE = CreateObject("InternetExplorer.Application")
  IE.Navigate ファイル名                                 
  IE.ExecWB OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT

このプログラムだと、ボタンを押すたびに、新たなIEが起動してしまいます。
それを抑止したい(ボタンを押下しても新しいIEは起動せず、既に起動してる
IEに表示される)のですか、良い方法はありますでしょうか??

毎回、CreateObjectを行っているため、新たなIEが起動してしまいますが、
CreateObjectを行わないと、IEをcloseしてしまった場合、起動しなくなって
しまうため困っております。

ご存知の方がおりましたら、ご教授お願い致します。


シャノン  2003-07-27 02:37:17  No: 78797

「既にプログラムが起動している場合はそれで開く」という処理は DDE を使うのがお約束かと。
DDE には詳しくないのでよくわかりませんが、IE は DDE サーバーになってますので、それでなんとかならんかなぁ、と。
どうにもならなかったらゴメンナサイ


魔界の仮面弁士  2003-07-27 03:14:15  No: 78798

その IE 変数を、フォームモジュール等で
  Private WithEvents IE As InternetExplorer
のように宣言しておいてください。

IEが終了された場合は、
  Private Sub IE_OnQuit()
  End Sub
というイベントが発生します。
OnQuitが発生していない場合は、同じIEを使い回し、OnQuit後は
もう一度IEを起動しなおす、というコーディングになります。

もし、参照設定せずにコーディングしたい、という事であれば、
ShellWindowsコレクションオブジェクトを使ってみてください。
これを使えば、既に起動済みのInternetExplroerオブジェクトを
列挙する事ができますので、起動済みのIEを拾いなおす事ができます。


シャノン  2003-07-27 12:00:03  No: 78799

いやはや、やはりロクに知らんことに口を出すべきではないですな。
いい加減なこと言って申し訳ありませんでした。


たかし  2003-07-30 18:50:32  No: 78800

魔界の仮面弁士さん、シャノンありがとうございました。
自分でプログラムを作成し、試してみたいと思います。
本当にありがとうございました。


たかし  2003-08-07 01:09:25  No: 78801

たかしです。よろしくお願いします。

魔界の仮面弁士さんに教えて頂いた方法で、試してみたところ
「型が一致しません」というエラーになってしましました。

Option Explicit

Private WithEvents IE As InternetExplorer

Private Sub Form_Load()
    'IEを起動しておきます
    Text1.Text = "http://www.google.co.jp/"
    Command1.Caption = "Click!"
    Set IE = CreateObject("InternetExplorer.Application")  ←ここです
    IE.Visible = True
End Sub

Private Sub Command1_Click()
    'テキストボックスで指定されたURLに移動します
    IE.Navigate2 Text1.Text
End Sub
                    ・
                    ・
                    ・

初歩的な質問かもしれませんが、ご教授お願い致します。


魔界の仮面弁士  2003-08-07 02:27:39  No: 78802

『コンポーネントの追加』と『参照設定』を混同していないか確認してみてください。

例えば、コンポーネントの追加によって、『Microsoft Internet Controls』を
指定している場合(これはWebBrowserコントロールですね)、
先のCreateObjectからの代入動作は、型が異なるというエラーで失敗します。

しかし、(コンポーネントの追加ではなく)参照設定によって、
『Microsoft Internet Controls』を指定している場合は、
先のCreateObjectのコードが成功します。


たかし  2003-08-13 22:00:26  No: 78803

魔界の仮面弁士さんありがとうございました。
無事、正常な動きを行えるようになりました。

ここでもう一つ質問があります。
今回の改善により一度IEを開いたら、2回目以降は常に
そのブラウザに表示するようになりました。

その際、IEが最小化されていた場合に、プログラムで
最大化し、表示する方法はあるでしょうか?
(IEが最小化されている場合だと、IEが小さく表示されてしまいます)

'マイナス値の場合は、最小化されている
If IE.Left < 0 And IE.Top < 0 Then
    'ここで行う処理です。
End If

ご存知の方がいらっしゃいましたら、ご教授お願いいたします。


魔界の仮面弁士  2003-08-14 02:23:44  No: 78804

最小化されているかどうかを判断する IsIconic API
最大化されているかどうかを判断する IsZoomed API
最小化を解除してアクティブ化する   OpenIcon API
ウィンドウの表示状態を設定する     ShowWindow API

…などを利用してみてください。指定すべきウィンドウハンドルは、
InternetExplorerオブジェクトの HWND プロパティより取得出来ます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加