Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12168 / 13646 ツリー ←次へ | 前へ→

【11674】エクセルからインターネットエクスプローラーを開きたい カド 04/3/14(日) 7:00 質問
【11677】Re:エクセルからインターネットエクスプロ... りん 04/3/14(日) 9:20 回答
【11679】Re:エクセルからインターネットエクスプロ... カド 04/3/14(日) 11:36 質問
【11680】Re:エクセルからインターネットエクスプロ... カド 04/3/14(日) 12:04 質問
【11699】Re:エクセルからインターネットエクスプロ... ichinose 04/3/15(月) 1:15 回答
【11700】Re:エクセルからインターネットエクスプロ... ichinose 04/3/15(月) 1:21 発言
【11709】Re:エクセルからインターネットエクスプロ... カド 04/3/15(月) 9:50 質問
【11711】Re:エクセルからインターネットエクスプロ... ichinose 04/3/15(月) 10:38 発言
【11712】Re:エクセルからインターネットエクスプロ... カド 04/3/15(月) 10:47 質問
【11748】Re:エクセルからインターネットエクスプロ... ichinose 04/3/15(月) 18:53 発言
【11750】Re:エクセルからインターネットエクスプロ... カド 04/3/15(月) 19:26 質問
【11997】解決 カド 04/3/21(日) 7:01 回答

【11674】エクセルからインターネットエクスプロー...
質問  カド E-MAIL  - 04/3/14(日) 7:00 -

引用なし
パスワード
   B列のセルの2行目からn行目までにサイトのアドレスが書かれています。

これを1つずつ自動で開く方法を教えてください。

【11677】Re:エクセルからインターネットエクスプ...
回答  りん E-MAIL  - 04/3/14(日) 9:20 -

引用なし
パスワード
   カド さん、おはようございます。

>B列のセルの2行目からn行目までにサイトのアドレスが書かれています。
>
>これを1つずつ自動で開く方法を教えてください。

ハイパーリンクが設定してあるなら
Sub TEST()
  Dim hpl As Hyperlink
  For Each hpl In ActiveSheet.Columns("B:B").Hyperlinks
   hpl.Follow NewWindow:=True
  Next
End Sub

指定してないとき
Sub TEST()
  Dim obj1 As Object, RR&
  Do
   RR& = RR& + 1
   If ActiveSheet.Cells(RR&, 2).Value = "" Then Exit Do
   '
   Set obj1 = CreateObject("InternetExplorer.Application")
   obj1.Navigate ActiveSheet.Cells(RR&, 2).Value
   obj1.Visible = True
  Loop
  Set obj1 = Nothing
End Sub

こんな感じです。

【11679】Re:エクセルからインターネットエクスプ...
質問  カド E-MAIL  - 04/3/14(日) 11:36 -

引用なし
パスワード
   ▼りん さん 回答ありがとうございます。

私が作ると以下のようなマクロの記録を改良したコードになります。
このコードでも問題は無いのですが、今1つ皆さんのようなスマートさに欠ける気がします。

皆さんはどのようにしてスマートなコードの書き方を勉強されたのですか?
参考になる本やサイトがあれば教えてください。

Sub Macro3()

  n = 1
  
  Do While n < 5
    Range("B" & n).Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
    n = n + 1
  Loop
 
End Sub

【11680】Re:エクセルからインターネットエクスプ...
質問  カド E-MAIL  - 04/3/14(日) 12:04 -

引用なし
パスワード
   ▼りん さん こんにちは。
聞き忘れたことがあります。

IEが開いたときに、リンク切れで
”お探しのページは見つかりませんでした。”
と出るときは、そのIEを閉じたいのですが、
このようなことは可能なのでしょうか?

【11699】Re:エクセルからインターネットエクスプ...
回答  ichinose  - 04/3/15(月) 1:15 -

引用なし
パスワード
   カド さん、りん さん、こんばんは。
>聞き忘れたことがあります。
>
>IEが開いたときに、リンク切れで
>”お探しのページは見つかりませんでした。”
>と出るときは、そのIEを閉じたいのですが、
>このようなことは可能なのでしょうか?
探ってみたら、こんな方法で出来ました(他にも方法はあるかもしれません)。

