Excel VBA質問箱 IV

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

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


51038 / 76732 ←次へ | 前へ→

【30570】Re:大きなサイズのフォーム 再送
発言  ichinose  - 05/10/31(月) 7:37 -

引用なし
パスワード
   ▼年寄り さん:
おはようございます。

>この場合スクロールバーの上端と下端はユーザーフォーム上のそれと同じになりますね。スクロールバーをユーザーフォーム上の中段にぶら下げて、上下に固定の位置を確保する方法はありますか?そこに他のコントロールを置きたい。
この文章、何回か読み直したのですが、はっきりと年寄り さんがなさりたい
事が私には把握できませんでした。

が、感です・・・。

おそらくは、シート上でいうウインドウ枠の固定のような事を
したいという解釈です。


だとすれば・・・、

方法として二つほどご紹介します。

準備としては、新規ブックに
ユーザーフォームを
二つ準備してください。
(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イベントを使う場合は いずれも要注意です。

1 hits

【13756】コントロール 年寄り 04/5/12(水) 19:58 質問
【13758】Re:コントロール ichinose 04/5/12(水) 22:01 回答
【13769】大きなサイズのフォーム 年寄り 04/5/13(木) 3:45 質問
【13771】Re:大きなサイズのフォーム ichinose 04/5/13(木) 8:15 発言
【13772】Re:大きなサイズのフォーム 年寄り 04/5/13(木) 8:57 お礼
【30550】Re:大きなサイズのフォーム 年寄り 05/10/30(日) 17:10 質問
【30570】Re:大きなサイズのフォーム 再送 ichinose 05/10/31(月) 7:37 発言
【30592】Re:大きなサイズのフォーム 再送 年寄り 05/10/31(月) 16:05 発言
【30605】Re:大きなサイズのフォーム 再送 年寄り 05/10/31(月) 19:47 発言
【30607】Re:大きなサイズのフォーム 再送 年寄り 05/10/31(月) 21:06 質問
【30608】Re:大きなサイズのフォーム 再送 ichinose 05/10/31(月) 21:42 発言
【30618】Re:大きなサイズのフォーム 再送 年寄り 05/11/1(火) 7:17 お礼
【30621】Re:大きなサイズのフォーム 再送 年寄り 05/11/1(火) 11:25 質問
【30622】Re:大きなサイズのフォーム 再送 ichinose 05/11/1(火) 12:16 発言
【30643】Re:大きなサイズのフォーム 再送 年寄り 05/11/1(火) 19:11 質問
【30645】Re:大きなサイズのフォーム 再送 ichinose 05/11/1(火) 20:16 発言
【30651】Re:大きなサイズのフォーム 再送 年寄り 05/11/1(火) 20:48 発言
【30658】Re:大きなサイズのフォーム 再送 ichinose 05/11/1(火) 22:41 発言
【31049】Re:大きなサイズのフォーム 再送 年寄り 05/11/10(木) 6:20 質問
【31050】Re:大きなサイズのフォーム 再送 ichinose 05/11/10(木) 7:53 発言
【31066】Re:大きなサイズのフォーム 再送 ichinose 05/11/11(金) 8:33 発言
【31111】Re:大きなサイズのフォーム 再送 年寄り 05/11/11(金) 17:16 発言
【31170】Re:大きなサイズのフォーム 訂正 ichinose 05/11/14(月) 8:12 発言
【31172】Re:大きなサイズのフォーム 訂正 年寄り 05/11/14(月) 8:47 発言

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