3

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を実行しています。

4

1 に答える 1

1

あなたfrmFooは実際にはベースと同じタイプUserFormではなく、VBAの奇妙なOO実装で内部的に「降順」であるため、パラメータタイプとして確実に使用することはできず、代わりにObjectを使用すると機能します。

Sub TranslateDialog(pForm As Object, pFormName As String)
于 2010-06-04T10:21:46.283 に答える