システムwiki

チェックボックスを使用してテキストボックスを非表示/再表示するにはどうすればよいですか?

Christo 解決済 最終更新日:2022-06-20 00:55

チェックボックスをテキストボックスに接続して、チェックボックスを選択するとテキストボックスが表示されるようにする方法が必要です.それ以外の場合は、テキストボックスを非表示にする必要があります.これは可能ですか?よろしくお願いします!

返信リスト(回答:11)

1 #
JayFree 6

チェックボックスの状態に基づいてタブとテキストコンテンツコントロールを表示/非表示にするだけで満足できる場合は、ビルディングブロックはまったく必要ありません.これにより、ビルディングブロックの挿入と削除に伴う問題がなくなります.

2番目のスクリーンショットに示されている配置を設定します.テキストコンテンツコントロールを選択し、その前後にブックマークを挿入します.その前にタブ文字は含まれません.ブックマークにbkSidejobsという名前を付けたとします.テキストコンテンツコントロールとその
ブックマークが選択されたら、[フォント]ダイアログに移動して[非表示の書式設定]をオンにします.

次に、チェックボックスのコンテンツコントロールをクリックし、[開発者]タブの[プロパティ]ボタンをクリックして、[タグ]ボックスに名前を入力します. それをckSidejobsと呼びましょう.(実際には、チェックボックスとブックマークに同じ名前を使用できますが、使用することをお勧めします
コードの混乱を避けるためのさまざまなプレフィックス.)

最後に、私があなたのために概説したステップを使用して how-can-i-insert-a-building-block-using-a-check.... 、次のコンテンツを使用してContentControlOnExitイベントハンドラーを作成します.

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl、Cancel As Boolean)
ContentControl.Tag= "ckSidejobs" Then
ActiveDocument.Bookmarks( "bkSidejobs").Range.Font.Hidden= _
ContentControl.Checkedではありません
Ifを終了
サブの終了

これは、「終了したばかりのコンテンツコントロールがタグ値ckSidejobsのコンテンツコントロールである場合、チェックボックスがオンになっている場合はbkSidejobsという名前のブックマークの範囲を表示(=非表示にしない)にし、チェックボックスがチェックされていない場合
終了したばかりのコンテンツコントロールは、タグ値がckSidejobsのコンテンツコントロールではないため、何もしません.」

2 #
JayFree 6

すばらしい!

同じ設定で「いくつかの場所」があると言っているので、それらがすべて同じドキュメントに含まれる場合は、さらにいくつかのことを知る必要があります.

まず、ドキュメント内の各チェックボックスコンテンツコントロールに異なるタグ値を指定して、マクロがイベントをトリガーしたものを識別できるようにする必要があります.また、テキストコンテンツコントロールを囲む各ブックマークには、異なるブックマーク名を付ける必要があります.[注:一言
ドキュメントに同じ名前のブックマークを2つ以上含めることはできません.既存の名前で別のブックマークを追加しようとすると、既存のブックマークは自動的に削除されます.ただし、コンテンツコントロールのタグとタイトルの値は同じように動作しないため、
あなたがそれらに与える値がユニークであることを確認するのはあなた次第です.]

次に、ドキュメント(またはそのテンプレート)には、ContentControlOnExitという名前のイベントハンドラーを1つだけ含めることができます.これは、カーソルがコンテンツコントロールを終了するときに呼び出されます.複数のチェックボックスを処理するようにコーディングする方法は、可能なそれぞれについてタグ(またはタイトル)をテストすることです.
使用する必要のある値.これを行うにはいくつかの方法があります:

  1. 値ごとに個別のIf...Then...EndIf構造体を記述できます.ハンドラーが実行されるたびに、If条件の1つだけが真になるため、その1つだけが実行されます.
  2. If...Then...ElseIf...Then...ElseIf...Then...etc....EndIfを使用して単一の構造を記述できます.これは、複数のIf構造とまったく同じように機能しますが、行が少なくなります.
  3. 3つを超える可能性のある値の場合、最初の2つの方法は面倒になります.代わりに、Select Case構造を使用できます.これは、その中のCaseグループの1つだけを実行します.

CaseContentControl.Tagを選択します

ケース「ckSidejobs」

