MENU

vba-WordPress-upload

VBA を使って Excel から WordPress に投稿するには、WordPress の REST API を利用するのが一般的です。以下の手順で実装できます。


目次

VBA を使って Excel から WordPress に投稿する

1. WordPress で API アクセスを有効にする

  1. アプリケーションパスワードを作成
    • WordPress の管理画面で、
      「ユーザー」→「プロフィール」→「アプリケーションパスワード」
    • API 用のパスワードを作成し、控えておく。
  2. 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 のデータを取得して投稿
  • 画像をアップロードし、記事に埋め込むことも可能

もし特定のワークフローに合わせた調整が必要なら、詳しく教えてください!

よかったらシェアしてね!
目次