エクセル小僧:ハイパーリンクからIEでサイトを開く(2) [コンピューター]
http://cheese999.blog.so-net.ne.jp/2017-06-18
で紹介したマクロの続編です。
実は、前回の記事で紹介したマクロだけでは動かなくて、もう1つマクロが必要です。
【やりたいこと】
エクセルのワークシートにあるハイパーリンクをクリックしたら、IEでサイトを開く。
【背景】
・デフォルトのブラウザはChrome
・サイトによっては、IEでないと開けない。なので、VBAでIEを開きたい
【事前準備】
エクセルのVBEで、下記の2つのライブラリを有効にする必要があるようです。
・Microsoft HTML Object Library
・Microsoft Internet Controls
https://tonari-it.com/ie-setting-navigate/
http://www.ken3.org/cgi-bin/group/vba_ie_object.asp
http://www.vba-ie.net/ie/navigate.html
【マクロ1】
下記のマクロをVBEの標準モジュールに記述します。
Sub OPie1(myURL As String)
'【機能】指定のURLをIEで開く
'【引数】
' myURL : IEで開くURL
'【変数】
Dim objIE As InternetExplorer
'【コード】
'IE(InternetExplorer)のオブジェクトを作成する
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
'IE(InternetExplorer)を非表示
.Visible = False
'指定したURLのページを表示する
.Navigate myURL
'完全にページが表示されるまで待機する
Do While .ReadyState <> 4
Do While .Busy = True
DoEvents ' 一時的に制御をOSに移す
Loop
Loop
'IE(InternetExplorer)を表示する
.Visible = True
End With
'IEオブジェクトを解放
Set objIE = Nothing
End Sub
【マクロ2】
下記のマクロをVBEのワークシートに記述します。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
'【機能】ハイパーリンクをクリックしたら起動
Select Case Target.Range.Value
Case "http://adobe.com/go/cc_manage_act"
' AdobeのサイトをIEで開く
Call OPie1(Target.Range.Value)
End Select
End Sub
ハイパーリンクがクリックされたことをトリガとして、上記のマクロが起動されます。
クリックされたハイパーリンクの値=Target.Range.Valueを見て、IEで開くべきサイトならば、
ハイパーリンクの値をOPie1マクロに渡して、IEで開きます。
【マクロ3】
アクセスのフォームに配置したテキストボックスに記述したハイパーリンクの場合は、
クリック時のイベントプロシージャに、次のようなマクロを記述します。
Private Sub Web_Click()
On Error GoTo ERR1
If IsNull([Web]) Or [myIE1] = False Then
Exit Sub
End If
Call OPie1([Web])
Exit Sub
ERR1:
MsgBox ("エラー[Web_Click]" & vbCrLf & Err.Description)
End Sub
"Web"がテキストボックスの名前です。
【動かしてみた結果】
こんなマクロをお試しで使ってみましたが、Chromeを既定のブラウザとして設定している場合、
IEとChromeの2つのウィンドウが開いてしまいます。
また、完全にページが表示されるまで待機するループ処理が結構時間食います。
(PS 2017/8/5 5:17)
【マクロ3】を変更しました。
・変更点1:クリックしたハイパーリンクが空の場合、マクロを実行しないようにしました。
⇒IsNull([Web])の部分
・変更点2:フォームにmyIE1というチェックボックスを設置して、チェックされていない場合(False)、マクロを実行しないようにしました。
⇒[myIE1] = Falseの部分
・変更点3:エラーが発生したら、エラーメッセージを表示して、マクロの実行を中止するようにしました。
⇒On Error GoTo ERR1、ERR1:の部分
で紹介したマクロの続編です。
実は、前回の記事で紹介したマクロだけでは動かなくて、もう1つマクロが必要です。
【やりたいこと】
エクセルのワークシートにあるハイパーリンクをクリックしたら、IEでサイトを開く。
【背景】
・デフォルトのブラウザはChrome
・サイトによっては、IEでないと開けない。なので、VBAでIEを開きたい
【事前準備】
エクセルのVBEで、下記の2つのライブラリを有効にする必要があるようです。
・Microsoft HTML Object Library
・Microsoft Internet Controls
https://tonari-it.com/ie-setting-navigate/
http://www.ken3.org/cgi-bin/group/vba_ie_object.asp
http://www.vba-ie.net/ie/navigate.html
【マクロ1】
下記のマクロをVBEの標準モジュールに記述します。
Sub OPie1(myURL As String)
'【機能】指定のURLをIEで開く
'【引数】
' myURL : IEで開くURL
'【変数】
Dim objIE As InternetExplorer
'【コード】
'IE(InternetExplorer)のオブジェクトを作成する
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
'IE(InternetExplorer)を非表示
.Visible = False
'指定したURLのページを表示する
.Navigate myURL
'完全にページが表示されるまで待機する
Do While .ReadyState <> 4
Do While .Busy = True
DoEvents ' 一時的に制御をOSに移す
Loop
Loop
'IE(InternetExplorer)を表示する
.Visible = True
End With
'IEオブジェクトを解放
Set objIE = Nothing
End Sub
【マクロ2】
下記のマクロをVBEのワークシートに記述します。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
'【機能】ハイパーリンクをクリックしたら起動
Select Case Target.Range.Value
Case "http://adobe.com/go/cc_manage_act"
' AdobeのサイトをIEで開く
Call OPie1(Target.Range.Value)
End Select
End Sub
ハイパーリンクがクリックされたことをトリガとして、上記のマクロが起動されます。
クリックされたハイパーリンクの値=Target.Range.Valueを見て、IEで開くべきサイトならば、
ハイパーリンクの値をOPie1マクロに渡して、IEで開きます。
【マクロ3】
アクセスのフォームに配置したテキストボックスに記述したハイパーリンクの場合は、
クリック時のイベントプロシージャに、次のようなマクロを記述します。
Private Sub Web_Click()
On Error GoTo ERR1
If IsNull([Web]) Or [myIE1] = False Then
Exit Sub
End If
Call OPie1([Web])
Exit Sub
ERR1:
MsgBox ("エラー[Web_Click]" & vbCrLf & Err.Description)
End Sub
"Web"がテキストボックスの名前です。
【動かしてみた結果】
こんなマクロをお試しで使ってみましたが、Chromeを既定のブラウザとして設定している場合、
IEとChromeの2つのウィンドウが開いてしまいます。
また、完全にページが表示されるまで待機するループ処理が結構時間食います。
(PS 2017/8/5 5:17)
【マクロ3】を変更しました。
・変更点1:クリックしたハイパーリンクが空の場合、マクロを実行しないようにしました。
⇒IsNull([Web])の部分
・変更点2:フォームにmyIE1というチェックボックスを設置して、チェックされていない場合(False)、マクロを実行しないようにしました。
⇒[myIE1] = Falseの部分
・変更点3:エラーが発生したら、エラーメッセージを表示して、マクロの実行を中止するようにしました。
⇒On Error GoTo ERR1、ERR1:の部分
ヤバイぜ! ありがとうございます[__猫]
by cheese999 (2017-07-03 05:54)
【マクロ3】を変更しました。
by cheese999 (2017-08-05 05:30)