Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VBA中更改用户窗体的标题栏文本?_Vba_Excel_Caption_Userform - Fatal编程技术网

如何在VBA中更改用户窗体的标题栏文本?

如何在VBA中更改用户窗体的标题栏文本?,vba,excel,caption,userform,Vba,Excel,Caption,Userform,我正在维护一个用VBA for Excel2002(XP)/2003编写的旧ish应用程序,并试图将其国际化 为此,我动态地读入翻译后的字符串,并通过更新它们的.Caption属性来更新userform上的各种控件 这对所有控件都有效,但对表单本身无效——当我更改表单的.Caption属性时,标题栏将继续显示“硬编码”值,而新值将显示在它的正下方,即表单本身的“画布”顶部 是否可以在显示UserForm后更改其标题栏文本,或者在显示前必须更改窗体的.Caption属性,以便将其反映在标题栏中而不

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