Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2341 / 13646 ツリー ←次へ | 前へ→

【68621】テキストボックスの表示 亜矢 11/3/30(水) 15:29 質問[未読]
【68622】Re:テキストボックスの表示 momo 11/3/30(水) 15:58 発言[未読]
【68624】Re:テキストボックスの表示 UO3 11/3/30(水) 17:13 発言[未読]
【68625】Re:テキストボックスの表示 亜矢 11/3/30(水) 18:11 お礼[未読]
【68631】Re:テキストボックスの表示 UO3 11/3/31(木) 11:19 発言[未読]

【68621】テキストボックスの表示
質問  亜矢  - 11/3/30(水) 15:29 -

引用なし
パスワード
   いつもお世話になります。
ユーザーフォーム上のテキストボックスに色々な長さの文字数が入力され、
その長さを現在の最大文字数で設定しても将来的にさらに長い文字数が
ある可能性があり、その時にExcelのセルの書式設定の中にある、縮小して
全体を表示する様な方法をできればしたいと思います。
 どのような方法があるでしょうか。
 教えていただきたいと思います。

【68622】Re:テキストボックスの表示
発言  momo  - 11/3/30(水) 15:58 -

引用なし
パスワード
   ▼亜矢 さん:
あんまり見やすくは無いと思いますが・・・

たとえば、AutoSizeで元の幅と比較してフォントサイズを小さくしていくとか

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Const InitialFontSize As Double = 9 '初期フォントサイズ
Dim BufWidth     As Double
Dim BufHeight     As Double

With Me.TextBox1
 .Font.Size = InitialFontSize
 BufWidth = .Width
 BufHeight = .Height
 .AutoSize = True
 While .Width > BufWidth
  .Font.Size = .Font.Size - 0.2
 Wend
 .AutoSize = False
 .Width = BufWidth
 .Height = BufHeight
End With
End Sub

【68624】Re:テキストボックスの表示
発言  UO3  - 11/3/30(水) 17:13 -

引用なし
パスワード
   ▼亜矢 さん:

こんにちは

エキスパートの皆さんから、適切なお答えがあるかとは思いますが
知識がプアなUO3が思いつきで試してみたコードです。

ユーザーフォームにテキストボックスを1つ配置して表示して
文字を増やしたり減らしたりしてみてください。

Option Explicit

Dim svW As Single
Dim svH As Single
Dim svF As Single
Dim skip As Boolean

Private Sub UserForm_Initialize()
  skip = True
  With TextBox1
    svW = .Width
    svH = .Height
    svF = .Font.Size
    .Text = "ABCDEFGHI" 'テスト用
  End With
  skip = False
End Sub

Private Sub TextBox1_Change()
  Dim n As Single, w As Single, f As Single
  If skip Then Exit Sub
  With TextBox1
    f = .Font.Size
    .AutoSize = True
    w = .Width
    n = f * (svW / w)
    If n > svF Then n = svF
    .Font.Size = n
    .AutoSize = False
    .Width = svW
    .Height = svH
  End With
End Sub

【68625】Re:テキストボックスの表示
お礼  亜矢  - 11/3/30(水) 18:11 -

引用なし
パスワード
   ▼UO3 さん:
>▼亜矢 さん:
>
>こんにちは
>
>エキスパートの皆さんから、適切なお答えがあるかとは思いますが
>知識がプアなUO3が思いつきで試してみたコードです。
>
>ユーザーフォームにテキストボックスを1つ配置して表示して
>文字を増やしたり減らしたりしてみてください。
>
>Option Explicit
>
>Dim svW As Single
>Dim svH As Single
>Dim svF As Single
>Dim skip As Boolean
>
>Private Sub UserForm_Initialize()
>  skip = True
>  With TextBox1
>    svW = .Width
>    svH = .Height
>    svF = .Font.Size
>    .Text = "ABCDEFGHI" 'テスト用
>  End With
>  skip = False
>End Sub
>
>Private Sub TextBox1_Change()
>  Dim n As Single, w As Single, f As Single
>  If skip Then Exit Sub
>  With TextBox1
>    f = .Font.Size
>    .AutoSize = True
>    w = .Width
>    n = f * (svW / w)
>    If n > svF Then n = svF
>    .Font.Size = n
>    .AutoSize = False
>    .Width = svW
>    .Height = svH
>  End With
>End Sub
ありがとうございました。期待した結果がでました。

【68631】Re:テキストボックスの表示
発言  UO3  - 11/3/31(木) 11:19 -

引用なし
パスワード
   ▼亜矢 さん:

私のコードでご満足いただき(?)解決ということですので、もうごらんにはならないかも
しれませんが・・・

その後、コードを動かしていて不具合を発見。
私の【思いつき】の前提は、文字数が増えたときのサイズ自動調整は
・テキストボックスの幅を広げ
・フォントを小さくする
こんな順番で内部処理がされると想定。

一方、実際には
・フォントを小さくする
・次に必要なら幅を広げる
★でも、フォントを小さくした結果、【逆に幅がせまくなるケースもありうる】

この★のところを発見!
したがって、momoさんのコードを、必要なら ExitイベントをChangeイベントに
変更してお使いになられたほうが確実だと思います。

2341 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free