[[20200709174627]] 『ユーザーフォーム内 次へ 後ろへボタン』(ひで) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォーム内 次へ 後ろへボタン』(ひで)

所見1シートの構造は以下のようになっています

    C    D    E    F    G    H

5   氏名   所見1  所見2  所見3  所見4  所見1〜4の結合
6   A    ・・・   ・・・   ・・・   ・・・   ・・・・・・・・
7   B    ・・・   ・・・   ・・・   ・・・   ・・・・・・・・
8   C

となっています。
今,ユーザーフォーム内テキストボックスで 
ーーーーーーーーーーーーーーーーーーーーーー
|   氏名 (テキストボックス)     |
|                     |
|   所見1(テキストボックス)      |
|   所見2(   〃    )      |
|   所見3(   〃    )      |
|   所見4(   〃    )      |
|                     |
|   結合された所見(   〃    ) |
|                     |
|                     |
|    次へ    後ろへ        |
ーーーーーーーーーーーーーーーーーーーーーー
となっています。

ここに[前へ]「後ろへ」のボタンをつけて

次へを1回押すごとに下の行のデータを取得するように,

また 後ろへを1回押すと上の行のデータへ移動し,

ユーザーフォーム内のデータを可変させたいのですが,

いろいろ調べてみたのですが,よくわかりません。

教えていただけるとありがたいです。

よろしくお願いします。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 いろいろどの辺を調べて、どの辺が良く解らなかったのでしょうか?
(Why) 2020/07/09(木) 18:03

今はどういうコードでフォームに値を代入しているか書いてもらわないと、どう直せば良いのかも判らないですよ?

考え方だけ書きますと、持ってくる行位置を共通変数(プロシジャ外に宣言)にセットしておいて、ボタンが押された場合はこれを足したり引いたりした後に、シートからデータを読み込み直せば良いだけでしょう。
(???) 2020/07/09(木) 18:05


ありがとうございます
次へ→前へ でした
前へボタンは
ActiveCell.Offset(-1, 0).Activate

後ろへは

ActiveCell.Offset(1, 0).Activate

としたのですが,これだけじゃだめなのですか?

(ひで) 2020/07/10(金) 07:16


それぞれのテキストボックスのコントロールソースにD5,E5,F5,・・って書いたのですが
これがだめなのでしょうか?

素人ですみません
(ひで) 2020/07/10(金) 07:19


まずテキストボックスに文字を入力するコードをつくることをはじめてください。
それがわかればきっとすぐに答えにたどり着くことができるでしょう。
(しょくぱん) 2020/07/10(金) 09:04

コード全部見せてくれないし…。

テキストボックスのControlSourceプロパティは、普通は使いません。 これを「D5」とすると、常に見出し行のセルに書かれた文字列「所見1」が表示されるだけで、変更できなくなります。 普通は、Textプロパティだけ使います。(何で難しいプロパティから見つけてしまうのやら…。何でもWeb検索できるようになったことの弊害ですねぇ)

 【UserForm1】
 Dim iMax As Long
 Dim iR As Long

 Private Sub CommandButton1_Click()
    If 6 < iR Then
        iR = iR - 1
        Call sDisp
    End If
 End Sub

 Private Sub CommandButton2_Click()
    If iR < iMax Then
        iR = iR + 1
        Call sDisp
    End If
 End Sub

 Private Sub UserForm_Initialize()
    iR = 6
    With ActiveSheet
        iMax = .Cells(.Rows.Count, "C").End(xlUp).Row
    End With
    Call sDisp
 End Sub

 Sub sDisp()
    With ActiveSheet
        TextBox1.Text = .Cells(iR, "C").Text
    End With
 End Sub
(???) 2020/07/10(金) 10:05

ありがとうございます。

あと,移動ボタンをつくってみました。移動はするのですが

1)5行目より上に行ったら動かない

2)44行目より下に行こうとしても動かない ようにしたいのですが,動いてしまいます。

どのように書けばよいのでしょうか。

本当にすみません。よろしくお願いします。

Private Sub CommandButton1_Click()

