dポイントプレゼントキャンペーン実施中!

先日、「そのドメインがSSL化してるかどうかをマクロで調べる」という、
質問をさせていただきました。

そこで書いていただいたマクロは、順調に動いていました。

'//
Sub TestSSLChecker2()
 Dim objHttp As Object
 Dim nURL As String
 Dim strURL As String
 Dim i As Long, f As String, l As String
 Dim Lastrow As Long, getLine As Long
 Set objHttp = CreateObject("WinHttp.WinHttpRequest.5.1")

 On Error GoTo ErrHandler
 'A1から
 getLine = Cells(Rows.Count, 2).End(xlUp).Row
 Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
 If getLine = Lastrow Then MsgBox "既に終わっているか、データがないです。", vbExclamation: Exit Sub
 If getLine < Lastrow And Cells(1, 2).Value <> "" Then
  getLine = getLine + 1
 Else
  getLine = 1 '最初の行が1行目からの場合
 End If
 For i = getLine To Lastrow
  strURL = LCase(Trim(Cells(i, 1).Value)) 'A列の登録URL
  strURL = Replace(strURL, "https:", "http:")
  If strURL Like "http*" Then
   objHttp.Open "GET", strURL, False
   objHttp.Send
   DoEvents 'ESC割り込み可能にする
   With objHttp
    If .Status = 200 Then
     nURL = .Option(1) 'WinHttpRequestOption_URL
     f = Mid(strURL, 1, InStr(strURL, "://"))
     l = Mid(nURL, 1, InStr(nURL, "://"))
     If nURL = "" Then
      Cells(i, 2).Value = "no URL"
     ElseIf nURL <> "" Then
      If LCase(f) = LCase(l) Then
       Cells(i, 2).Value = "non SSL"
      Else
       Cells(i, 2).Value = "https"
      End If
     End If
    Else
     Cells(i, 2).Value = "Err:" & .Status
    End If
   End With
  End If
Endline:
  nURL = ""
  strURL = ""
 Next i
 MsgBox "Finished"
 Exit Sub
ErrHandler:
 If Err() <> 0 Then
  Cells(i, 2).Value = Err.Number 'マイナスになるのは外部エラー
  GoTo Endline
 End If
End Sub

順調に動いていたのですが、頻繁にエラーで止まるようになってきました。
エラーの時にはセルに、「-2147012889」という数値が記入されます。

この「-2147012889」を避けて、
エラーが出さずに、マクロを動かすことは可能でしょうか?

どのような記述で、避けることができるのでしょうか?
よろしくお願いいたします。

A 回答 (2件)

No.1の回答者です。


「-2147012889」の数字が、本日、WiFiのエラーで出てきて考えたのですが、回線そのものの切断のようですね。一旦、エラーが出てくると、繰り返しなのか、復旧するまでにしばらく時間が掛かってしまいます。回線そのものを、有線LANにしたらと考えましたが、それは可能でしょうか。

今の所、IEオブジェクトを使ってやる方法を考えてはいるのですが、エラーでも、内部で済むのではないかと思います。しかし、いかんせん、ものすごく遅いのです。それにコードがややこしい上に、できるという保証はありません。他の良い手立てを思いつかないのです。ただ、Excel 2016ですと、まだ残されている方法があるかもしれません。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。

すごくややこしい形なのですね・・・。

ただ、書いていただいたマクロでも、
切断の度に、手動で再接続することはできます。

私のために、いろいろと思考錯誤していただいたようで、
感謝しております。ありがとうございます。

お礼日時:2019/03/25 06:58

そのコードの作者ではあるのですが、「-2147012889」で止まるとなると、根本的に書き換えなくてはならないかもしれませんね。

今の所、まったく目処が立ちません。どなたか、この方面で明るい方で挑戦されるかもしれませんが、このマクロには、URLエラーはエラーそのものとして返ってきてしまいます。

>この「-2147012889」を避けて、
>エラーが出さずに、マクロを動かすことは可能でしょうか?
ださないだけなら、以下のようにすればよいのですが、復旧するかどうかは不明です。

ErrHandler:
 If Err() <> 0 Then
  DoEvents '完全に途切れることを防ぐため
  GoTo Endline
 End If
End Sub

ところで、今のExcelのバージョンはいくつですか?
    • good
    • 0
この回答へのお礼

WindFallerさん、返信ありがとうございます!

ErrHandler:
 If Err() <> 0 Then
  DoEvents '完全に途切れることを防ぐため
  GoTo Endline
 End If
End Sub

こちらで試した所、

実行時エラー '-2147012889 (80072ee7)'
サーバー名またはアドレスは解決されませんでした

というポップが出てきて、止まってしまいます。

そして、再開したときに止まったセルに
「-2147012889」と表示されなくなりました。

今のExcelのバージョンは、
Excel2016です。

お礼日時:2019/03/23 02:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A