ActiveDocument.Bookmarks( "bkSidejobs").Range.Font.Hidden= _

ContentControl.Checkedではありません

ケース「ckOtherCondition1」

ActiveDocument.Bookmarks( "bkOtherCondition1").Range.Font.Hidden= _

ContentControl.Checkedではありません

ケース「ckOtherCondition2」

ActiveDocument.Bookmarks( "bkOtherCondition2").Range.Font.Hidden= _

ContentControl.Checkedではありません

'多分もっと多くの場合

場合

'何もしない

選択の終了

10 #
DougRob 2

どのタイプのテキストボックスを使用していますか?ユーザーフォームにあるのか、ドキュメントのActiveXテキストボックスにあるのか、レガシーFormFieldテキストボックスにあるのか、それともコンテンツコントロールにあるのか.

応答10# ->にスキップ
8 #
Christo

申し訳ありませんが、返信に時間がかかりました.チェックボックスとテキストボックスの両方が挿入されます 実際のドキュメントで.タイプに関しては、私は違いが何であるかについてほとんど何も知らないので、どちらが最も実用的であるか.喜んでいただきありがとうございます
私を助けるために!

応答8# ->にスキップ
9 #
DougRob 1

あなたが挿入した文書のコピーを私に送った場合 チェックボックスとテキストボックス、カバーする電子メールメッセージでこのスレッドを参照します.
それを見て、続行する方法を教えてください.

応答9# ->にスキップ
7 #
Christo

ありがとう!私は実際に挿入していません どちらかまだ(解決策を見つけるための実験を除く).これを機能させる任意のタイプのチェックボックスとテキストボックスを使用できます.

応答7# ->にスキップ
6 #
DougRob

次の投稿に応じて、JayFreedmanが提供する方法と同様の方法を使用できます.

how-can-i-insert-a-building-block-using-a-check....

応答6# ->にスキップ
4 #
Christo

さらに調査した結果、プレースホルダーを挿入する方法を知って、プレースホルダーを削除せずにビルディングブロックを追加/削除できるようにする必要があるようです.これは可能ですか?ブックマークを使おうとすると、一度テキストを削除する方法が見つかりません
挿入されます.

たとえば、「はい」というテキストを挿入すると、2回目に「はいはい」などと表示されます.何かアイデアはありますか?

応答4# ->にスキップ
3 #
JayFree 1

ブックマークを使用することもできますが、少しトリックが必要です.

ブックマークは、1つ以上の文字(スペース文字だけでも)にまたがったり、一点で折りたたんだりすることができます.これは、[ファイル]>[オプション]>[詳細]に移動し、[ドキュメントコンテンツを表示する]まで下にスクロールして、[ブックマークを表示する]チェックボックスをオンにすると明らかになります.
すると、ブックマークは次のいずれかのようになります.

マクロが折りたたまれたブックマークにテキストを挿入すると、テキストが挿入されます ブックマークの横にあり、次の挿入はその横にあります.拡張ブックマークにテキストを挿入すると、そのブックマークが削除され、次の挿入が行われます.
「コレクションの要求されたメンバーが存在しません」というエラーで失敗します.

解決策は、ブックマークの範囲を操作してテキストを挿入し、結果の範囲にブックマークを再度追加することです.詳細はにあります https://Wordmvp.com/FAQs/MacrosVBA/InsertingTextAtBookmark.htm .
ただし、このメソッドは.BuildingBlockEntries(index).Insertコマンドでは機能しません.これは、この挿入では、ビルディングブロックを囲む範囲が拡大されないためです.テキストのみのビルディングブロックの場合、範囲の.Textをビルディングブロックの.Valueと等しく設定できます.
プロパティ(ただし、255文字より長いものは切り捨てられます).

応答4# ->にスキップ
5 #
DougRob

何を挿入したいか正確にはわかりませんが、1つのオプションは、テキストを表示するDOCVARIABLEフィールドを挿入し、チェックボックスのコードで変数の値をテキストまたは「」に設定することです.フィールドを更新します
結果が表示されるようにします.

11 #
Christo

お返事ありがとうございます!チェックボックスを挿入する方法ではなく、チェックボックスを使用して別のテキストボックスコントロールを非表示/再表示する方法を考えていました.