excel - 我可以在 VBA 中使用 .res(资源)文件吗?这样做有好处吗?

标签 excel vba localization vb6

背景

在标题为 Optimize string handling in VB6 - Part I 的文章中,在“将字符串存储在 .res 文件中”小节下,作者讨论了将字符串存储在 .res 文件中,与 VB6 中的字符串文字需要 2 个字节相比,每个字符只需要 1 个字节。

这篇文章是关于 VB6 的,但我正在研究它在 VBA(基于 VB6)中的应用。

问题

  • 如何在 VBA 中使用 .res/Resource 文件(如果可能的话)?
  • 有什么好处?
  • 最佳答案

    你不能 - 无论如何不能直接。在 VB6 中,.res 文件是您可以添加到项目中的各种组件类型之一,但在 VBA 中, strip 化 IDE 没有资源编辑器功能(不确定它的实际名称,已经有一段时间了..),毫无疑问是现代 Visual Studio 中 .resx 设计器的直接祖先。
    从技术上讲,您可以在您的 VBA 项目中使用 .res 文件,但是您也可以使用更现代的 .resx 格式,MSXML 在技术上应该能够使用......尽管,即使在 .NET 中我们通常也不会操作.resx 文件,并且有一个代码生成器涉及将每个资源键转换为生成的类的属性 - 就是这样:

    <data name="SelectAll_Button" xml:space="preserve">
      <value>Select All</value>
    </data>
    
    ...自动变成这样:
    /// <summary>
    ///   Looks up a localized string similar to Select All.
    /// </summary>
    public static string SelectAll_Button {
        get {
            return ResourceManager.GetString("SelectAll_Button", resourceCulture);
        }
    }
    
    从一开始就为您的资源字符串使用 .res/.resx 文件的优势,即使您的应用程序“只需要 en-US 字符串”,主要是关于关注点分离:资源字符串不是代码,它们是数据,并且数据不属于代码。
    现在,在 VBA 领域,分发带有 .resx 文件的 Excel 工作簿是……嗯。 .res/.resx 只是一种数据格式,重要的是它要解决的问题:资源键的存储。在 Excel 中托管的 VBA-land 中,这很容易成为某个隐藏工作表上的表格。
    然后 ResourceManager可以是一个 VBA 类,其职责是进入该隐藏表(可能将内容缓存到某个字典中以避免重复点击工作表)并获取给定文化键的给定字符串(“en-US”、“fr- CA”、“de-DE”等),尽管 LCID代码可能会使事情更容易在 COM 领域中集成(例如,使用此类 ID 的 native /Win32 API)。
    想象一下,您正在构建一个复杂的内部应用程序,并从一开始就这样做:您将可显示的字符串内容与代码分开,并以这种方式构建所有内容。有一天,公司在西类牙收购了一家公司,或者在德国开设了办事处,突然您的应用程序需要翻译。
    因为本地化一直是一个问题,你所要做的就是翻译资源字符串,然后噗!,应用程序知道隐藏表中有一个新列,因此有一种新语言可供选择,一切都“正常工作”生活很棒。您请取消隐藏工作表并按原样发送它们并附上说明。
    如果本地化是事后的想法……我真诚的同情……这不会很有趣。 #BTDT

    关于excel - 我可以在 VBA 中使用 .res(资源)文件吗?这样做有好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62180103/

    相关文章:

    Excel VBA循环代码

    vba - 有更多关于 WordBasic 的 FilePrintSetup 的文档吗?

    excel - 复制数据透视表格式

    excel - VBA:如何引用组合框对象

    php - 本地化 .po 文件格式

    Excel删除多个可能字符串的字符串后的文本

    java - 获取 CSV 格式的 Excel 数据

    python - 如何使用 Python 将每个 Excel 工作表中的数据复制并粘贴到最终工作表中?

    ios - 应用商店语言问题

    jsf - 显示用于本地化目的的参数化字符串