2010-06-04 7 views
1

Je maintiens une ancienne application écrite en VBA pour Excel 2002 (XP)/2003, et j'essaie de l'internationaliser. Pour ce faire, je lis dynamiquement les chaînes traduites et met à jour les différents contrôles de mon userform en mettant à jour leur propriété .Caption.Comment changer le texte de la barre de titre d'un Userform en VBA?

Cela fonctionne comme prévu pour tous les contrôles, mais pas pour le formulaire lui-même - lorsque je change la propriété .Caption du formulaire, la barre de titre affiche la valeur "codée en dur" et la nouvelle valeur est affichée au-dessous, au sommet de la «toile» de la forme elle-même.

Est-il possible de modifier le texte de la barre de titre d'un objet UserForm après son affichage ou dois-je modifier la propriété .Caption du formulaire avant qu'il ne soit affiché pour qu'il soit reflété dans la barre de titre plutôt que dans la zone de canevas/client?

Mon code ressemble à ceci:

' 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 

Comme je l'ai dit, l'affectation à pForm.Caption a un effet - mais il n'écrit pas à la barre de titre de la fenêtre, mais directement en dessous . Je cours Excel 2003 sur Windows XP SP 3.

Répondre

1

Votre frmFoo n'est pas réellement le même type que la base UserForm, il est plutôt "descendu" intérieurement dedans dans l'implémentation de WI de WRI de VBA de sorte que vous ne pouvez pas l'utiliser de manière fiable. en tant que type de paramètre, utiliser Object à la place fonctionnera;

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

Excellent - merci pour votre aide! Cela a effectivement fonctionné. –

Questions connexes