VBA を使って Excel から WordPress に投稿するには、WordPress の REST API を利用するのが一般的です。以下の手順で実装できます。
目次
VBA を使って Excel から WordPress に投稿する
1. WordPress で API アクセスを有効にする
- アプリケーションパスワードを作成
- WordPress の管理画面で、
「ユーザー」→「プロフィール」→「アプリケーションパスワード」 - API 用のパスワードを作成し、控えておく。
- WordPress の管理画面で、
- REST API のエンドポイント
- 投稿用エンドポイント:
https://example.com/wp-json/wp/v2/posts - 画像アップロード用エンドポイント:
https://example.com/wp-json/wp/v2/media
- 投稿用エンドポイント:
2. VBA で WordPress API に投稿する
(1) 必要なライブラリを有効にする
VBA から HTTP リクエストを送信するには、Microsoft XML, v6.0 を有効にする必要があります。
- 「ツール」→「参照設定」 で 「Microsoft XML, v6.0」 にチェックを入れる。
(2) 投稿データの送信
Sub PostToWordPress()
Dim http As Object
Dim URL As String
Dim JSON As String
Dim username As String, password As String
Dim auth As String
' WordPressのURL
URL = "https://example.com/wp-json/wp/v2/posts"
' 認証情報(base64エンコードが必要)
username = "your_username"
password = "your_application_password"
auth = "Basic " & Base64Encode(username & ":" & password)
' 投稿データをJSONで作成
JSON = "{""title"": ""VBA から投稿"", ""content"": ""これはVBAから投稿したテストです"", ""status"": ""publish""}"
' HTTPリクエストを作成
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", URL, False
http.setRequestHeader "Content-Type", "application/json"
http.setRequestHeader "Authorization", auth
http.Send JSON
' レスポンスを確認
MsgBox http.responseText
End Sub
3. 画像をアップロードする
画像を WordPress にアップロードするには、multipart/form-data を使います。
(1) 画像アップロードのコード
Sub UploadImage()
Dim http As Object
Dim URL As String
Dim username As String, password As String
Dim auth As String
Dim filePath As String
Dim fileData As String
' WordPress の画像アップロードエンドポイント
URL = "https://example.com/wp-json/wp/v2/media"
' 認証情報
username = "your_username"
password = "your_application_password"
auth = "Basic " & Base64Encode(username & ":" & password)
' 画像ファイルのパス(ローカル)
filePath = "C:\path\to\image.jpg"
' 画像データを読み込む
fileData = ReadBinaryFile(filePath)
' HTTPリクエストを作成
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", URL, False
http.setRequestHeader "Content-Type", "image/jpeg"
http.setRequestHeader "Authorization", auth
http.setRequestHeader "Content-Disposition", "attachment; filename=""image.jpg"""
http.Send fileData
' レスポンスを確認
MsgBox http.responseText
End Sub
(2) Base64エンコードの関数
Function Base64Encode(str As String) As String
Dim objXML As Object, objNode As Object
Set objXML = CreateObject("MSXML2.DOMDocument.3.0")
Set objNode = objXML.createElement("Base64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = StrConv(str, vbFromUnicode)
Base64Encode = objNode.Text
End Function
(3) バイナリファイルを読み込む関数
Function ReadBinaryFile(filePath As String) As Variant
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Type = 1 ' バイナリ
stream.Open
stream.LoadFromFile filePath
ReadBinaryFile = stream.Read
stream.Close
Set stream = Nothing
End Function
4. Excel シートのデータを投稿
Excel のシートからデータを取得して投稿する場合、例えば A1セルにタイトル、A2セルに本文 があるとします。
Sub PostFromExcel()
Dim http As Object
Dim URL As String
Dim JSON As String
Dim username As String, password As String
Dim auth As String
Dim title As String, content As String
' Excel シートからデータ取得
title = ActiveSheet.Range("A1").Value
content = ActiveSheet.Range("A2").Value
' WordPressのURL
URL = "https://example.com/wp-json/wp/v2/posts"
' 認証情報
username = "your_username"
password = "your_application_password"
auth = "Basic " & Base64Encode(username & ":" & password)
' JSONデータ作成
JSON = "{""title"": """ & title & """, ""content"": """ & content & """, ""status"": ""publish""}"
' HTTPリクエスト
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", URL, False
http.setRequestHeader "Content-Type", "application/json"
http.setRequestHeader "Authorization", auth
http.Send JSON
' レスポンスを確認
MsgBox http.responseText
End Sub
5. まとめ
- VBA で WordPress の REST API にアクセス
- Basic 認証(アプリケーションパスワード)を使用
- Excel のデータを取得して投稿
- 画像をアップロードし、記事に埋め込むことも可能
もし特定のワークフローに合わせた調整が必要なら、詳しく教えてください!