4

VBA の昔は、フォーム上のコントロールに名前で直接アクセスできました。VBA 2010でこれを行う方法に少し当惑しています(または、それが可能になったとしても)。

「channelList」というドロップダウン リストを持つリボン コントロールがあり、リボンの別の場所に「labelText」というテキスト ボックスがあるとします。これらの各項目には固有のコールバック関数があります。labelText に何かを入力すると、そのコールバックが起動し、channelList リストボックスから項目を選択すると、そのコールバックが引数として渡されたリスト項目で起動します。

私が困っているのは、channelList コールバック内から labelText テキストボックスの内容を「何か」で更新する方法です。

リストボックス コールバック内からテキスト ボックス コントロールに直接アクセスする方法はありますか、または何らかのイベントを生成する必要がありますか? コントロールのテキスト値を設定するには、どのメソッドまたは関数を使用しますか? (IRibbonControl オブジェクトを何かにキャストする必要がありますか?)

4

2 に答える 2

4

解決策は、回答とコメントの組み合わせだったので、次のようになります。

  • 「labelText」編集ボックスに固有の「getText」コールバック サブルーチン名をリボン XML に追加します。
    editBox id="labelText" label="テキスト:" sizeString="xxxxxxxxxx"
    onChange="TextboxCallback" getText="UpdateTextBoxText"
    screentip="チャンネル ラベル"
    supertip="10 文字までです。入力が終わったら Enter キーを押してください。"
  • コンボ ボックスのコールバック関数で、目的の編集ボックス テキストをグローバルに設定し、"labelText" を引数として Ribbon.InvalidateControl を呼び出します。
    MyRibbon.InvalidateControl "labelText"
  • editbox コールバックを実装し、ハンドルをリボンに渡し、別の変数 ByRef を渡して、更新する「内容」を格納します。グローバルを使用して、ByRef 引数を介してコントロールのテキストを更新します。
    Sub UpdateTextBoxText(control As IRibbonControl, ByRef returnedVal)
    ケースを選択 (control.id)       
        ケース「ラベルテキスト」
            returnedVal = ラベルテキスト
    エンドセレクト
    サブ終了

これが「進歩」だと思います。labelText.Value = "何とか" は単純すぎます。

于 2013-08-02T21:03:45.083 に答える
2

Ribbon.Invalidateメソッドを見てみましょう。リボンを「無効化」すると、基本的にリセットされ、その瞬間に追跡できるものに基づいて、リボンのコントロールのプロパティを設定できます。そのためには、VBA に 、 などのサブルーチンControl.GetEnabledが必要です。GetVisible

を使用して個々のコントロールを無効にすることもできますRibbon.InvalidateControl

役立つリンクは次のとおりです。http://sourcedaddy.com/ms-excel/resetting-controls.html

于 2013-08-01T22:08:06.693 に答える