- 締切済み
テキストボックスがセルと連動したりしなかったりする
質問票をExcel VBAで作成、各設問に対する回答はラジオボタン(YES/NO/NA)で選択、NOの場合だけテキストボックスを表示仕組みなのですが、テキストボックスがセルときちんと連動しない時があって困ってます。 詳しく言うと、各設問に対する回答をラジオボタン(YES/NO/NA)で選んでもらい、NOの場合だけ、その理由をテキストボックスに書いてもらう仕組みで、YesまたはNAが選ばれた場合には(フォームをすっきり見せたいため)、テキストボックスを隠します。 ただそのテキストボックス(やラジオボタン)がきちんとセルと連動してくれないときがあります。(きちんと動いた場合のスクリーンショットを添付したのでご確認ください。)微妙に上下にずれてしまいレイアウトが崩れるときがあって困っています。いつ動いているのか、どういうときに動いてしまうのか等のパターンが全然分かりません。 <ロジック> Yes/No/NAのラジオボタンのデフォルトはNoで、すべての設問に対しテキストボックスは表示しておきます。テキストボックスは9行にわたって配置していて、YesまたはNAのクリックイベントによって、その9行の非表示、およびテキストボックスを非表示設定をコントロールしています。 正常に動いているケースのスクリーンショットを添付しましたので、ご確認お願いします。 また、すべてのテキストボックスおよび(”種類”の)ラジオボタンの Placement プロパティは、2(Move but don't size with cells)に設定しています。 この質問票使用時にはパスワードでシート保護もしています。(保護対象外はロック/アンロックされたセルと行) 開発環境:Excel2010 (Version: 14.0.6023.1000(64-bit)) ファイル保存形式:Excel 97-2003 Workbook (*.xls) <ソース> 表示する場合(Noが選択)の関数が下記です。非表示の場合も同様のつくりです。 ラジオボタンのクリックイベント内から下記Subプロシージャが呼ばれます。 Private Sub Set_Visible(ByVal j As Integer, ByVal k As Integer, ByVal m As Integer) i_RowNumber = (ここでパラーメータの変数を使って値をセット) ActiveSheet.Rows(i_RowNumber & ":" & i_RowNumber + 9).Hidden = False For i = 1 To 3 ActiveSheet.OLEObjects("TextBox" & j & "_" & i).Visible = True Next i For i = 4 To 7 ActiveSheet.OLEObjects("RadioBtn" & j & "_" & i).Visible = True Next i End Sub ※各テキストボックス、ラジオボタンの名前が TextBox1_1やRadioBtn1_4等としているため、For文でまわしてます。 基本的にこのコードで正しく動作しています。ただ、何かの加減でテキストボックスやラジオボタンが予期せぬところに表示されるので、コードの問題というよりは何か不安定要素が絡んでいるのではないかと思ってます。 左右に動く症状は見かけておらず、上下に少し動いて、(添付ファイルを参照ください)”理由1”や”関連リンク”といったテキストボックスのすぐ上に配置した文字を隠してしまったりします。 この症状はわたしのPCだけでなく、他の人のPCで動作確認しても、起きたり起きなかったりします。 この不安定な動作の修正方法が見つからず、ここ二週間ほど困っています。もしどなたか、修正案、もしくは、このロジックを見てもっとシンプルな代替案があれば、是非教えていただけると助かります。 ※質問するのは初めてなので不備がありましたら遠慮なくご指摘いただけると助かります!
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DreamyCat
- ベストアンサー率56% (295/524)
テキストボックスのサイズが変わるのは Autosize プロパティがtrueになっているからでしょう。 位置がずれるのは(*大きくずれるのだとすれば) コントロールの書式設定 → プロパティ → ・・・・移動しない。 にチェックが入っているか確認してください。 少しのずれは表示倍率を変更するのが原因かもしれません。 (縮小した時に少しずれるのだったような気がします。)
- n-jun
- ベストアンサー率33% (959/2873)
Excelなのはパソコンのスペックなのか 描画が上手くいかないとかではないのかな? 図形を駆使して資料を作った時にも変なところに移動してしまい、 修正が大変だった事はありますね。 ユーザーフォームを用いた方が安定するかもしれませんよ。
お礼
御礼が遅くなり申し訳ありません。(回答を受け取るとNotificationを受け取れるものと勘違いしていました…) おっしゃるとおり、わたしもスペックの問題が大きいと思ってます。 今回、90個近くのテキストフィールドが1シートに載っているので、設計ミスかな、と感じてます。 ユーザフォームの方が安定するとは知らなかったので、今後の参考になりました!どうもありがとうございます。
補足
ご回答ご協力ありがとうございます。返信が遅くなり申し訳ありません。(回答を受け取るとNotificationを受け取れるものと勘違いしていました…) Autosizeプロパティはfalseに設定しています。 また、(すみません…英語エクセルなので日本語のプロパティ名が分かりかねますが)Placement プロパティは、2(Move but don't size with cells)に設定していました。 これを動かない設定にしてしまうと、テキストボックスを非表示にした際、表示がおかしなことになってしまうので。 そして恐らくプロパティ等の設定の問題ではないとにらんでます。というのは、問題なく動くときもあれば動かないときもあるので、静的要因ではないと思うのです・・。 あと表示倍率によるズレは認識できてます。そこは本件にはからんでなさそうです。 いずれにしても、ご回答ありがとうございます!