ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュのフォーム上のテキストボックスのスクロールバー

  • mixiチェック
  • このエントリーをはてなブックマークに追加
色々と調べてみたのですが、お手上げ状態になってしまいました。
わかる方がいたら教えてくださいませ。

フォーム上にテキストボックス(A)があります。
(A)は、複数行表示可能(マルチライン=True)で、垂直スクロールバーが表示されるようにしています。

但し、(A)に入力可能なのは35文字×60行以内と決まっています。

(A)の左横に、この(A)内での行番号を表示するラベルかテキストボックス(B)を設置し、
(A)のスクロールバークリック時には対応して、(B)で表示する行番号を変えたいのです。

調べてみたのですが、スクロールバーコントロールであれば、イベントを取得できますが、
テキストボックスで表示されるスクロールバーの場合、イベントを取得できないようでした。
(私の調査不足で、実はできるのかもしれません。もしできるのであれば、ご教示くださいませ。)

というわけで、以下2パターンで考えてみたのですが、どちらも壁にぶちあたりました。

1)テキストボックス(A)でのMouseMoveイベント等で、スクロールバーの位置の場合に処理を行う。
→テキストボックス内のスクロールバーのMAX値や位置把握ができません。

2)新たにスクロールバーコントロール(C)を作成し、そのイベントで処理を行う。
→行番号表示ラベル(B)を対応させる事はなんとかできたのですが、
肝心の入力用テキストボックス(A)との連係がとれません。

他の方法でもかまいませんので、何か対応策がわかる方がいたら教えてください。
よろしくお願いします。



コメント(20)

力になりたいのですが、ユーザフォームについてはそこまで詳しくないんですよね。

もしよろしければサンプルファイルをどこかにアップしてもらえます?

解析&デバッグなら出来るかもしれないんで。
>>2
それでも、サンプルコードってありますよね?

たとえば、>>0で作ったものでもいいんですよ。
とりあえず、ソレらしいものがあれば、少しずつ読み解くことが出来るはずなんで!
ファイルバンクやaxfcいろいろありますよ!!

今は携帯からなんで、詳しくは書けないですけどファイルバンクにマイプレースとしてゲストフォルダを持ってます。
そこにアップしてもらえたらイイカナァと思います。
割り込み失礼。
lineCountプロパティじゃダメですかね?

Private Sub TextBox1_Change()
Label1.Caption = Str(TextBox1.LineCount)
End Sub
ええと……これでこと足りるかは分かりませんが。。

フレームコントロールを用意して、その中に大きさを35x60に固定(横はフォントとフォントサイズを考慮して、35文字表示できるサイズに調整)したテキストボックスと1~60のラベルを貼ってしまい、フレームコントロールのスクロールバーで上下を表示させるようにしてみては……?

で、中のテキストボックスにだけ、35x60を超えて入力できないように仕掛けをしておく。

こうすれば、スクロールバー自体でイベントを拾わなくても実現できる気がするのですが……。
おっとなにやら解決できそうな予感でしょうか?

とりあえず、FileBandkのUp先です。

URL:http://www.filebank.co.jp/guest

ゲスト設定場所:ディスクプラン
ファイルバンクID:crisis1003
フォルダ名:vba
パスワード:vbavba

です。
横から失礼します。
以下のような感じではどうでしょう?
テスト環境で
フォーム上にテキストボックス(マルチライン、6行表示)、ラベル、スクロールバーを置きます。
コードはこんな感じ


Dim selScl As Long '前回のスクロールバー数値
Private Sub UserForm_Initialize()
Me.ScrollBar1.Min = 1
Me.ScrollBar1.Visible = False
End Sub

Private Sub ScrollBar1_Change()
With Me.TextBox1
If selScl > Me.ScrollBar1.Value Then
.SetFocus
.CurLine = Me.ScrollBar1.Value - 1
ElseIf Me.ScrollBar1.Value > 1 Then
If .SelStart <> .TextLength Then
.SetFocus
.CurLine = Me.ScrollBar1.Value + 6 - 2
End If
End If
End With
selScl = Me.ScrollBar1.Value
Me.Label1.Caption = Me.ScrollBar1.Value
End Sub

Private Sub TextBox1_Change()
With Me.TextBox1
If .LineCount > 6 Then
Me.ScrollBar1.Max = .LineCount - 6 + 1
Me.ScrollBar1.Visible = True
Me.ScrollBar1.Value = .LineCount - 6 + 1
End If
End With
End Sub
大事な部分の説明をはしょっていましたね、申し訳ありません(^^;)

うまくいくといいですね!
>放置されかけていたトピを救い上げてくださった魔流さん・・
本当に持ち上げただけで何にも出来なかったですけどね〜〜ww

>ひょっとしたら、これは使わない事になるかもしれませんが、いい勉強になりました。
よくあることです。
こういったコードを自分で作り上げた!ってのが重要ですからww
他人に教えてもらっても、噛砕ければソレはもう自分のもの!!

もし、今回起用されなくとも、次回VBAで困ったことがある場合は、ボニさんに話が振られるようになると思いますよww

おつかれさまです〜〜☆

ログインすると、残り11件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。