teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

コード追記

2020/11/17 13:48

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -10,13 +10,51 @@
10
10
  ```
11
11
  ---
12
12
 
13
- コン配置て初期状態のままタブキで次ントロールへフォーカスが移動します。
13
+ マルチページにテキスボックスが多数あると同じコ繰り返記述することにるのでクラスモジュルを使ってイベント共通化をすると、イベントを一か所に記述するだけですみます。
14
- どこかで初期値から変更しているのだと思います。
15
14
 
16
- ユーザーフォームのモジュール内に、
17
- `TextBox1.TabKeyBehavior = True`
18
- というコドがあったらこれ削除してください。`TextBox1` というのは実際のテキストボックスの名前です。
15
+ クラスモジュ挿入して、オブジェクト名を、`exTextBox` にします。
16
+ そこに下記のコードを記述します。
17
+ ```vba
18
+ Option Explicit
19
+ Private WithEvents TB As MSForms.TextBox
19
20
 
20
- または、TextBox1_KeyDownイベントでタブキーを無効にしているかもしれませんので、TextBox1_KeyDown というプロシージャがないか確認してみてください。
21
+ Public Sub SetCtrl(new_ctrl As MSForms.TextBox)
22
+ Set TB = new_ctrl
23
+ End Sub
21
24
 
25
+ Private Sub TB_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
26
+ If Shift = 2 And KeyCode = vbKeyTab Then 'Ctrl+Tabキーのとき
27
+ KeyCode = 0
28
+ With TB.Parent.Parent 'テキストボックスの親(Page)の親(MultiPage)
29
+ If .Value = .Pages.Count - 1 Then '最終ページなら
30
+ .Value = 0
31
+ Else
32
+ .Value = .Value + 1
33
+ End If
34
+ End With
35
+ End If
36
+ End Sub
37
+ ```
38
+
39
+ ユーザーフォームのモジュール
40
+ ```vba
41
+ Option Explicit
42
+
22
- あるいはほかのコントロールの Tabstop False になっていたらTrueに変更してください。
43
+ Private TBCol As Collection 'exTextBoxクラス格納用コレクション
44
+
45
+ Private Sub UserForm_Initialize()
46
+ Set TBCol = New Collection
47
+
48
+ Dim myCtrl As Control
49
+ Dim myObj As exTextBox
50
+ For Each myCtrl In Me.Controls
51
+ If TypeName(myCtrl) = "TextBox" And TypeName(myCtrl.Parent) = "Page" Then
52
+ Set myObj = New exTextBox
53
+ myObj.SetCtrl myCtrl
54
+ TBCol.Add myObj
55
+ End If
56
+ Next
57
+ End Sub
58
+ ```
59
+
60
+ 以上です。

3

説明追加

2020/11/17 13:48

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,3 +1,15 @@
1
+ マルチページ(MultiPage1)の1ページ目にテキストボックス(TextBox1)があるのなら、KeyDownイベントに下記のように設定すればいいでしょう。すべてのテキストボックスにこのようにKeyDownイベントを設定します。(MultiPage1.Value=0 で1ページ目選択になります。)
2
+
3
+ ```vba
4
+ Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
5
+ If Shift = 2 And KeyCode = vbKeyTab Then
6
+ KeyCode = 0
7
+ Me.MultiPage1.Value = 1
8
+ End If
9
+ End Sub
10
+ ```
11
+ ---
12
+
1
13
  コントロールを配置して初期状態のままなら、タブキーで次のコントロールへフォーカスが移動します。
2
14
  どこかで初期値から変更しているのだと思います。
3
15
 

2

説明の改善

2020/11/17 02:19

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -5,4 +5,6 @@
5
5
  `TextBox1.TabKeyBehavior = True`
6
6
  というコードがあったらこれを削除してください。`TextBox1` というのは実際のテキストボックスの名前です。
7
7
 
8
+ または、TextBox1_KeyDownイベントでタブキーを無効にしているかもしれませんので、TextBox1_KeyDown というプロシージャがないか確認してみてください。
9
+
8
10
  あるいはほかのコントロールの Tabstop が False になっていたらTrueに変更してください。

1

誤字修正

2020/11/17 01:10

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -5,4 +5,4 @@
5
5
  `TextBox1.TabKeyBehavior = True`
6
6
  というコードがあったらこれを削除してください。`TextBox1` というのは実際のテキストボックスの名前です。
7
7
 
8
- あるいはほかのコントロールの Tabstop が False になっていたらTrueに変更て見てください。
8
+ あるいはほかのコントロールの Tabstop が False になっていたらTrueに変更てください。