
URLを貼ったExcelファイルがあるのですが
そのリンクが有効かチェックするマクロを組みたいです。
Excel、Libre office、Open Officeどれかで実行できればいいです。
URLは、開くとPDFファイルがダウンロードできるものがほとんどです。HTMLもあったかも?とにかくすべてのタイプのURLをチェックしたいです。
以下のマクロを作ってみました。
チェックしたいファイルのパスを入力すると、URLをすべてチェックして表に◯か×を書く仕様です。
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Sub LinkChecker()
Dim ToolBook As Object
ToolBook = ThisWorkbook.sheets(1)
'■対象ファイルのURL記載位置を取得
Dim URLRange As String
URLRange = ToolBook.Range("G4")
'■ファイルパス開始位置を指定
Dim r As Long
Dim l As Long
Dim objURL As String
r = 13
l = 2
ActiveWindow.WindowState = xlMinimized 'ツールを最小化
Do While ToolBook.Cells(r, l) <> "" 'ファイルパス(B列)が空欄になるまで処理をループ
Dim objFile As String
objFile = ToolBook.Cells(r, l)
Workbooks.Open objFile
Dim wb As Workbook 'ブック格納
Dim sh As Worksheet
Dim countSh As Long
countSh = ActiveWorkbook.Sheets.Count 'シートの総数を取得
Dim bookName As String
bookName = ActiveWorkbook.Name '開いたファイル名を取得
ActiveWindow.WindowState = xlMinimized '対象ファイルも邪魔なので最小化
Dim a As Long
a = 1
Do While a > countSh
Dim objSh As Object
objSh = ActiveWorkbook.Sheets(a)
objURL = objSh.Range(URLRange)
Dim isURL As Long
isURL = InStr(1, objURL, "http")
If isURL > 0 Then
ThisWorkbook.Activate
l = l + 1
ToolBook.Cells(r, l) = objURL
If GetWebStatus(objURL) = "200" Then
'■リンク切れ確認処理
'---IE起動
Dim objIE As InternetExplorer 'IEを用意
Set objIE = CreateObject("Internetexplorer.Application")
objIE.Visible = True
objIE.navigate objURL
Call IEWait(objIE)
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document.all(0).outerHTML 'htmlをすべて取得
Dim cannotFind As Long
Dim cannnotDes As Long
Dim cannotView As Long
cannotFind = InStr(1, htmlDoc, "見つかりませ")
cannnotDes = InStr(1, htmlDoc, "表示できませ")
cannotView = InStr(1, htmlDoc, "見られませ")
If cannotFind + cannnotDes + cannotView >0 Then
ThisWorkbook.Activate
ToolBook.Cells(r+1, l) = "×"
Call Act(wb, bookName)
Else
ThisWorkbook.Activate
ToolBook.Cells(r+1, l) = "〇"
Call Act(wb, bookName)
End If
objIE.Quit
Else
ThisWorkbook.Activate
ToolBook.Cells(r+1, l) = "×"
Call Act(wb, bookName)
End If
End If
a = a + 1
Call Act(wb, bookName)
Loop
call Act(wb, bookName)
ActiveWorkbook.Close
l = 2
r = r + 2
ThisWorkbook.Activate
Loop
MsgBox ("チェックが完了しました")
End Sub
'---------------------------------------------------------------------------------------------------
Function IEWait(objIE As InternetExplorer)
Do While objIE.Busy = True
DoEvents
Loop
End Function
'---------------------------------------------------------------------------------------------------
Function Act(wb As Workbook, bName As String)
For Each wb In Workbooks
If wb.Name = bName Then
wb.Activate
End If
Next
End Function
'---------------------------------------------------------------------------------------------------
Function GetWebStatus(URL As String) As String
Dim WinHttp As Object
'"WinHttp.WinHttpRequest.5.1"ではうまくいかなかったため
'"MSXML2.XMLHTTP"を利用
'Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
Set WinHttp = CreateObject("MSXML2.XMLHTTP")
On Error GoTo INVALID
WinHttp.Open "GET", URL, False
WinHttp.send 'GETリクエストを送信
GetWebStatus = WinHttp.Status 'ステータスコードをセット
Set WinHttp = Nothing
Exit Function
INVALID:
GetWebStatus = "Invalid URL"
Set WinHttp = Nothing
End Function
'--------------------------------------------<End of Code>-------------------------------------
しかしLibreで実行すると以下のエラーでURLを開けません。
BASIC ランタイムエラー.
'1'
Type: com.sun.star.lang.IllegalArgumentException
Message: Unsupported URL <>: "from LoadEnv::initializeLoading"
PDFのURLだから?エラーをググってみてもよくわかりません…。
どこが間違っているか教えていただきたいです。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
以下は、昔作ったものを、多少、手を手を入れてみました。
Windows、Excel用のマクロコードです。
WinHTTP Servoces. version 5.1
は、ふつう、C:\WINDOWS\system32\winhttpcom.dll
として入ってますが、同様に使えるなら他のものでも可能です。
A列に入れてお試しください。
以下は、ゲイト式やダミーページを間に入れているサイトでは、この方法では取れません。
'//
Sub TestURlChecker()
For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))
If c.Value <> "" Then
If c.Offset(, 1).Value = "" Then
buf = URLExists(c.Value)
c.Offset(, 1).Value = buf
DoEvents
End If
End If
Next c
End Sub
Function URLExists(URL As String)
Dim Request As Object
Dim ff As Long
Dim ii As Long
Dim rc As Variant
On Error GoTo EndNow
Set Request = CreateObject("WinHttp.WinHttpRequest.5.1")
With Request
.Open "GET", URL, False
.send
ii = InStr(1, Request.responseText, "charset=""", vbTextCompare)
rc = .StatusText
End With
Set Request = Nothing
If ii = 0 And rc = "OK" Then
URLExists = True
ElseIf ii > 0 And rc = "OK" Then
URLExists = "??"
Else
URLExists = False
End If
Exit Function
EndNow:
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】EXCELで読込したCSV...
-
ファイルを開かずにマクロを実行
-
秀丸エディタのハイライトのマ...
-
ACCESS VBAでファイルを開くダ...
-
Access2010 セキュリティの警告...
-
VBA 新規にエクセルを開き既存...
-
【マクロ】名前を保存する際に...
-
フォルダ内のexcelファイルを順...
-
Excelファイルを開いた時に、特...
-
マクロでVLOOKUP数式書込 任意...
-
AutoCad LT2012のカスタマイズ
-
EXCEL VBA 指定したファイルが...
-
エクセルのxls形式からxlsx形式...
-
エクセルのシートの数を数えた...
-
EXCELマクロを無効にして開く方法
-
エクセル 複数ファイルの一括...
-
フォルダ内のブック全部にパス...
-
LTSpiceにLMV358-Nのモデルを入...
-
エクセルファイルをHTML化する...
-
SETを使ったほうがよい?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL VBA 指定したファイルが...
-
【マクロ】名前を保存する際に...
-
フォルダ内のexcelファイルを順...
-
エクセルマクロで不特定なファ...
-
ファイルを開かずにマクロを実行
-
【Excel VBA】ファイル名が一...
-
VBAでワークブックの名前を変数...
-
データ参照先が別ファイルの場...
-
エクセル(マクロ)のファイル...
-
フォルダ内のブック全部にパス...
-
エクセル 複数ファイルの一括...
-
エクセルファイルを開く時、関...
-
秀丸:あらかじめ設定した複数...
-
EXCELマクロを無効にして開く方法
-
Excelのマクロでファイルを開く...
-
accessフォルダを移動したらフ...
-
ファイルの保存場所を変えたら...
-
エクセルファイルをHTML化する...
-
エクセルのシートの数を数えた...
-
ACCESS VBAでファイルを開くダ...
おすすめ情報