我正在维护一个用VBA for Excel 2002(XP)/ 2003编写的旧应用程序,并且正在尝试将其国际化。
为此,我动态阅读翻译后的字符串,并通过更新其.Caption属性来更新我的用户表单上的各种控件。
这适用于所有控件但不适用于表单本身 - 当我更改表单的.Caption属性时,标题栏会一直显示“硬编码”值,而新值则显示在下方它,在表格本身的“画布”的顶部。
是否可以在显示UserForm之后更改其标题栏文本,或者是否必须在显示之前更改表单的.Caption属性,以便将其反映在标题栏中比在画布/客户区??
我的代码看起来像这样:
' in frmFoo
Private Sub UserForm_Activate()
' ...
TranslateDialog Me, "frmFoo"
' ...
End Sub
' in a VBA module
Sub TranslateDialog(pForm As UserForm, pFormName As String)
Dim new Caption As String
Const notFound As String = "###!!@@NOTFOUND@@!!###"
' ...
' GetMessage() returns the translated message for a given key, or the
' default value (second parameter) if no translation is available.
' The translation key for the form caption is the form name itself.
newCaption = GetMessage(pFormName, notFound)
If newCaption <> notFound Then pForm.Caption = newCaption
' ...
End Sub
正如我所说,pForm.Caption
的赋值确实有效 - 但它不会写入窗口的标题栏,而是直接写在窗口的标题栏下面。我在Windows XP SP 3上运行Excel 2003。
答案 0 :(得分:1)
你的frmFoo
实际上与基类UserForm
不是同一类型,而是在VBA的恶意OO实现中从内部“降序”,所以你不能将它作为参数类型可靠地使用,使用Object代替工作;
Sub TranslateDialog(pForm As Object, pFormName As String)