Excel的谷歌翻译功能不起作用

Excel的谷歌翻译功能不起作用,excel,vba,google-translate,Excel,Vba,Google Translate,我有这个功能,翻译所有选定的细胞与谷歌翻译 多年来我一直工作得很好,但由于某种原因,它突然停止了工作 知道为什么吗?我正在使用Excel 2010 提前谢谢 Sub TranslateCell() Dim getParam As String, trans As String, translateFrom As String, translateTo As String translateFrom = "en" translat

我有这个功能,翻译所有选定的细胞与谷歌翻译

多年来我一直工作得很好,但由于某种原因,它突然停止了工作

知道为什么吗?我正在使用Excel 2010

提前谢谢

Sub TranslateCell()
        Dim getParam As String, trans As String, translateFrom As String, translateTo As String
        translateFrom = "en"
        translateTo = "fr"
        Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        Dim r As Range, cell As Range
        Set cell = Selection
        For Each cell In Selection.Cells
            getParam = ConvertToGet(cell.Value)
            URL = "https://translate.google.fr/m?hl=" & translateFrom & "&sl=" & translateFrom & "&tl=" & translateTo & "&ie=UTF-8&prev=_m&q=" & getParam
            objHTTP.Open "GET", URL, False
            objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
            objHTTP.send ("")
            If InStr(objHTTP.responseText, "div dir=""ltr""") > 0 Then
                trans = RegexExecute(objHTTP.responseText, "div[^""]*?""ltr"".*?>(.+?)</div>")
                cell.Value = Clean(trans)
            Else
                MsgBox ("Error")
            End If
        Next cell
    End Sub
'----Used functions----
Function ConvertToGet(val As String)
    val = Replace(val, " ", "+")
    val = Replace(val, vbNewLine, "+")
    val = Replace(val, "(", "%28")
    val = Replace(val, ")", "%29")
    ConvertToGet = val
End Function
Function Clean(val As String)
    val = Replace(val, "&quot;", """")
    val = Replace(val, "%2C", ",")
    val = Replace(val, "&#39;", "'")
    Clean = val
End Function
Public Function RegexExecute(str As String, reg As String, _
                             Optional matchIndex As Long, _
                             Optional subMatchIndex As Long) As String
    On Error GoTo ErrHandl
    Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = reg
    regex.Global = Not (matchIndex = 0 And subMatchIndex = 0) 'For efficiency
    If regex.Test(str) Then
        Set matches = regex.Execute(str)
        RegexExecute = matches(matchIndex).SubMatches(subMatchIndex)
        Exit Function
    End If
ErrHandl:
    RegexExecute = CVErr(xlErrValue)
End Function
Sub-TranslateCell()
Dim getParam作为字符串、trans作为字符串、translateFrom作为字符串、translateTo作为字符串
translateFrom=“en”
translateTo=“fr”
设置objHTTP=CreateObject(“MSXML2.ServerXMLHTTP”)
变暗r作为范围,单元格作为范围
设置单元格=选择
对于选择中的每个单元格。单元格
getParam=ConvertToGet(cell.Value)
URL=”https://translate.google.fr/m?hl=“&translateFrom&”&sl=“&translateFrom&”&tl=“&translateTo&”&ie=UTF-8&prev=\u m&q=“&getParam
objHTTP.Open“GET”,URL,False
objHTTP.setRequestHeader“用户代理”、“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)”
objHTTP.send(“”)
如果InStr(objHTTP.responseText,“div dir=”“ltr”“”)大于0,则
trans=regexecute(objHTTP.responseText,“div[^”“]”]*?“ltr”。*?>(.+?)”)
单元格值=干净(trans)
其他的
MsgBox(“错误”)
如果结束
下一个细胞
端接头
'----使用过的函数----
函数ConvertGet(val为字符串)
val=替换(val,“,”+”)
val=Replace(val,vbNewLine,“+”)
val=替换(val,“(”,“%28”)
val=替换(val,“)”,“%29”)
ConvertToGet=val
端函数
函数清理(val作为字符串)
val=替换(val,“”,“”)
val=替换(val,“%2C”,“,”)
val=替换(val,';“,”)
Clean=val
端函数
公共函数regexecute(str作为字符串,reg作为字符串_
可选的匹配索引,只要_
可选的subMatchIndex(长度)为字符串
关于错误转到ErrHandl
设置regex=CreateObject(“VBScript.RegExp”):regex.Pattern=reg
regex.Global=Not(matchIndex=0,subMatchIndex=0)表示效率
如果正则表达式测试(str),则
Set matches=regex.Execute(str)
regexecute=匹配(匹配索引)。子匹配(子匹配索引)
退出功能
如果结束
埃尔汉德尔:
regexecute=CVErr(xlErrValue)
端函数

我的猜测是,Google已经更改了响应HTML,并且您的代码为翻译寻找的DIV不再是响应格式的一部分

我运行并获得了一个有效的响应页面。我更改了您的代码以处理此“新”响应

试试这个:

Sub TranslateCell()
    Dim objHTTP As Object, URL$
    Dim getParam As String, trans As String, translateFrom As String, translateTo As String
    translateFrom = "en"
    translateTo = "fr"
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    Dim r As Range, cell As Range
    Set cell = Selection
    For Each cell In Selection.Cells
        getParam = ConvertToGet(cell.Value)
        URL = "https://translate.google.fr/m?hl=" & translateFrom & "&sl=" & translateFrom & "&tl=" & translateTo & "&ie=UTF-8&prev=_m&q=" & getParam
        objHTTP.Open "GET", URL, False
        objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
        objHTTP.Send
        'If InStr(objHTTP.responseText, "div dir=""ltr""") > 0 Then
        If InStr(objHTTP.responseText, "<div class=""result-container"">") Then
            'trans = RegexExecute(objHTTP.responseText, "div[^""]*?""ltr"".*?>(.+?)</div>")
            trans = RegexExecute(objHTTP.responseText, "div[^""]*?""result-container"".*?>(.+?)<\/div>")
            cell.Value = Clean(trans)
        Else
            MsgBox "Error"
        End If
    Next cell
