投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/1/10 17:42:00
> 'DeepL(メイン)要素を取得 (デスクトップから直接の原文/訳文の要素を検索してもいけるが、検索負荷を減らす目的でDeepL画面を経由してる)
 
検索負荷を減らすためなら、UIAutomation を使うのではなく、
正規の DeepL API を呼び出すべきなのでは…?

Option Explicit

Public Function Translate_English_To_Japanese(ByVal Text As StringAs String
    Translate_English_To_Japanese = Translate("EN""JA", Text)
End Function
Public Function Translate_Japanese_To_English(ByVal Text As StringAs String
    Translate_Japanese_To_English = Translate("JA""EN", Text)
End Function

'https://www.deepl.com/ja/docs-api/glossaries/ 
Private Function Translate(ByVal sourceLang As StringByVal targetLang As StringByVal Text As StringOptional ByVal AuthKey As String = YOUR_AUTH_KEY) As String
    Dim strReq As String
    strReq = "text=" & Replace(WorksheetFunction.EncodeURL(Text), "%20""+")
    If sourceLang <> "" Then strReq = strReq & ("&source_lang=" & sourceLang)
    If targetLang <> "" Then strReq = strReq & ("&target_lang=" & targetLang)
    
    Dim xDoc As MSXML2.XMLHTTP60
    Set xDoc = New MSXML2.XMLHTTP60
    xDoc.Open "POST""https://api-free.deepl.com/v2/translate?" & strReq, False
    xDoc.setRequestHeader "Authorization""DeepL-Auth-Key " & AuthKey
    xDoc.send
    If xDoc.Status = 200 Then
        'この JSON の .translations.text 部に訳文が入っている 
        Dim rawJson As String
        rawJson = xDoc.responseText

        '本来は JSON 用のライブラリで読み取った方が良い 
        Dim translated As String
        translated = Split(rawJson, """", 10)(9)
        translated = Left(translated, Len(translated) - 4)
        translated = Replace(translated, "\\""\")
        translated = Replace(translated, "\r", vbCr)
        translated = Replace(translated, "\n", vbLf)
        translated = Replace(translated, "\t", vbTab)

        Translate = translated
    Else
        Debug.Print xDoc.Status, xDoc.statusText
        Translate = vbNullString
        'Stop 
    End If
End Function