[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『テキストボックスを矢印キーで移動したい』(たけさん)
いつもありがとうございます。
Excelの一覧をを検索するコードです。
テキストボックス1〜5があり、5まで任意で入力しEnterキーで検索(フィルタ)されるようにしています。
現在1〜5まではEnterで移動するのですが、
合わせて上下の矢印キー(↓↑)でも、テキストボックスを異動できるようにしたいのです。
どの様に書き換えたら、そのような動きになるのでしょうか。
ご指導ください。よろしくお願いします。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub TextBox5_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
Application.ScreenUpdating = False
If Worksheets("sheet1").AutoFilterMode Then
'オートフィルタを解除 Worksheets("sheet1").AutoFilterMode = False End If
If KeyCode <> 13 Then Exit Sub CommandButton1_Click Rows("1:1").Select
Selection.AutoFilter Field:=17, Criteria1:="=*" & TextBox1.Value & "*", Operator:=xlAnd '17列目適用 Selection.AutoFilter Field:=10, Criteria1:="=*" & TextBox2.Value & "*", Operator:=xlAnd 'メーカーCD Selection.AutoFilter Field:=18, Criteria1:="=*" & TextBox3.Value & "*", Operator:=xlAnd '仲間CD Selection.AutoFilter Field:=3, Criteria1:="=*" & TextBox4.Value & "*", Operator:=xlAnd '入日記
'テキストボックス5については何も入力されていなければフィルタ(処理)しない 入力されていればフィルタ If TextBox5.Value <> "" Then Selection.AutoFilter Field:=16, Criteria1:="=" & Format(TextBox5.Value, "###0"), Operator:=xlAnd '16列目金額 End If
'再計算 Application.CalculateFull
Application.ScreenUpdating = True
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
'検索します
If Worksheets("sheet1").AutoFilterMode Then 'オートフィルタを解除 Worksheets("sheet1").AutoFilterMode = False End If
Rows("1:1").Select 'すべての列の1行目のセル範囲選択
Selection.AutoFilter 'オートフィルタ
'オートフィルタでテキストボックスに入った値を検索する
Selection.AutoFilter Field:=17, Criteria1:="=*" & TextBox1.Value & "*", Operator:=xlAnd '17列目適用 Selection.AutoFilter Field:=10, Criteria1:="=*" & TextBox2.Value & "*", Operator:=xlAnd '10列目メーカーCD Selection.AutoFilter Field:=18, Criteria1:="=*" & TextBox3.Value & "*", Operator:=xlAnd '18列目CD Selection.AutoFilter Field:=3, Criteria1:="=*" & TextBox4.Value & "*", Operator:=xlAnd '3列目入日記
'テキストボックス5については何も入力されていなければフィルタ(処理)しない 入力されていればフィルタ If TextBox5.Value <> "" Then Selection.AutoFilter Field:=16, Criteria1:="=" & Format(TextBox5.Value, "###0"), Operator:=xlAnd '16列目金額 End If
'再計算 Application.CalculateFull
Application.ScreenUpdating = True
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub CommandButton2_Click()
'フィルタ結果をクリアする Selection.AutoFilter If ActiveSheet.AutoFilterMode = False Then Range("A2").AutoFilter End If
'テキストボックスをクリアする Sheet1.TextBox1.Value = "" Sheet1.TextBox2.Value = "" Sheet1.TextBox3.Value = "" Sheet1.TextBox4.Value = "" Sheet1.TextBox5.Value = ""
Range("P1").Select
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub CommandButton3_Click()
'テキストボックスをクリアする Sheet1.TextBox1.Value = "" Sheet1.TextBox2.Value = "" Sheet1.TextBox3.Value = "" Sheet1.TextBox4.Value = "" Sheet1.TextBox5.Value = ""
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'テキストボックス2(メーカーCD)を入力後、テキストボックス1(適用)へ移動
If KeyCode = vbKeyReturn Then 'Enterキーで移動 TextBox1.Activate End If
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'テキストボックス1(適用)を入力後、テキストボックス3(仲間CD)へ移動
If KeyCode = vbKeyReturn Then 'Enterキーで移動
TextBox3.Activate End If
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'テキストボックス3(仲間CD)を入力後、テキストボックス4(入日記)へ移動
If KeyCode = vbKeyReturn Then 'Enterキーで移動
TextBox4.Activate End If
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Private Sub TextBox4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'テキストボックス4(入日記)を入力後、テキストボックス5(金額)へ移動
If KeyCode = vbKeyReturn Then 'Enterキーで移動
TextBox5.Activate End If
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
< 使用 Excel:Excel2010、使用 OS:Windows7 >
このコードは シートに配置した ActiveXコントロールを対象にしてシートモジュールに書かれているのですか? あるいは、ユーザーフォームに書かれているのですか?
後者なら、BeforeUpdate 等を使えばよろしいかと思うのですが、わざわざ KeyDown をつかっているということは 前者ですかね?
(β) 2016/03/16(水) 17:17
KeyCode = 38 ⇒ 上矢印キー KeyCode = 40 ⇒ 下矢印キー を追記してはいかがでしょうか。
(ろっくん) 2016/03/16(水) 17:20
あぁ、TextBox●.Activate とありますので シートモジュールなんですね。 では、ろっくんさんの回答で。
(β) 2016/03/16(水) 17:29
本題とは関係がないのですが、オートフィルターが設定されていないシートに対して AutoFilterMode を False にしてもエラーにはなりません。
なので、If で判定する必要はなく、無条件に Worksheets("sheet1").AutoFilterMode = False でOKです。
(β) 2016/03/16(水) 17:33
シート上の ActiveX のテキストボックスのタブオーダ制御、ちょっと書いてみました。 Enterキー、Tabキー、↓キーで、次に移る、Shift/Tabキー、↑キーで、前に戻る。 タブオータは、★コードで指定します。ここは実際のものに書き換えてください。
●ThisWorkBookモジュール
Private Sub Workbook_Open() preset End Sub
●標準モジュール
Dim txPool As Collection
Sub preset() Dim cls As Class1 Dim txOrder As Variant Dim tb As MSForms.TextBox Dim nxt As MSForms.TextBox Dim pre As MSForms.TextBox Dim x As Long Dim p As Long Dim n As Long
Set txPool = New Collection txOrder = Array("TextBox1", "TextBox3", "TextBox2", "TextBox4") '★
For x = LBound(txOrder) To UBound(txOrder) Select Case x
Case UBound(txOrder) p = x - 1 n = LBound(txOrder) Case LBound(txOrder) p = UBound(txOrder) n = x + 1 Case Else p = x - 1 n = x + 1 End Select
Set tb = Sheet1.OLEObjects(txOrder(x)).Object Set nxt = Sheet1.OLEObjects(txOrder(n)).Object Set pre = Sheet1.OLEObjects(txOrder(p)).Object
Set cls = New Class1 cls.Init tb, pre, nxt txPool.Add cls Next
End Sub
●クラスモジュール(Class1)
Dim WithEvents myTB As MSForms.TextBox Dim myNxt As MSForms.TextBox Dim myPre As MSForms.TextBox
Sub Init(tb As MSForms.TextBox, pre As MSForms.TextBox, nxt As MSForms.TextBox) Set myTB = tb Set myNxt = nxt Set myPre = pre End Sub
Private Sub myTB_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim tb As MSForms.TextBox Select Case KeyCode Case vbKeyReturn, vbKeyDown Set tb = myNxt Case vbKeyUp Set tb = myPre Case vbKeyTab If Shift = 1 Then Set tb = myPre Else Set tb = myNxt End If End Select
If Not tb Is Nothing Then tb.Activate
End Sub
(β) 2016/03/17(木) 10:00
KeyCode = 38
KeyCode = 40
できました!!!ありがとうございます
_(_^_)_
(たけさん) 2016/03/17(木) 13:28
いつも本当にありがとうございます!!!
こんなに短時間に...!!!
実際のものに書き換えして、ご報告させていただきます
本当にありがとうございます
୧꒰*´꒳`*꒱૭✧
(たけさん) 2016/03/17(木) 13:31
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.