たかしと申します。よろしくお願い致します。
お聞きしたいことは、以下のプログラムにより、IE(印刷プレビュー)を
起動しております。(ボタンを押すと以下のプログラムが動きます)
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate ファイル名
IE.ExecWB OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT
このプログラムだと、ボタンを押すたびに、新たなIEが起動してしまいます。
それを抑止したい(ボタンを押下しても新しいIEは起動せず、既に起動してる
IEに表示される)のですか、良い方法はありますでしょうか??
毎回、CreateObjectを行っているため、新たなIEが起動してしまいますが、
CreateObjectを行わないと、IEをcloseしてしまった場合、起動しなくなって
しまうため困っております。
ご存知の方がおりましたら、ご教授お願い致します。
「既にプログラムが起動している場合はそれで開く」という処理は DDE を使うのがお約束かと。
DDE には詳しくないのでよくわかりませんが、IE は DDE サーバーになってますので、それでなんとかならんかなぁ、と。
どうにもならなかったらゴメンナサイ
その IE 変数を、フォームモジュール等で
Private WithEvents IE As InternetExplorer
のように宣言しておいてください。
IEが終了された場合は、
Private Sub IE_OnQuit()
End Sub
というイベントが発生します。
OnQuitが発生していない場合は、同じIEを使い回し、OnQuit後は
もう一度IEを起動しなおす、というコーディングになります。
もし、参照設定せずにコーディングしたい、という事であれば、
ShellWindowsコレクションオブジェクトを使ってみてください。
これを使えば、既に起動済みのInternetExplroerオブジェクトを
列挙する事ができますので、起動済みのIEを拾いなおす事ができます。
いやはや、やはりロクに知らんことに口を出すべきではないですな。
いい加減なこと言って申し訳ありませんでした。
魔界の仮面弁士さん、シャノンありがとうございました。
自分でプログラムを作成し、試してみたいと思います。
本当にありがとうございました。
たかしです。よろしくお願いします。
魔界の仮面弁士さんに教えて頂いた方法で、試してみたところ
「型が一致しません」というエラーになってしましました。
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
・
・
・
初歩的な質問かもしれませんが、ご教授お願い致します。
『コンポーネントの追加』と『参照設定』を混同していないか確認してみてください。
例えば、コンポーネントの追加によって、『Microsoft Internet Controls』を
指定している場合(これはWebBrowserコントロールですね)、
先のCreateObjectからの代入動作は、型が異なるというエラーで失敗します。
しかし、(コンポーネントの追加ではなく)参照設定によって、
『Microsoft Internet Controls』を指定している場合は、
先のCreateObjectのコードが成功します。
魔界の仮面弁士さんありがとうございました。
無事、正常な動きを行えるようになりました。
ここでもう一つ質問があります。
今回の改善により一度IEを開いたら、2回目以降は常に
そのブラウザに表示するようになりました。
その際、IEが最小化されていた場合に、プログラムで
最大化し、表示する方法はあるでしょうか?
(IEが最小化されている場合だと、IEが小さく表示されてしまいます)
'マイナス値の場合は、最小化されている
If IE.Left < 0 And IE.Top < 0 Then
'ここで行う処理です。
End If
ご存知の方がいらっしゃいましたら、ご教授お願いいたします。
最小化されているかどうかを判断する IsIconic API
最大化されているかどうかを判断する IsZoomed API
最小化を解除してアクティブ化する OpenIcon API
ウィンドウの表示状態を設定する ShowWindow API
…などを利用してみてください。指定すべきウィンドウハンドルは、
InternetExplorerオブジェクトの HWND プロパティより取得出来ます。
ツイート | ![]() |