So-net無料ブログ作成

エクセル小僧:ハイパーリンクから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

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