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 のデータを取得して投稿
- 画像をアップロードし、記事に埋め込むことも可能
もし特定のワークフローに合わせた調整が必要なら、詳しく教えてください!