まず、参照設定で「Microsoft Internet Controls」にチェックして下さい。

標準モジュールに
'==============================================================
Private ie_class(1 To 5) As Class1
'==============================================================
Sub main()
  For idx = 1 To 5
   Set ie_class(idx) = New Class1
   With ie_class(idx)
     Set .ep = CreateObject("InternetExplorer.Application")
     .err_flg = False
     With .ep
      .Visible = True
      .Navigate Range("b" & idx).Value
      Do While .Busy = True Or .ReadyState <> READYSTATE_COMPLETE
        DoEvents
        Loop
      End With
     If .err_flg = True Then
      .ep.Quit
      End If
     End With
   Next idx
End Sub

次にクラスモジュール(名前は、既定名のClass1)に、
'==============================================================
Public WithEvents ep As InternetExplorer
' err_flg true エラー発生
'     false エラー無し
Public err_flg As Boolean
'==============================================================
Private Sub ep_NavigateError(ByVal pDisp As Object, URL As Variant, Frame As Variant, StatusCode As Variant, Cancel As Boolean)
  On Error Resume Next
  err_flg = True
  On Error GoTo 0
End Sub
'==============================================================
Private Sub ep_OnQuit()
  Set ep = Nothing
End Sub


これで、プロシジャーmainを実行してみてください。
確認してみて下さい。
但し、繰り返しの実行は、正常に表示されたIEを一度全て閉じてから実行して下さい。

【11700】Re:エクセルからインターネットエクスプ...
発言  ichinose  - 04/3/15(月) 1:21 -

引用なし
パスワード
   IE関連で参考にしているのは、

http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/ie.htm

このサイトです。これもここの回答者のどなたかに教えていただいたものです。
どなただっかHNが残ってなくて掲載できなくて、失礼します。

後は、試行錯誤でやっています。

【11709】Re:エクセルからインターネットエクスプ...
質問  カド E-MAIL  - 04/3/15(月) 9:50 -

引用なし
パスワード
   ▼ichinose さん 回答ありがとう御座います。

実行してみましたが、IEが5個立ち上がりました。

全て”お探しのページは有りません。”というサイトで、
一つも自動では閉じないのですが。。。

お分かりでしたら、再度お願いいたします。

【11711】Re:エクセルからインターネットエクスプ...
発言  ichinose  - 04/3/15(月) 10:38 -

引用なし
パスワード
   ▼カド さん:
こんにちは。
>実行してみましたが、IEが5個立ち上がりました。
>
>全て”お探しのページは有りません。”というサイトで、
>一つも自動では閉じないのですが。。。
ははっ、私が勘違いしていたみたいです。
私が確認したのは「ページを表示できません」
と言う場合でした。失礼しました(昨日から、連発)。
クラスモジュールは、そのままで以下のような場合でした。
'=====================================================
Private ie_class(1 To 5) As Class1
Sub main()
  Range("b1:b5").Value = _
     Application.Transpose(Array( _
       "http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=11679;id=excel", _
       "http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=11680;id=excel", _
       "http://www.vbalob.net/vbaqa/c-board.cgi?cmd=one;no=11679;id=excel", _
       "http://www.vbalab.net/vbaqa/c-board.cgi", _
       "http://www.vbalob.net/vbaqa/c-board.cgi?cmd=one;no=11679;id=excel"))
  '↑セルにデータセット、Urlの3行目と5行目が見つからないもの
  For idx = 1 To 5
   Set ie_class(idx) = New Class1
   With ie_class(idx)
     Set .ep = CreateObject("InternetExplorer.Application")
     .err_flg = False
     With .ep
      .Visible = True
      .Navigate Range("b" & idx).Value
      Do While .Busy = True Or .ReadyState <> READYSTATE_COMPLETE
        DoEvents
        Loop
      End With
     If .err_flg = True Then
      .ep.Quit
      End If
     End With
   Next idx
End Sub