End Sub
Sub-TranslateCell()
Dim objHTTP作为对象,URL$
Dim getParam作为字符串、trans作为字符串、translateFrom作为字符串、translateTo作为字符串
translateFrom=“en”
translateTo=“fr”
设置objHTTP=CreateObject(“MSXML2.ServerXMLHTTP”)
变暗r作为范围,单元格作为范围
设置单元格=选择
对于选择中的每个单元格。单元格
getParam=ConvertToGet(cell.Value)
URL=”https://translate.google.fr/m?hl=“&translateFrom&”&sl=“&translateFrom&”&tl=“&translateTo&”&ie=UTF-8&prev=\u m&q=“&getParam
objHTTP.Open“GET”,URL,False
objHTTP.SetRequestHeader“用户代理”、“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)”
发送
'如果InStr(objHTTP.responseText,“div dir=”“ltr”“”)大于0,则
如果InStr(objHTTP.responseText,”),则
“trans=regexecute(objHTTP.responseText,“div[^”“]”]*?“ltr”。*?>(.+?)”)
trans=regexecute(objHTTP.responseText,“div[^”“]”]*?“结果容器”。*?>(.+?)”)
单元格值=干净(trans)
其他的
MsgBox“错误”
如果结束
下一个细胞
端接头

请包括
ConvertToGet()
regexecute()
Clean()的代码
。还有,发生了什么?你说它不工作……但是发生了什么?它会产生错误吗……在哪一行?嗨,Excel hero。我刚收到Else语句调用的错误消息。你检查过当你到达if语句时,
objHTTP.responseText
是什么吗?它是否仍然包括
div dir=“ltr?”“
?我猜不会,所以这意味着谷歌改变了一些你现在必须弄清楚的事情。就是这样!现在它又能正常工作了。非常感谢,真正的Excel英雄:)非常欢迎。@Marrone我发现你的问题很有趣,并决定基于此创建一个用户定义函数。我刚才用UDF回答了2013年的一个古老问题。你可能会发现它很有用:很高兴听到这个!我也一定会好好利用的。再次感谢:)