如何在VBA中更改用户窗体的标题栏文本?
我正在维护一个用VBA for Excel2002(XP)/2003编写的旧ish应用程序,并试图将其国际化 为此,我动态地读入翻译后的字符串,并通过更新它们的.Caption属性来更新userform上的各种控件 这对所有控件都有效,但对表单本身无效——当我更改表单的.Caption属性时,标题栏将继续显示“硬编码”值,而新值将显示在它的正下方,即表单本身的“画布”顶部 是否可以在显示UserForm后更改其标题栏文本,或者在显示前必须更改窗体的.Caption属性,以便将其反映在标题栏中而不是画布/客户端区域中 我的代码如下所示:如何在VBA中更改用户窗体的标题栏文本?,vba,excel,caption,userform,Vba,Excel,Caption,Userform,我正在维护一个用VBA for Excel2002(XP)/2003编写的旧ish应用程序,并试图将其国际化 为此,我动态地读入翻译后的字符串,并通过更新它们的.Caption属性来更新userform上的各种控件 这对所有控件都有效,但对表单本身无效——当我更改表单的.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
frmFoo中的”
私有子用户表单_Activate()
' ...
翻译对话“frmFoo”
' ...
端接头
'在VBA模块中
子TranslateDialog(pForm作为用户表单,pFormName作为字符串)
将新标题变暗为字符串
Const notFound As String=“####!!@@notFound@@@
' ...
'GetMessage()返回给定键的已翻译消息,或
'默认值(第二个参数),如果没有可用的翻译。
'表单标题的翻译键是表单名称本身。
newCaption=GetMessage(pFormName,notFound)
如果找不到newCaption,则pForm.Caption=newCaption
' ...
端接头
正如我所说,对
pForm.Caption
的赋值确实有效果,但它不会写入窗口的标题栏,而是直接写入它下面。我正在Windows XP SP 3上运行Excel 2003。您的frmFoo
实际上与基本用户表单
的类型不同,而是在VBA的wierd OO实现中从其内部“派生”而来,因此您无法可靠地将其用作参数类型,而使用Object将起作用
Sub TranslateDialog(pForm As Object, pFormName As String)