VBA for Excel 2002(XP)/ 2003で記述された古いアプリケーションを維持しており、それを国際化しようとしています。
これを行うには、翻訳された文字列を動的に読み取り、.Captionプロパティを更新することで、ユーザーフォームのさまざまなコントロールを更新します。
これはすべてのコントロールで期待どおりに機能しますが、フォーム自体では機能しません。フォームの.Captionプロパティを変更すると、タイトルバーに「ハードコードされた」値が表示され続け、代わりに新しい値がそのすぐ下に表示されます。フォーム自体の「キャンバス」の上部。
表示された後にユーザーフォームのタイトルバーテキストを変更することは可能ですか、またはフォームが表示される前に、フォームの.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 XPSP3でExcel2003を実行しています。