2010-06-04 112 views
1

我正在维护一个使用VBA for Excel 2002(XP)/ 2003编写的旧应用程序,并试图对其进行国际化。如何更改VBA中Userform的标题栏文本?

为此,我动态读取翻译后的字符串,并通过更新其.Caption属性来更新我的用户窗体上的各种控件。

这对预期的所有控件都能正常工作,但对于表单本身不起作用 - 当我更改表单的.Caption属性时,标题栏会一直显示“硬编码”值,而新值则仅显示在它下面,在窗体本身的“画布”的顶部。

是否有可能在用户窗体显示后更改标题栏文本,还是必须在显示窗体的.Caption属性之前更改该窗体的.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 = "###[email protected]@[email protected]@!!###" 
    ' ... 
    ' 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.

回答

1

您的frmFoo实际上与基准UserForm不是同一类型,而是在VBA的奇怪OO实现中内部“下降”,因此您无法可靠地使用它作为参数类型,使用Object而不是工作;

Sub TranslateDialog(pForm As Object, pFormName As String) 
+0

非常好 - 感谢您的帮助!那确实有效。 – 2010-06-16 16:02:32

相关问题