【问题标题】:VBScript, GetLocale, SetLocale - Other usesVBScript、GetLocale、SetLocale - 其他用途
【发布时间】:2017-06-26 14:35:09
【问题描述】:

注意:与断言相反,这个问题不是重复的。我的问题被标记为 ms-word 并且提出的建议指向 ms-excel 答案,在这种情况下不适用。 Word VBA != Excel VBA。

我需要让德国的用户生成英语 Word 2016 文档,但日期以德语月份和日期名称的欧洲风格出现。我们需要它们以英文日期样式和名称的形式出现。

我知道内容控件​​和日期选择器,尽管目前这不是一个选项(将来可能会)。更改其本地区域设置也不是一种选择(显然是德语)。出于我不会在这里讨论的原因,由于遗留原因,我们仅限于 .DOC 格式。

在 VBScript 函数 GetLocale 和 SetLocal 中发生。在 VBScript 的上下文中完美运行...

问题是我如何能够将 VBScript 引用为 DLL 并在 Office VBA 模块中使用该功能?不幸的是,它没有内置在 Office VBA 中。

我尝试从 SYSWow64 文件夹中引用 VBScript.dll,但它唯一暴露的是 VBScript_Global.GlobalObj 和 SetLocale,GetLocale 不可用(它仍然在最新文档中被引用,它没有被弃用。 https://msdn.microsoft.com/en-us/library/5xf99h19(v=vs.84).aspx)。

任何帮助将不胜感激。

【问题讨论】:

  • 那个问题和回答是指 Excel VBA 和评估功能,Word VBA 没有这些功能。我的问题被标记为 ms-word 谢谢。
  • 在这种情况下,答案是否定的,抱歉。看起来好像您正在使用 VBA,您应该可以访问 VBScript 不允许的 Windows API。使用 Windows API 没有什么不能做的。
  • 在 Word 中,用于日期的语言应反映应用于文档的语言格式。很可能,鉴于您所看到的,这是德语。诀窍是将这些文档格式化为“英语”。不幸的是,这并不是一个应有的简单过程。你会在这里找到一些提示:homepage.swissonline.ch/cindymeister/LangFmt.htm
  • 谢谢辛迪。这可能会有所帮助,尽管现在有点过时了。

标签: vba vbscript ms-word


【解决方案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

【讨论】:

  • 创新方法。
  • 关键是设置语言环境的能力,VBScript 或JScript 可以做到而Word VBA 不能。否则,这些业务都将是不必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 2014-03-18
相关资源
最近更新 更多