【发布时间】:2020-12-22 20:06:20
【问题描述】:
我有这个功能可以用谷歌翻译翻译所有选定的单元格。
我多年来一直工作良好,但由于某种原因突然停止工作。
知道为什么吗?我正在使用 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, """, """")
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
【问题讨论】:
-
请附上
ConvertToGet()和RegexExecute()和Clean()的代码。 -
另外,会发生什么?你说它不起作用......但是会发生什么?它会产生错误...在哪一行?
-
你好 Excel 英雄。我刚刚收到 Else 语句调用的错误消息。
-
当您到达 if 语句时,您是否检查过
objHTTP.responseText是什么?是否还包括div dir="ltr"?我猜不是,所以这意味着谷歌改变了一些你现在必须弄清楚的东西。
标签: excel vba google-translate