フォームにtxt1、txt2、txt3というテキストボックスを作成し、txt1に「1」、txt2に「1000」と入力したところ、パーセント表示したいtxt3に「#########」と表示されてしまいました。
本来100000.00%と表示されるところが、テキストボックスの幅が狭すぎてこのようになっているものと思われます。
その為、「#########」と表示されてしまうのを抑止したいと思うのですが、良い方法(表示可能桁数のみ表示するなど)をご存知の方がいらっしゃいましたらご教示のほど、よろしくお願いします。
なお、下記の制限事項があります。
1. テキストボックスの横幅を広げる事はできません。
2. フォーム内に本件のような計算項目が多数あるため、1つのテキストボックスあたりの修正量が少ないと助かります。
【プロパティ】
txt1・・・デフォルト
txt2・・・デフォルト
txt3・・・書式を「パーセント」、幅を「2cm」に変更
【ソース】
Private Sub txt2_AfterUpdate()
Me.txt3 = Me.txt2 / Me.txt1
End Sub
以上、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
#1 再回答です
IDを拝見し、プログラミング知識がお有りなご様子ですので、概略で説明します。
プログラム側の負荷(=手間)を避けるなら、利用者へツケをまわす・・・です。
通常は計算&表示を、各テキストボックスのイベントで行い(=現行のまま)、
###表示が出た場合用の「再表示ボタン」をフォーム上へ設置。
ボタンのクリック時イベントにて、計算結果が表示されるテキストボックス内の値を判断し、表示サイズを変更する。
勿論、このボタンのイベント内では、計算結果を表示するボックス「全て」を対象とした判断とサイズ変更を行います。
当然、計算結果がまだ入っていない物については、判断はするが処理は行わないものとします。
こうすることで、PG側では一箇所に(全てのボックスへの)処理記述を行える上、ユーザーは「例外時のみ」ボタンを利用するだけで済みます。
御質問の説明には、フォーム上のデータがクリアされるタイミングが明記されておりませんので概要説明は曖昧になりますが、いち画面上でのデータ処理が完了するタイミング(≒イベント)にて、フォーム上のボックスのプロパティー変更をデフォルトへ戻せば、次処理時は通常サイズでの表示で利用できます。
最後に、
丁寧に返信を頂きましたが、当初の御質問では「存在しない隠れた条件」を、後から持ち出すというのは、質問をする(他人へ依頼をする)側として、いかがなものでしょうか?
PG経験がお有りなら御理解できると思いますが、「条件ありきでロジックを考える」のが普通の順番です。
この再回答すらも、隠れた条件で否定(とまでは行かないけど)される=善意の回答側へ無駄な手間をかけさせる(≒一種のツリ行為と同じ)・・・様な気がしていますが、回答を寄せる側の一ユーザーとして、他の回答者さん達が同様の経験をしなくても済むような配慮をして頂きたいと思います。
ご回答ありがとうございます。
いただいたご意見は検討させていただこうと思います。
今の所、#が表示されたからといって
「再表示ボタン」を押してもらえるかわからない為、
「登録」ボタン押下時のチェックルーチンに組み込む(エラー表示)方向で
検討したいと思います。
なお、登録時に画面は初期化(クリア)されます。
後、条件が漏れており、申し訳ございませんでした。
以後気をつけます。
以上、よろしくお願いします。
No.4
- 回答日時:
#2です。
仮にtxt2と同じTBが50個とかあると修正が面倒ですね。
方法として2つ挙げさせていただきます。
まずtxt1、txt2、txt3がtxt1-1からtxt1-50、txt2-1からtxt2-50、txt3-1からtxt3-50まであると仮定して。
□方法1
「再表示ボタン」を配置しtxt3-1~txt3-50に対し#2で挙げた文字数判断によるフォントサイズ変更をする。
この方法であればコマンドボタン1つの追加とコード記入の手間だけです。
□方法2
txt2-1~txt2-50の中でタブストップ最終に方法1で挙げたコードを実行させる。
この方法であれば1つの既存テキストボックスの修正だけで良い訳ですがタブストップを無視して入力を行った場合は再表示が実行されないデメリットがあります。
用途に合わせご検討ください。
ご回答ありがとうございます。
方法2は入力項目はすべて必須というわけではない為、
方法1に近いやり方で検討してみたいと思います。
具体的には今の所、#が表示されたからといって
「再表示ボタン」を押してもらえるかわからない為、
既存の「登録」ボタン押下時のチェックルーチンに組み込む(エラー表示)方向で
検討したいと思います。
以上、よろしくお願いします。
No.2
- 回答日時:
こんにちは。
Me.txt3の文字数で判断を掛けフォントサイズを変更する方法はいかがでしょうか?
現在のフォントサイズがいくつなのか分かりませんが
例えば
Private Sub txt2_AfterUpdate()
Me.txt3 = Me.txt2 / Me.txt1
If Len(Me.txt3) >= 4 Then
Me.txt3.FontSize = 6
End If
End Sub
と言った感じです。
ご回答ありがとうございます。
いただいたご意見は検討させていただこうと思いますが、
この方法ですと、すべての計算項目で同様の修正が必要になり、
制限事項2に引っかかりそうな感じがします。
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) Excelのマクロについて 2 2022/06/14 03:38
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- その他(Microsoft Office) エクセルのマクロを教えてください。 1 2023/01/27 09:05
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、MsgBox やInput...
-
「PC Helpsoft Driver Updated...
-
解像度を800×600にしたいのです...
-
スマホF-51Bに緊急時情報画面で...
-
エクセル関数について
-
Outlookの予定表で色をつけるこ...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
メルカリのメルカードで買い物...
-
CloseとDisposeの違い
-
Excelシート上のマクロを登録し...
-
VBAでループ内で使う変数名を可...
-
アクセスVBAのMe!と[ ]
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
DoEventsがやはり分からない
-
VBA SaveChanges 上書きされない
-
VBの質問#if 0 then ってどう...
-
Googleフォーム・複数人の申し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、MsgBox やInput...
-
「PC Helpsoft Driver Updated...
-
スマホF-51Bに緊急時情報画面で...
-
プロジェクターで投影した場合...
-
イベントビューアのWindowsログ...
-
コマンドプロンプト(cmd)でのtr...
-
Outlookの予定表で色をつけるこ...
-
NHKBSデジタル放送で表示される
-
Windows7 起動時のユーザ名表...
-
質問が締切になったら、 自動的...
-
解像度を800×600にしたいのです...
-
Delphi:タブページについて
-
アドレス帳のアイウエオ順表示...
-
ff13の視点が悪すぎてすぐに自...
-
エクセル関数について
-
EXCEL 100%積み上げ横棒グラフ...
-
Windows 8.1のプログラムのアン...
-
タイマーをつけたモードレスダ...
-
Android12でポタンを下に表示し...
-
急に画面が変わる現象の対処方...
おすすめ情報