|
▼年寄り さん:
おはようございます。
>この場合スクロールバーの上端と下端はユーザーフォーム上のそれと同じになりますね。スクロールバーをユーザーフォーム上の中段にぶら下げて、上下に固定の位置を確保する方法はありますか?そこに他のコントロールを置きたい。
この文章、何回か読み直したのですが、はっきりと年寄り さんがなさりたい
事が私には把握できませんでした。
が、感です・・・。
おそらくは、シート上でいうウインドウ枠の固定のような事を
したいという解釈です。
だとすれば・・・、
方法として二つほどご紹介します。
準備としては、新規ブックに
ユーザーフォームを
二つ準備してください。
(Userform1とUserform2)
ユーザーフォームのみでコントロールは何も配置しないでください。
ユーザーフォームの大きさやコントロールは、コードで配置します。
方法1
フレームを使用する方法
Userfrom1のモジュールに
'===============================================================
Private Sub UserForm_Initialize()
Dim frm As MSForms.Frame
Dim idx As Long
With Me
.Height = 300
.Width = 420
End With
Set frm = Controls.Add("Forms.Frame.1")
With frm
.Top = 75
.Height = 200
.Width = 400
.Left = 5
.Caption = "フレーム"
.ScrollBars = 2
.ScrollHeight = 1000
.SpecialEffect = fmSpecialEffectSunken
For idx = 1 To 20
With .Controls.Add("Forms.TextBox.1")
.Top = (idx - 1) * 50 + 20
.Left = 30
End With
Next
End With
End Sub
標準モジュールには
'======================================================
sub disp1()
userform1.show
end sub
これでdisp1を実行してみてください。
この表示イメージがなさりたいことだと思いますが・・・。
要は、フレームオブジェクトにコントロールを貼り付ける方法です。
フレームもユーザーフォームと同じように
>で、年寄り さんのおっしゃる「大きな値」は、Scrollheightというプロパティに設定
>します。
>尚、近い場所に「Scrollbarsvisible」と「Scrollbars」というプロパティがあります
>から、これを「2」(Fmscrollbarsvertical)に設定して下さい。
という設定が出来ます。
本当は、このフレームにバグがなければ、これで良いのですが・・。
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips03.htm
これを見てください。
フレームには、バグがあるのでフレームにテキストボックスの配置は
お勧めできません。
(オプションボタン等でしたら、これでもOKだと思いますが・・)。
方法2
マルチページを使用する。
userform2のモジュールに
'====================================================================
Private Sub UserForm_Initialize()
Dim p As Page
Dim sz As Double
Dim wk As String
Dim idx As Long
With Me
.Height = 300
.Width = 420
End With
With Controls.Add("Forms.MultiPage.1")
.Top = 75
.Left = 5
.Height = 200
.Width = (9.75 * 40 + 12) + 0.75
.Pages.Remove 1
With .Font
.Name = "MS ゴシック"
.Size = 10
sz = Int(.Size / 0.75) * 0.75
End With
Set p = .Pages(0)
p.Caption = String(Int((Int(.Width / 0.75) * 0.75 - 12.75) / sz), " ")
wk = p.Caption
Mid(wk, 1, 9) = "マルチページ使用例"
p.Caption = wk
p.ScrollBars = 2
p.ScrollHeight = 1000
For idx = 1 To 20
With p.Controls.Add("Forms.TextBox.1")
.Top = (idx - 1) * 50 + 20
.Left = 30
End With
Next
End With
End Sub
'標準モジュールには
'======================================================
sub disp2()
userform2.show
end sub
これでdisp2を実行してみてください。
本来、マルチページは複数ページを要して、同じエリアに異なるコントロールを
配置するものですが、上記のコードでは、ページをひとつにしています。
つまり、フレームの代わりにマルチページを使用する方法です。
マルチページもスクロール処理が可能です。
>ページタブもCaptionプロパティに空白を詰めて形を整えました。
>これだとテキストボックスでも使用できると思いますが・・・。
二つともコードでの設定ですが、
これは説明の都合上という意味で
VBEによる事前設定はもちろん可能です。
と思っていましたが、
(というのも先日、マルチページにテキストボックスを配置したコードで
Enterイベントを使用して問題なく作動していたので そう思い違いをしていました)
マルチページでも似たようなバグが発生します。
角田さんの
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips03.htm
にもちゃんと書いてありました。
結構、ショック・・・。
う〜、マルチページで代役が務まると思っていたので・・・。
ということで、
年寄り さんがなさりたい事が上記の二つ方法であった場合でも
Exitイベントを使う場合は いずれも要注意です。
|
|