Excel的谷歌翻译功能不起作用
我有这个功能,翻译所有选定的细胞与谷歌翻译 多年来我一直工作得很好,但由于某种原因,它突然停止了工作 知道为什么吗?我正在使用Excel 2010 提前谢谢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
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, """, """")
val = Replace(val, "%2C", ",")
val = Replace(val, "'", "'")
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年的一个古老问题。你可能会发现它很有用:很高兴听到这个!我也一定会好好利用的。再次感谢:)