RedmineからCSVファイルをダウンロードします。
パラメータは以下の通りです。URLは本場Redmineのプロジェクトを使用させていただきます。
取得したい項目や、絞り込み条件などはカスタムクエリで選定します。
APIキーを使用する場合は、B4に記載を行ってください。(今回の例は無し)

【サンプルプログラム】
Option Explicit
Public 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
Public Declare PtrSafe Function DeleteUrlCacheEntry Lib "wininet" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
Sub GetRedmine()
Dim wb As Workbook
Dim ws As Worksheet
Dim url As String
Dim query_id As Long
Dim api_key As String
Dim download_file As String
Dim result As Long
Set wb = Application.ThisWorkbook()
Set ws = wb.Sheets(1)
' 設定を取得
url = ws.Range("B2") ' Redmine url
query_id = Val(ws.Range("B3")) ' カスタムクエリNo.
api_key = ws.Range("B4") ' API Key
download_file = ws.Range("B5") ' ダウンロード
' ファイルをダウンロードする
result = RedmineDownloadFile(url, query_id, api_key, download_file)
End Sub
【関数化】
' ------------------------------------------------------------
' 説明:Redmine の URL を指定してファイルをダウンロード
' 引数:1:RedmineのURL
' 2:カスタムクエリNo.
' 3:API Key
' 4:ダウンロードファイル名
' 戻値:S_OK(0):ダウンロードが成功したことを示します。
' E_OUTOFMEMORY(0x8007000E):メモリ不足による失敗を示します。
' INET_E_DOWNLOAD_FAILURE(0x800C0008):ダウンロードの失敗を示します。
' ------------------------------------------------------------
Function RedmineDownloadFile(url As String, query_id As Long, api_key As String, filename As String) As Long
Dim url_path As String
If api_key <> "" Then
' APIキーが必要な場合
url_path = url & "?query_id=" & query_id & "&key=" & api_key
Else
' APIキーが不要な場合
url_path = url & "?query_id=" & query_id
End If
' キャッシュクリア
DeleteUrlCacheEntry url_path
RedmineDownloadFile = URLDownloadToFile(0, url_path, filename, 0, 0)
End Function
Redmine のAPIキーについては、REST API — Redmine用語解説 を参照してください。
【注意事項】
ダウンロートには、「URLDownloadToFile」を使用します。
この際、32bitと64bitで処理の記載が違ってきます。64bitではDeclare の後に、PtrSafe を付けないとエラーになります。Declare ステートメント (VBA)
Public 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
【修正】
2024/11/04 関数の戻り設定が誤っていたため修正。


コメント