SSブログ

エクセル小僧:ハイパーリンクから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:の部分
ヤバイぜ!(11)  コメント(2)  トラックバック(0) 
共通テーマ:日記・雑感

ヤバイぜ! 11

コメント 2

cheese999

ヤバイぜ! ありがとうございます[__猫]
by cheese999 (2017-07-03 05:54) 

cheese999

【マクロ3】を変更しました。
by cheese999 (2017-08-05 05:30) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字(英大文字の「オー」、英小文字の「ユー」、アラビア数字の「ハチ」、アラビア数字の「イチ」、アラビア数字の「ニ」)を入力してください。

Facebook コメント

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。