使用vba翻译文本

Mar*_*aza 10 excel vba google-translate msgbox

可能是一个罕见的请愿,但这是问题.

我正在为我的组织调整第三方的优秀人才.excel是用英语开发的,我组织的人员只讲西班牙语.我想使用与原始工作表完全相同的代码,我更喜欢不触摸它(虽然我可以这样做),所以我想使用每次出现msgbox时的函数(英文文本) ,我翻译msgbox消息,但没有触及原始脚本.我正在寻找一个可以在原始代码中每次调用msgbox时调用的掩码.

我更喜欢不触摸原始代码,因为第三方开发人员可能经常更改它,并且每次更改代码时都会非常烦人.

那可能吗?

San*_*osh 17

干得好.

  Sub test()
    Dim s As String
    s = "hello world"
    MsgBox transalte_using_vba(s)

End Sub
Run Code Online (Sandbox Code Playgroud)


 Function transalte_using_vba(str) As String
' Tools Refrence Select Microsoft internet Control


    Dim IE As Object, i As Long
    Dim inputstring As String, outputstring As String, text_to_convert As String, result_data As String, CLEAN_DATA

    Set IE = CreateObject("InternetExplorer.application")
    '   TO CHOOSE INPUT LANGUAGE

    inputstring = "auto"

    '   TO CHOOSE OUTPUT LANGUAGE

    outputstring = "es"

    text_to_convert = str

    'open website

    IE.Visible = False
    IE.navigate "http://translate.google.com/#" & inputstring & "/" & outputstring & "/" & text_to_convert

    Do Until IE.ReadyState = 4
        DoEvents
    Loop

    Application.Wait (Now + TimeValue("0:00:5"))

    Do Until IE.ReadyState = 4
        DoEvents
    Loop

    CLEAN_DATA = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<")

    For j = LBound(CLEAN_DATA) To UBound(CLEAN_DATA)
        result_data = result_data & Right(CLEAN_DATA(j), Len(CLEAN_DATA(j)) - InStr(CLEAN_DATA(j), ">"))
    Next


    IE.Quit
    transalte_using_vba = result_data


End Function
Run Code Online (Sandbox Code Playgroud)


Exc*_*ero 14

这是使用 Excel VBA 和 Google... 翻译文本的更简化的方法。

\n

此 VBA 用户定义函数应输入到标准代码模块中。

\n
Function Translate$(sText$, FromLang$, ToLang$)\n    Dim p1&, p2&, url$, resp$\n    Const DIV_RESULT$ = "<div class=""result-container"">"\n    Const URL_TEMPLATE$ = "https://translate.google.com/m?hl=[from]&sl=[from]&tl=[to]&ie=UTF-8&prev=_m&q="\n    url = URL_TEMPLATE & WorksheetFunction.EncodeURL(sText)\n    url = Replace(url, "[to]", ToLang)\n    url = Replace(url, "[from]", FromLang)\n    resp = WorksheetFunction.WebService(url)\n    p1 = InStr(resp, DIV_RESULT)\n    If p1 Then\n        p1 = p1 + Len(DIV_RESULT)\n        p2 = InStr(p1, resp, "</div>")\n        Translate = Mid$(resp, p1, p2 - p1)\n    End If\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n

单元格中包含以下文本A1Every moment is a fresh beginning.

\n

在单元格中B1输入此公式:

\n
=Translate(A1, "en", "fr")    '<--translates text in A1 from English to French.\n
Run Code Online (Sandbox Code Playgroud)\n

单元格中的结果B1Chaque instant est un nouveau d\xc3\xa9part.

\n

当然这个Translate()函数也可以直接从VBA使用:

\n
MsgBox Translate([A1], "en", "de")  '<--displays: Jeder Moment ist ein Neuanfang.\n
Run Code Online (Sandbox Code Playgroud)\n

当然,您也可以手动使用 Excel 中内置的翻译功能,该功能可以在功能区的审阅选项卡上找到。但上面的 UDF 提供了一种快速且简化的方法\n以编程方式翻译文本。Excel 的翻译功能不通过 Excel 对象模型\n公开,因此像上面这样的函数\n可能非常有用。

\n

和参数必须FromLangToLang下表中的代码:

