2017-02-08 12 views
1

Примечание: В отличие от утверждений, этот вопрос не является дубликатом. Мой вопрос помечен как ms-word, и сделанные предложения указывают на ответ ms-excel, который в этом случае не применяется. Word VBA! = Excel VBA.VBScript, GetLocale, SetLocale - Другие использует

У меня есть потребность, когда у меня есть пользователи в Германии, которые генерируют документы Word 2016 на английском языке, но там, где даты проходят через европейский стиль с именами месяца и дня на немецком языке. Нам нужно, чтобы они прошли через стили и имена на английском языке.

Я знаю элементы управления контентом и даты, хотя это не вариант в настоящее время (возможно, в будущем). Изменение локальных региональных настроек также не является вариантом (очевидно, это немецкий). По причинам, по которым я не буду вдаваться здесь, мы ограничены форматом .DOC по наследственным причинам.

Случалось через функции VBScript GetLocale и SetLocal. Работает отлично, в контексте VBScript ...

Вопрос: как я могу ссылаться на VBScript как на DLL и использовать эту функциональность в модуле Office VBA? К сожалению, он не встроен в Office VBA.

Я пробовал ссылаться на VBScript.dll из папки SYsWow64, но единственное, что он предоставляет, это VBScript_Global.GlobalObj и SetLocale, GetLocale недоступны (ссылка указана в последней документации по-прежнему, она не устарела https://msdn.microsoft.com/en-us/library/5xf99h19(v=vs.84).aspx).

Любая помощь была бы принята с благодарностью.

+2

Возможный дубликат [VBA эквивалентна функции VBScript в 'Setlocale'?] (Http://stackoverflow.com/questions/31785613/vba-equivalent-to-vbscripts-setlocale-function) – Lankymart

+0

Этот вопрос и ответ относится к Excel VBA и функции Evaluate, которую Word VBA не поддерживает. Мой вопрос помечен как ms-word Спасибо. – Steve

+0

В этом случае ответ Нет, извините. Если вы используете VBA, вы должны иметь доступ к API Windows, которые VBScript не разрешает. Существует не так много, что вы не можете сделать с Windows API. – Lankymart

ответ

1

Это был ответ, что я написал.

Public Function printDateByLocale(inputDate As Date, inputlocale As String) As String 

Dim codeString As String 
Dim scriptControl As Object 

Set scriptControl = CreateObject("MSScriptControl.ScriptControl") 

codeString = "Function getDateByLocale(myDate, locale)" & vbCrLf & "SetLocale locale" & vbCrLf & "getDateByLocale = FormatDateTime(myDate, vbLongDate) End Function" 

With scriptControl 
    .Language = "VBScript" 
    .addCode codeString 
    printDateByLocale = .Run("getDateByLocale", inputDate, inputlocale) 
End With 

Set scriptControl = Nothing 

End Function 
+0

Изобретательный подход. – Lankymart

+0

Ключом является возможность установить языковой стандарт, что VBScript или JScript могут сделать, что Word VBA не может. В противном случае ни одна из этих операций не была бы обязательной. – Steve