Google перевод не переводит в IE, когда веб-сайт открыт из VBA - PullRequest
0 голосов
/ 05 декабря 2018

Google переводчик не переводит текст (с японского на английский).Функция всегда возвращает «» при открытии веб-сайта и вводе текста с использованием следующего кода:

Function OutlookGetTransItem(IE As Object, URL As String, trans_text As String) As String
Dim t As Date

If trans_text = "" Then OutlookGetTransItem = trans_text: Exit Function

Const MAX_WAIT_SEC As Long = 5

With IE
    .Visible = True
    .navigate URL

    While .Busy Or .ReadyState < 4: DoEvents: Wend

    .Document.querySelector("#source").Value = trans_text

    Dim translation As Object, translationText As String
    t = Timer
    Do
        On Error Resume Next
        Set translation = .Document.querySelector(".tlid-translation.translation")
        translationText = translation.innerText
        On Error GoTo 0
        If Timer - t > MAX_WAIT_SEC Then Exit Do
    Loop While translationText = vbNullString
    OutlookGetTransItem = translationText
End With
End Function

IE выдает эту ошибку, когда я пытаюсь вручную нажать стрелку / кнопку перевода на веб-сайте: SCRIPT5025: URI, который нужно декодировать, не является допустимой кодировкой translate_m.js (207,484)

Это URL, на который я перехожу:

https://translate.google.com/#view=home&op=translate&sl=ja&tl=en

Воттекст, который я задаю как trans_text, этот текст взят из электронного письма Outlook, используя его свойство .body:

関係 各位

1 第 第 2 p .pdf (議事 板書) 」を 送 付 た し ま。。 よ し く く 101 い い 致 101 す 101 101

, 全 ロ セ ン 残 課題 対 対 対 実 実 事 事 D D D D D D 全 全 ド 全 全 全 全 全 ア 全 全 ド 全 全ェ ッ ク, 燃料 НАСОС 不 具 合 調査, 冷 房 性能 未達 対 応) · Т / М IP-の FK と FKk2 と の 比較 を 提示 す る 事 · サ ー モ ス タ ッ ト の メ ー カ ー を 再 確認 す る こ と · 始 動 エ ン ス ト チ ェ ッ ク リ ス ト の 再 チ ェ ッ ク を 実 施 す る 事(エ ン ス ト 率 パ パ AF AF AF AF AF AF AF AF AF 特性 AF AF 動 動 動 動 動 動 動 項目 動 動 動 F F F F F 車 F F ク始 動 軽 質 確認, か ぶ り, セ レ ク ト ア イ フ ラ, PCV ハ ン チ ン グ 確認, 即 始 動 確認, 押 し 出 さ れ 確認) · Н1 を 最終 仕 様 で ま と め る 事 · 各 相 場 チ ェ ッ ク デ ー タ の 古 い L42L の ラ イ ン を 削除 す る 事 · ブ レ ー キ エ ン ス ト 回 転 低下 時 のP 両 振動 へ 影響 を 確認 す ・ ・ ・ の の p Tp を 確認 す る 事 ク ラ ン ン グ 回 の の の 値 の の 所 を る・ 適合 ・ ・ 全 全 ル 事 事 事 事 事 事 事 事 事 事 事 事 事 事 R R R 全 全 全 全 全 ル ル ル ル ル 確認 確認確認) ・ BCV の の / / の デ デ ー ー 再 事 事 事 事 事 (ア ル ミ * 化)フ リ ー) \ 3 悪 格納 フ ォ ル ダ 2 \ 111117_NAM_L42L_TR2k2_3 悪>

1 Ответ

0 голосов
/ 05 декабря 2018

Измените свой URL-адрес слегка и позвольте браузеру обрабатывать кодировку URL-адреса.Здесь я читаю ваш текст из клетки.Когда сайт выполняет перевод, он генерирует новый URL с параметром строки запроса text=<your string to translate>;поэтому добавьте text= в начальный URL и объедините фразу для перевода.

Помните, что вам нужно закрыть свой экземпляр IE в какой-то момент.Я не являюсь поклонником передачи IE как объекта таким образом и, вероятно, хотел бы, чтобы он содержался в классе, который генерирует объект IE в классе Class_Initialize().Затем вы создаете экземпляр этого класса с помощью переменной в подпункте.

Я часто забываю, что соответствующий метод навигации, который я считаю, теперь .navigate2.

Option Explicit

Public Sub test()
    Dim ie As InternetExplorer, trans_text As String
    Const URL As String = "https://translate.google.com/#view=home&op=translate&sl=ja&tl=en&text="
    Set ie = New InternetExplorer
    trans_text = [A1].Value
    Debug.Print OutlookGetTransItem(ie, URL, trans_text)
    ie.Quit
End Sub

Public Function OutlookGetTransItem(ByVal ie As Object, ByVal URL As String, ByVal trans_text As String) As String
    Dim t As Date

    If trans_text = vbNullString Then OutlookGetTransItem = trans_text: Exit Function

    Const MAX_WAIT_SEC As Long = 5

    With ie
        .Visible = True
        .navigate2 URL & trans_text

        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim translation As Object, translationText As String
        t = Timer
        Do
            On Error Resume Next
            Set translation = .document.querySelector(".tlid-translation.translation")
            translationText = translation.innerText
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While translationText = vbNullString
        OutlookGetTransItem = translationText
    End With
End Function
...