\n
 CODE   LANGUAGE\n en     English\n fr     French\n es     Spanish\n it     Italian\n de     German\n af     Afrikaans\n sq     Albanian\n am     Amharic\n ar     Arabic\n hy     Armenian\n az     Azerbaijani\n eu     Basque\n be     Belarusian\n bn     Bengali\n bs     Bosnian\n bg     Bulgarian\n ca     Catalan\n ceb    Cebuano\n ny     Chichewa\n zh-CN  Chinese (Simplified)\n zh-TW  Chinese (Traditional)\n co     Corsican\n hr     Croatian\n cs     Czech\n da     Danish\n nl     Dutch\n eo     Esperanto\n et     Estonian\n tl     Filipino\n fi     Finnish\n fy     Frisian\n gl     Galician\n ka     Georgian\n el     Greek\n gu     Gujarati\n ht     Haitian Creole\n ha     Hausa\n haw    Hawaiian\n iw     Hebrew\n hi     Hindi\n hmn    Hmong\n hu     Hungarian\n is     Icelandic\n ig     Igbo\n id     Indonesian\n ga     Irish\n ja     Japanese\n jw     Javanese\n kn     Kannada\n kk     Kazakh\n km     Khmer\n rw     Kinyarwanda\n ko     Korean\n ku     Kurdish (Kurmanji)\n ky     Kyrgyz\n lo     Lao\n la     Latin\n lv     Latvian\n lt     Lithuanian\n lb     Luxembourgish\n mk     Macedonian\n mg     Malagasy\n ms     Malay\n ml     Malayalam\n mt     Maltese\n mi     Maori\n mr     Marathi\n mn     Mongolian\n my     Myanmar (Burmese)\n ne     Nepali\n no     Norwegian\n or     Odia (Oriya)\n ps     Pashto\n fa     Persian\n pl     Polish\n pt     Portuguese\n pa     Punjabi\n ro     Romanian\n ru     Russian\n sm     Samoan\n gd     Scots Gaelic\n sr     Serbian\n st     Sesotho\n sn     Shona\n sd     Sindhi\n si     Sinhala\n sk     Slovak\n sl     Slovenian\n so     Somali\n su     Sundanese\n sw     Swahili\n sv     Swedish\n tg     Tajik\n ta     Tamil\n tt     Tatar\n te     Telugu\n th     Thai\n tr     Turkish\n tk     Turkmen\n uk     Ukrainian\n ur     Urdu\n ug     Uyghur\n uz     Uzbek\n vi     Vietnamese\n cy     Welsh\n xh     Xhosa\n yi     Yiddish\n yo     Yoruba\n zu     Zulu\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

我就是这样做的.它的功能是可选的枚举对象,指向谷歌翻译使用的语言代码.为简单起见,我只包含了一些语言代码.此外,在此示例中,我选择了Microsoft Internet Controls引用,因此不使用创建对象,而是使用InternetExplorer对象.最后,为了摆脱不得不清理输出,我只使用.innerText而不是.innerHTML.请记住,谷歌翻译有大约3000左右的字符限制,而且,你必须设置IE =没有特别是如果你将多次使用这个,否则你将创建多个IE进程,最终它将无法正常工作了.

建立...

Option Explicit

Const langCode = ("auto,en,fr,es")

Public Enum LanguageCode
    InputAuto = 0
    InputEnglish = 1
    InputFrench = 2
    InputSpanish = 3
End Enum

Public Enum LanguageCode2
    ReturnEnglish = 1
    ReturnFrench = 2
    ReturnSpanish = 3
End Enum
Run Code Online (Sandbox Code Playgroud)

测试...

Sub Test()

Dim msg As String

msg = "Hello World!"

MsgBox AutoTranslate(msg, InputEnglish, ReturnSpanish)

End Sub
Run Code Online (Sandbox Code Playgroud)

功能...

Public Function AutoTranslate(ByVal Text As String, Optional LanguageFrom As LanguageCode, Optional LanguageTo As LanguageCode2) As String

Dim langFrom As String, langTo As String, IE As InternetExplorer, URL As String, myArray

If IsMissing(LanguageFrom) Then
    LanguageFrom = InputAuto
End If
If IsMissing(LanguageTo) Then
    LanguageTo = ReturnEnglish
End If

myArray = Split(langCode, ",")
langFrom = myArray(LanguageFrom)
langTo = myArray(LanguageTo)

URL = "https://translate.google.com/#" & langFrom & "/" & langTo & "/" & Text

Set IE = New InternetExplorer

IE.Visible = False
IE.Navigate URL

    Do Until IE.ReadyState = 4
        DoEvents
    Loop

    Application.Wait (Now + TimeValue("0:00:5"))

    Do Until IE.ReadyState = 4
        DoEvents
    Loop

    AutoTranslate = IE.Document.getElementByID("result_box").innerText

    IE.Quit

    Set IE = Nothing


End Function
Run Code Online (Sandbox Code Playgroud)