ActiveCell.Offset(1, 0).Activate

Call 表示設定

Dim lngrow As Long

lngrow = ActiveCell.Row

If lngrow < 5 Then Exit Sub

(ひで) 2020/07/10(金) 15:29


CommandButton1をクリックすると、上に移動するのですか?、下に移動するのですか?

 > ActiveCell.Offset(1, 0).Activate
これだと、判定するより前に、下に移動しますよ?

 > If lngrow < 5 Then Exit Sub
これだと、上に移動した場合の判定では? それに、5行目は見出し文字列であり、データではないのでは?

そして、上下に移動したいなら、逆に移動するプロシジャもあるはずですよね? 何故それを書かない…。
そっちは問題なく動いているから、とか?

いずれにせよ、私が実例書いているわけで、移動と判定はそれを見て応用できませんか? 考え方は一緒ですよ。
(???) 2020/07/10(金) 16:43


私の備忘録より
 似たようなものがありました。数十年前に作成し職場でみんなで使用していました。
 あの頃が懐かしいです。

 質問者さんの希望に添えるかどうか分かりませんが一度試してみてください。
 表については提示されている行列に変更してあります。
 変数は理解しやすいように日本語にしてみました。
 ユーザーフォームについては理解されているものとします。

 >1)5行目より上に行ったら動かない 
 メッセージがでます。
 >2)44行目より下に行こうとしても動かないようにしたいのですが,動いてしまいます。
 データが空になった時点でメッセージがでます。例えば10行までデータがあるとすると
 11行目でメッセージがでるということです。
 ですからそれ以降データを入力しないでください。
 テキストボックスの内容を変更するとセルの内容も変更できます。

 下記コード使用にあたっては
 テキストボックス6個のオブジェクト名をそれぞれ
 氏名、所見1、所見12、所見3、所見4、所見5にする。
 コマンドボタン2個のオブジェクト名とキャプション名をそれぞれ
 前へ、次へにする
 に変更してください。

 'UserForm1に記述
 Dim 表示行 As Long  '表示する行の行番号を格納
 Dim 最初 As Long  'リストの最初のデータの行番号を格納
 Dim 最後 As Long   'リストの最後のデータの行番号を格納

 'フォームを初期化時
  Private Sub UserForm_Initialize()
 '最初のデータの行番号を設定する
  最初 = 6
  最後 = Worksheets("sheet1").Range("C5").CurrentRegion.Rows.Count
  表示行 = 最初
  Call 表示
 End Sub

 '「前へ」ボタンクリック時
  Private Sub 前へ_Click()
  表示行 = 表示行 - 1
  If 表示行 >= 最初 Then
    Call 表示
  Else
    MsgBox "これより前にデータはありません。"
  End If
 End Sub

 '「次へ」ボタンクリック時
 Private Sub 次へ_Click()
  表示行 = 表示行 + 1
 '空白4行プラスする
  If 表示行 <= 最後 + 4 Then
    Call 表示
  Else
    MsgBox "これ以降データはありません。"
  End If
 End Sub

 'コントロールにセルを関連付けるサブプロシージャ
 Private Sub 表示()
   氏名.ControlSource = "C" & 表示行
   所見1.ControlSource = "D" & 表示行
   所見2.ControlSource = "E" & 表示行
   所見3.ControlSource = "F" & 表示行
   所見4.ControlSource = "G" & 表示行
   所見5.ControlSource = "H" & 表示行
 End Sub

 削除、追加などしたりしますか。

(KLY) 2020/07/10(金) 23:33


 ✕ テキストボックスのControlSourceプロパティは、普通は使いません。
     これを「D5」とすると、常に見出し行のセルに書かれた文字列「所見1」が表示されるだけで、変更できなくなります。 普通は、Textプロパティだけ使います。

 ◯ ユーザーフォームに設置したテキストボックスと、シートのセルを連動させると、テキストボックスの入力値をセルに表示させることができます。
     逆にセルの値をテキストボックスに表示させることができます。
     連動させるにはControlSourceプロパティを使います。
(KLY) 2020/07/11(土) 19:48

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.