Pflege ich einen old-ish-Anwendung geschrieben in VBA für Excel 2002 (XP)/2003, und ich versuche zu internationalisieren.
Um dies zu tun, lese ich in der übersetzten strings dynamisch und aktualisieren Sie die verschiedenen Steuerelemente auf meinem userform, indem Sie die Aktualisierung Ihres .Caption-Eigenschaft.
Dies funktioniert wie erwartet für alle Steuerelemente, aber nicht für das Formular selbst -- wenn ich die form ändern .Caption-Eigenschaft, dann ist die Titelleiste hält die Anzeige der "hart-kodiert" der Wert und der neue Wert wird stattdessen angezeigt, nur unten, an der Spitze der "Leinwand" des Formulars selbst.
Ist es möglich, zu ändern ist der text der Titelleiste eines UserForm-Objekts, nachdem es sich gezeigt hat, ist oder muss ich das ändern .Caption-Eigenschaft der form ist, bevor es angezeigt wird, damit es sich in der Titelleiste anstatt im canvas - /client-Bereich?
Mein code sieht ungefähr so aus:
' 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
Wie gesagt, die Zuordnung zu pForm.Caption
eine Wirkung - muss es aber nicht schreiben, um die Titelleiste des Fensters, sondern direkt darunter. Ich bin mit Excel 2003 auf Windows XP SP 3.
InformationsquelleAutor Philip Newton | 2010-06-04
Ihre
frmFoo
ist nicht wirklich der gleiche Typ wie die BasisUserForm
, sondern es ist intern "stammte" aus, die es in VBA ist seltsam OO-Implementierung, so dass Sie nicht verwenden können, die zuverlässig als parameter geben Sie über das Objekt stattdessen wird Arbeit;InformationsquelleAutor Alex K.