Страницы: 1
RSS
Как заставить работать макрос в Excel 2007 ? (сейчас работает в Excel 2013)
 
Доброе утро.
Есть такой вопрос.

Имеется макрос перевода текста на английский язык .
Но он работает только в Е2013, а в Е2007 работать не хочет.

Как заставить этот макрос -  работать в Excel 2007  ?
 
он и в 2016 через раз работает.

Off.Может по тому, что поддержка 2007 завершилась :-)  
По вопросам из тем форума, личку не читаю.
 
Я бы вместо этого блока:
Код
Do Until IE.ReadyState = 4
        DoEvents
    Loop
    Application.Wait (Now + TimeValue("0:00:5"))
    Do Until IE.ReadyState = 4
        DoEvents
    Loop

записывал так:
Код
    Do While IE.Busy Or IE.readyState <> 4
        DoEvents
    Loop

В итоге получилось так:
Код
Function transalte_using_vba(str) As String
' Tools Refrence Select Microsoft internet Control
    Dim i As Long, j As Long, IE As Object
    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 = "en"
    text_to_convert = str
    'open website
    IE.Visible = False
    IE.navigate "http://translate.google.com/#" & inputstring & "/" & outputstring & "/" & text_to_convert

    Do While IE.Busy Or IE.readyState <> 4
        DoEvents
    Loop
    
    CLEAN_DATA = Split(Replace(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

вроде работать должно, если Google не начнет отказывать в переводе из-за слишком частого обращения.

Тему я бы назвал: UDF функция перевода через InternetExplorer не работает в 2007 Excel
Изменено: Дмитрий Щербаков - 12.04.2018 09:00:04
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков, А можно для общего развития пояснить, как эти изменения связаны именно с 2007?
По вопросам из тем форума, личку не читаю.
 
В общем и целом - никак. просто одно ожидание состояния окна браузера не является показателем того, что контент прогрузился. Поэтому лучше использовать в связке с IE.Busy.
Вообще, здесь много чего можно поменять - например, я бы брал не InnerHTML, а innerText - тогда и теги не надо было бы отсекать, получили бы слету текст.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий Щербаков написал:
В общем и целом - никак.
Я собственно именно про это, но думал вдруг чего не вижу. тогда и тема:  UDF функция перевода текста через InternetExplorer работает не стабильно.
Ну а у ТС разные ПК просто по разному себя ведут и это не зависит от версии Excel.
По вопросам из тем форума, личку не читаю.
 
Или более сжатая вариация версия корректировки от Дмитрия Щербакова,(поиграюсь с вариациями innerHTML/innerText). Дмитрию Щербакову - спасибо!
Код
Function GoogleTranslater(txt) As String 
Dim IE As Object, dt$ 
Set IE = CreateObject("InternetExplorer.application") 
IE.Visible = False 
IE.Navigate "http://translate.google.com/#auto/en/" & txt 
Do While IE.Busy Or IE.ReadyState <> 4: DoEvents: Loop 
dt = IE.Document.getElementById("result_box").innerHTML 
dt = Replace$(Replace$(dt, "<Span>", "", , , 1), "</Span>", "", , , 1) 
IE.Quit: Set IE = Nothing 
GoogleTranslater = dt 
End Function 

С "InnerTEXT" совсем вышло кратенько:

Код
Function GoogleTranslater(txt) As String
Dim IE As Object
Set IE = CreateObject("InternetExplorer.application")
IE.Visible = False
IE.Navigate "http://translate.google.com/#auto/en/" & txt
Do While IE.Busy Or IE.ReadyState <> 4: DoEvents: Loop
GoogleTranslater = IE.Document.getElementById("result_box").innerText
IE.Quit: Set IE = Nothing
End Function
Изменено: Anchoret - 14.04.2018 20:31:21
Страницы: 1
Наверх