如何在VBA中更改Userform的标题栏文本?

时间:2010-06-04 09:30:32

标签: excel vba excel-vba caption userform

我正在维护一个用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。

1 个答案:

答案 0 :(得分:1)

你的frmFoo实际上与基类UserForm不是同一类型,而是在VBA的恶意OO实现中从内部“降序”,所以你不能将它作为参数类型可靠地使用,使用Object代替工作;

Sub TranslateDialog(pForm As Object, pFormName As String)