で、”お探しのページは有りません。”というサンプルURLを
教えていただけますか?
ちょっと、探しましたが、見つかりませんでした。
と言っても勘違いしてましたから、ご希望の回答が出来るか
わかりませんが・・・。

【11712】Re:エクセルからインターネットエクスプ...
質問  カド E-MAIL  - 04/3/15(月) 10:47 -

引用なし
パスワード
   ▼ichinose さん 回答ありがとう御座います。

改めてそう言われると確かに探すのが大変かも。
と言うことで以下でお願いします。

http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi

【11748】Re:エクセルからインターネットエクスプ...
発言  ichinose  - 04/3/15(月) 18:53 -

引用なし
パスワード
   ▼カド さん:
こんばんは。

>http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi
これは、cgiの中でエラーチェックしているサイトですよね?
これは、IEでは拾えないと思いますが・・(少なくとも私には、わかりません)。

私が考えられるのは、ご提示頂いたサイトの表示内容とB列に列挙されているURLでの
表示内容を比較して一致したら、IEを閉じるという方法ですが、
これでは駄目なんですよね?

【11750】Re:エクセルからインターネットエクスプ...
質問  カド E-MAIL  - 04/3/15(月) 19:26 -

引用なし
パスワード
   ▼ichinose さん 回答ありがとうございます。

>これは、cgiの中でエラーチェックしているサイトですよね?
>これは、IEでは拾えないと思いますが・・(少なくとも私には、わかりません)。

失礼しました。見れないのは、こんなアドレスです。
http://kkk.hp.infoseek.co.jp/25.html(適当に作りました)


>私が考えられるのは、ご提示頂いたサイトの表示内容とB列に列挙されているURLでの
>表示内容を比較して一致したら、IEを閉じるという方法ですが、
>これでは駄目なんですよね?

”一致したら” では無く ”一致しなかったら”でしょうか?

いずれにしても方法は問いません。
たくさん有るアドレスの中から見れるアドレスが探し出せれればそれで良いです。

【11997】解決
回答  カド E-MAIL  - 04/3/21(日) 7:01 -

引用なし
パスワード
   ja7awuさん という人に以下のように教えていただきました。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

IEにURLを指定する前にチェックした方が合理的と思います。
「お探しのページが見つかりませんでした」になるまで、ちょっと時間が
かかると思いますので、URLが変わるタイミングの処理も必要かと思います。

もっといい方法があるかも知れませんが、Webクエリを使う方法で如何でしょうか。

例えば、
・ "URL_CHK" という名前のシートを準備します。
・ そのシートに"URL_CHK"というQueryTableを作成し、非表示にします。
 (1回だけWebQeryAdd()を実行すれば、作成されます。)
・ 下記 URL_ADD_CHK()を実行すれば3行目で指定したセルに入力されている
 URLアドレスが、存在するかどうかを表示します。

Sub URL_ADD_CHK()
Dim url As String
url = Worksheets("Sheet1").Range("A1").Value
On Error Resume Next
With Worksheets("URL_CHK").QueryTables("URL_CHK")
  .Connection = "URL;" & url
  .WebSelectionType = xlAllTables
  .WebFormatting = xlWebFormattingAll
  .WebPreFormattedTextToColumns = True
  .WebConsecutiveDelimitersAsOne = True
  .WebSingleBlockTextImport = False
  .WebDisableDateRecognition = False
  .Refresh BackgroundQuery:=False
End With
If Err.Number > 0 Then
    MsgBox "URLアドレスは存在しません。"
Else
  If Not Worksheets("URL_CHK").Cells. _
    Find("お探しのページは見つかりませんでした", _
      lookat:=xlPart) Is Nothing Then
    MsgBox "お探しのページは見つかりませんでした。"
  Else
    MsgBox "見つかりました。" 'ここに見つかった時の処理を記述
  End If
End If
End Sub

'-----------------

Sub WebQeryAdd() 'Webクエリを作成する(1回だけ実行)
Worksheets("URL_CHK").Activate
With ActiveSheet.QueryTables.Add(Connection:= _
  "URL;http://abcd.co.jp", Destination:=Range("A1"))
  .Name = "URL_CHK"
nd With
End Sub

12168 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free