你不能 - 无论如何也不能直接。在 VB6 中,.res 文件是您可以添加到项目中的各种组件类型之一,但在 VBA 中,精简的 IDE 没有 Resource Editor 功能(不确定它,已经有一段时间了..),毫无疑问,它是现代 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 领域中,这很容易成为某个隐藏工作表上的表格。
然后ResourceManager 可以是一个 VBA 类,其职责是进入该隐藏表(可能将内容缓存到某些字典中以避免重复点击工作表)并获取给定字符串的给定 文化键(“en-US”、“fr-CA”、“de-DE”等),尽管LCID 代码可能会使事情更容易在 COM 领域中集成(例如本机/Win32使用此类 ID 的 API)。
假设您正在构建一个复杂的内部应用程序,并从一开始就这样做:您将可显示的字符串内容与代码分开,然后以这种方式构建所有内容。有一天,公司收购了西班牙的一家公司,或在德国开设了办事处,突然您的应用需要翻译。
因为本地化一直是一个问题,您所要做的就是翻译资源字符串,并且噗!,应用知道在隐藏表,因此有一种新的语言可供选择,一切都“正常工作”,生活很棒。请您取消隐藏工作表并按原样发送它们并附上说明。
如果本地化是事后的想法……我诚挚的同情……这将不好玩。 #BTDT