実にいい加減ですが、「最初のtextareaタグに挿入する」という方法でもできました。
Debug.Print で実際の<textarea> タグを表示し、たまにclassやidが変わるのが確認できましたが、変わったままでも挿入できました。
●通常時
<textarea class="orig tlid-source-text-input goog-textarea" id="source" style="height: 53px; padding-bottom: 1px; -ms-overflow-x: auto; -ms-overflow-y: hidden; box-sizing: border-box;" spellcheck="false" rows="1" autocorrect="off" autocomplete="off" autocapitalize="off"></textarea>
●異常時
<textarea class="er8xn" role="combobox" aria-expanded="false" aria-controls="kvLWu" spellcheck="false" aria-autocomplete="list" aria-label="原文" placeholder="" rows="1" jsaction="blur:TP1Wfd; focus:dFlNRb,HCeAxb; input:r9XDpf,Gyn8rd; mouseup:BR6jm; keydown:O0Dsab; keyup:pHu1gc; paste:puy29d;" jsname="BJE2fc" autocorrect="off" autocomplete="off" autocapitalize="off"></textarea>
しかし原文挿入はできたのですが、「異常時」の時のテキスト挿入では翻訳が動いてくれないことがあります。
手動で入力エリアをクリックし、スペースなりEnterなりを打つと、翻訳が表示されるのですが。
原因はよくわかりませんね…。
私の試した範囲では、上記の2パターンしか無いようでしたが…。
ieCheck(objIE) はこちらからの引用でページ表示を待っているだけです。
>https://www.vba-ie.net/code/iecheck.php
Sub translate2()
Dim objIE As InternetExplorer
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://translate.google.co.jp/?tl=ja"
Call ieCheck(objIE)
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
'---チェック用 タグはどうなってる?
Dim elements As IHTMLElementCollection
Set elements = htmlDoc.getElementsByTagName("textarea")
Dim element As IHTMLElement
For Each element In elements
Debug.Print element.outerHTML
Next element
'チェックここまで
Dim objTextarea As HTMLInputElement
Set objTextarea = objIE.document.getElementsByTagName("textarea")(0)
objTextarea.Value = ActiveCell.Value
'objTextarea.Focus 'たまに翻訳されない時にトリガーにならないか…?
End Sub
お礼
>>文字列をUTF-8でエンコードするユーザー定義関数 非常に有用な情報をありがとうございます。 この方法が分からなかったので今まで、以下のような方法でURLに文章を渡していました。 https://translate.google.co.jp/?hl=ja#ko/ja/(翻訳する文章)/ https://translate.google.co.jp/?hl=ja#view=home&op=translate&sl=ko&tl=ja&text=(翻訳する文章) この方法だと、URLエンコードしなくても翻訳される一方で、速度が遅く、 「翻訳エラーが発生しました」というメッセージが数回に1回ぐらいの頻度で発生していました。 (さらに「%」や「/」など特殊な記号を全角に変換しないと正常に翻訳ができません) 教えてもらったencodeUTF8関数を使用することで下記の方法でも翻訳ができるようになりました。 https://translate.google.co.jp/?sl=ko&tl=ja&q=(翻訳する文章) https://translate.google.co.jp/?sl=ko&tl=ja&text=(翻訳する文章) これにより、URLエンコードしないでURLに渡す方法に比べて、速度が向上し、 「翻訳エラーが発生しました」の頻度が数百回回に1回ぐらいの頻度に下がりました。 (翻訳エラーが発生した場合も2秒間翻訳結果が取得できなかったら再度URLに再接続するようにしたので、2秒間ロスする程度で済むようになりました) また、「%」や「/」など特殊な記号を含む場合でも、いちいち全角に変換しなくても正常に翻訳できるようになりました。 それでも、ID「source」のテキストエリアに直接文字を渡した方が速いですし、 エラーも発生もしないですが、以前よりはだいぶ使いやすくなりました。 一応補足になりますが、 セル内の文字がALT+Enterで改行されている場合、 改行コードであるvblf(コード表の10進数で「10」)が含まれています。 この場合、vblfは16進数だと「A」と1桁で表されるため、 encodeUTF8(vbLf) を実行すると「%A」が返ってきます。 ただ、グーグル翻訳でURLで渡すときは 「%0A」と2桁目を0で埋めないと正常に翻訳できないので encodeUTF8関数内の 「Hex(mynumber)」 は 「Right("0" & Hex(mynumber), 2)」 などで2桁目を0で埋めた方がいいです。 こうすると encodeUTF8(vbLf) を実行したときに「%0A」を返すようになり、 改行を含むセルでも正常に翻訳ができるようになります。 それ以外では特に問題はありませんでした。