[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォーム内 次へ 後ろへボタン』(ひで)
所見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
としたのですが,これだけじゃだめなのですか?
(ひで) 2020/07/10(金) 07:16
素人ですみません
(ひで) 2020/07/10(金) 07:19
テキストボックスの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
> 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.