お世話になっております。
今現在excel内のVBAで簡単な見積もりシステムを修正しています。
(作成した人は退職しております。)
それで
文字列を入力する所でTabキーを押すと文字列内に\tとタブが入ってしまい
使いづらいので 入力出来る次のフォーカス部分に移動させたいのですが
なんという語句でググれば出てくるのかご助力いただけないでしょうか?
無効にする方法は
https://www.officepro.jp/excelvbaform/form_textbox/index8.html
に
object.TabKeyBehavior = Boolean 編集領域の中で、タブ文字を許可するかどうかを設定します。
と分かったのですが次に入力できる部分にフォーカスしたいのです。
大変基本的な事で申し訳ないのですが
上記何か情報をお持ちな方はコメントいただけますと嬉しく思います。
【説明不足なので追記】
VBAのフォームで「MultiPage」で作成しているページにて
Ctrl+tab で 次の項目に移動させたいのです。
(例えばコントロールパネル>ネットワークとインターネット の
インターネットオプション で 上部の【全般】【セキュリティ】等を
Ctrl+Tab で移動するように実装したい。)
そのような挙動を実装するにはどのような語句でググれば良いのか
伺ってよろしいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/16 23:52
回答5件
0
投稿2020/11/20 05:35
総合スコア312
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ma2hiro様 プロパティウインドでTabキー又はEnterキーを
押した時のフォーカスの順番設定の仕方は理解されたでしょうか
プロパティウインドでその他にいろいろ設定の仕方があります
今回はマクロでフォーカスの順番設定の仕方を・・ということ
ですが。ネットで調べてみましたがこれといった結果が得られ
ませんでした。私も独学の知識です いろいろテストしてみました
これでいいのかな?というマクロが出来ましたので。参考までに
添付いたします
はたして これで良いのか、ジャドウなのかは分かりませんがね!
プロパティウインドで設定変更出来るのに 何も時間かけてまで
初心者がマクロ組む必要があるのかな?と感じています
私は無料のメールマガジンで覚えました。
ここでの回答者様のソースコードは初心者さまには高度しすぎる
初心者の方はシートの動きや、セルの動き(移動)とソースコード
の動きとの関連が目で確認(可視化)できれば覚えやすいですよね!
VBA
Sub Macro1()’標準モジュール
UserForm1.TextBox1.IMEMode = 1
UserForm1.Show
End Sub
’UserFormコード
Private Sub TextBox1_Change()
With UserForm1.TextBox4
.SetFocus
.TabIndex = 3
.IMEMode = 1
End With
End Sub
Private Sub TextBox2_Change()
With UserForm1.TextBox1
.SetFocus
.TabIndex = 0
.IMEMode = 1
End With
End Sub
Private Sub TextBox3_Change()
With UserForm1.TextBox2
.SetFocus
.TabIndex = 1
.IMEMode = 1
End With
End Sub
Private Sub TextBox4_Change()
With UserForm1.TextBox3 .SetFocus .TabIndex = 2 .IMEMode = 1
投稿2020/11/20 05:34
総合スコア312
0
投稿2020/11/17 12:34
総合スコア312
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/19 06:40
2020/11/19 08:10
0
ベストアンサー
マルチページ(MultiPage1)の1ページ目にテキストボックス(TextBox1)があるのなら、KeyDownイベントに下記のように設定すればいいでしょう。すべてのテキストボックスにこのようにKeyDownイベントを設定します。(MultiPage1.Value=0 で1ページ目選択になります。)
vba
1Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 2 If Shift = 2 And KeyCode = vbKeyTab Then 3 KeyCode = 0 4 Me.MultiPage1.Value = 1 5 End If 6End Sub
マルチページにテキストボックスが多数あると同じコードを繰り返し記述することになるので、クラスモジュールを使ってイベントの共通化をすると、イベントを一か所に記述するだけですみます。
クラスモジュールを挿入して、オブジェクト名を、exTextBox
にします。
そこに下記のコードを記述します。
vba
1Option Explicit 2Private WithEvents TB As MSForms.TextBox 3 4Public Sub SetCtrl(new_ctrl As MSForms.TextBox) 5 Set TB = new_ctrl 6End Sub 7 8Private Sub TB_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 9 If Shift = 2 And KeyCode = vbKeyTab Then 'Ctrl+Tabキーのとき 10 KeyCode = 0 11 With TB.Parent.Parent 'テキストボックスの親(Page)の親(MultiPage) 12 If .Value = .Pages.Count - 1 Then '最終ページなら 13 .Value = 0 14 Else 15 .Value = .Value + 1 16 End If 17 End With 18 End If 19End Sub
ユーザーフォームのモジュール
vba
1Option Explicit 2 3Private TBCol As Collection 'exTextBoxクラス格納用コレクション 4 5Private Sub UserForm_Initialize() 6 Set TBCol = New Collection 7 8 Dim myCtrl As Control 9 Dim myObj As exTextBox 10 For Each myCtrl In Me.Controls 11 If TypeName(myCtrl) = "TextBox" And TypeName(myCtrl.Parent) = "Page" Then 12 Set myObj = New exTextBox 13 myObj.SetCtrl myCtrl 14 TBCol.Add myObj 15 End If 16 Next 17End Sub
以上です。
投稿2020/11/17 01:00
編集2020/11/17 13:48総合スコア34075
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/17 01:15
2020/11/17 04:13
2020/11/17 04:36
2020/11/17 05:49
2020/11/17 13:52
2020/11/19 08:34
2020/11/19 09:22 編集
2020/11/20 00:57
2020/11/20 01:10
0
すいません。
Ctrl+PageUp,PageDown
で出来るのでとりあえずこちらで対処してもらいます……
でもMultiPageでCtrl+Tabの方がWindowsに則っている気がするので
手段をご存知な方はどういった語句でググれば良いのか
お教えいただけますようお願いいたします。
投稿2020/11/17 02:03
総合スコア159
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/17 08:20 編集
2020/11/19 09:24
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。