0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Salesforce資格取得者数のPDFファイルをダウンロードするマクロ

Posted at

#初めに
Salesforceに関係はしますが,VBAだけの内容になります.

Salesforce 認定資格保持者数 企業別一覧が公開されています。資格ごとで毎月のファイルを一つ一つ見ているだけではあまり意味のある情報が得られないかもしれませんが,まとめてみると何か見えてくるかもしれません.
今回は,指定した複数のファイルを指定したフォルダにダウンロードするExcel VBAです。

動作環境

Windows 10上のOffice365(64bit)のExcelで確認してます.古いOfficeでは動作しないかもしれません.

おことわり

環境に依存することや、VBAの使い方など基本的な内容はご自身で解決してください。

機能 - PDFファイルのダウンロード

数式ー名前の管理でダウンロードフォルダと資格の一覧の場所が定義されていますので確認してください.
資格一覧シートのB1セルにダウンロード先のフォルダ名を書いておき、"ファイルのダウンロード"ボタンをクリックするとファイルがダウンロードされます。終了すると終了したとメッセージボックスで表示します。
image.png

#マクロ

Option Explicit

Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
   (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long _
    ) As Long

Function DownloadPDFFile(url As String, path As String) As Boolean
    DownloadPDFFile = False
    Dim lRes As Long
    lRes = URLDownloadToFile(0, url, path, 0, 0)
    If lRes = 0 Then ' エラーなし
        DownloadPDFFile = True
    End If
End Function

Sub DownloadPDFFiles()
    Dim r As Range
    Dim strDLFolder As String

    strDLFolder = ThisWorkbook.Names("ダウンロードフォルダ").RefersToRange.Cells(1, 1).Value
    If strDLFolder = "" Then
        MsgBox "ダウンロード先フォルダ名が空なので終了します"
        Exit Sub
    End If
    If Dir(strDLFolder, vbDirectory) = "" Then
        MkDir strDLFolder
    End If
    
    Dim rangeExam As Range
    Set rangeExam = ThisWorkbook.Names("Salesforce認定資格").RefersToRange
    For Each r In rangeExam.Rows
        r.Cells(1, 6) = ""
    Next
    
    MsgBox strDLFolder & vbCrLf & "にファイルをダウンロードします", vbOKOnly
    
    For Each r In rangeExam.Rows
        Dim strFileName As String
        Dim strUrl As String
        '列番号は 1:略称 2:URL 3:ファイル名 4:分類 5:資格名 7:DL状況 8:取り込み
        strUrl = r.Cells(1, 2)
        strFileName = strDLFolder + "\" + Mid(strUrl, InStrRev(strUrl, "/") + 1)
        r.Cells(1, 6) = "*"
        If DownloadPDFFile(strUrl, strFileName) = False Then
            r.Cells(1, 6) = "失敗"
        Else
            r.Cells(1, 6) = "完"
        End If
        DoEvents
    Next
    MsgBox "取り込み完了しました", vbOKOnly
End Sub

#ファイル
Bitbucketにおいてあります
SF資格取得者数.xlsmをダウンロードしてください

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?