• ベストアンサー

エクセルマクロのイベントプロシージャについて

cj_moverの回答

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

こんにちは 状況は再現できました。 10キーからIMEオフ状態で数字を1桁だけ入力したらイベント発生、 という条件なら(実際に(Textbox1~Textbox5)なら)、 _Change() イベントが使えるかもしれません。 よく解りませんが、以下のような感じではどうでしょうか。 一応、TextBox1への移動は意味ないので、2~5にフォーカスが移動します。 一応エラー処理も少しだけ加えました。 ' ////// ' 以下をコピペ。必ず!!、UserFormモジュールの先頭行に。 ' Sub TextBox1_Changeが重複する場合は、エラーになります。 Const TextBoxesMin = 1 Const TextBoxesMax = 5 Private Sub TextBox1_Change() PSetF TextBox1.Value End Sub Sub PSetF(v) If Val(v) < 2 Then Exit Sub v = CInt(v) If v > TextBoxesMax Then v = TextBoxesMax Me.Controls("TextBox" & v).SetFocus End Sub ' Excel2000、2003で動作確認済み ' ////// 十分にニーズを把握できないので、説明はご容赦ください。 TextBox1に入力する数字が2桁以上だと、 まったく違う話になりますので、 別途質問を立て直した方いいと思います。 条件に合わないようでしたら、すみません

slowdancer
質問者

お礼

ご回答いただきありがとうございました。 試してみたところ、確かに目的の動きをするのが確認できました。 下の方のお礼にも書きましたが、なんとかその動きを理解できるよう、この後、教えていただいたコードをじっくり解読させていただきます。 ちなみに蛇足ですが、状況を再現できたというのが、ちょっとうれしかったです(笑)。

関連するQ&A

  • エクセルユーザーフォームのカーソル位置

    どうしても分からないのでお助け下さい(>_<) エクセルでユーザーフォームを作っています。 TextBox1に品番を入れたら、Label1に品名を表示させています。 このとき、TextBox1に存在しない品番を入力した場合は、 再度入れなおしをさせたいのです。 そこで、カーソルをもう一度TextBox1に持っていきたいのです。 しかし、どうやってもタブオーダーでTextBox1の次にあるTextBox2に カーソルが行ってしまいます。 どうしたらもう一度TextBox1にカーソルを持っていくことができますか? ちなみに品名を表示するモジュールを書いておきます。 このSetFocusが違うということは分かるのですが・・・。 Private Sub TextBox1_AfterUpdate() Dim tmp As Range, a a = Me.TextBox1.Value   Set tmp = Sheets(1).Columns(1).Find(a, , xlWhole)   If tmp Is Nothing Then     Me.Label1.Caption = "品番が誤っています。再度入力して下さい"     Me.TextBox1.SetFocus     Exit Sub   Else     Me.Label1 = tmp.Offset(0, 1)   End If End Sub

  • ユーザーフォームのカーソル移動

    Excelのマクロでカーソル移動の事で教えて下さい。 フォームを表示するとTextBox1にカーソルが表示されます。 TextBox1で入力の判断しNG場合 カーソルを移動せずTextBox1に表示したいのですが CommandButton1に移動してしまいます。 (SetFocusでTextBox1を指定してNG) 【フォームの内容です】 TextBox1が1個 CommandButtonが2個存在します。 TextBox1のTabIndexは 0 CommandButton1のTabIndexは 1 CommandButton2のTabIndexは 2 【プログラムです】 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox1 = "" Then MsgBox "NG"     TextBox1.SetFocus End If End Sub 宜しくお願い致します。

  • コマンドボタンのEnterイベント後に、フォーカスを移動したい。

    コマンドボタンのEnterイベント後に、フォーカスを移動したい。 フォームに「TextBox1」(TabIndex=0)「TextBox2」(TabIndex=1)「CommandButton1」(TabIndex=2)の3つのコントロールがある場合。 CommandButton1がクリックされた場合も、TextBox2からCommandButton1に、タブキーまたはエンターキーで、フォーカスが移った場合にも、同じ処理を行い、処理結果によってTextBox1やTextBox2にフォーカスを移したいと考えています。 以下のようなサンプルを作成しました。 Private Sub CommandButton1_Enter() CommandButton1_Click End Sub Private Sub CommandButton1_Click() MsgBox ("OK") TextBox2.SetFocus End Sub この場合、CommandButton1_Enterのイベントが起こった場合、CommandButton1_Click()のTextBox2.SetFocusは効きません。 (正確には、CommandButton1_Enterイベントが終わった時点で無効でしょうか。) Enterイベントは、フォーカスが移動する前に発生するため、このイベントが終わった後に、そもそもの動作に戻り、フォーカス移動が発生してしまうからなのだと思っております。 要は、コマンドボタンにタブキーやエンターキーでフォーカスしても、コマンドボタンをクリックしたのと同じ処理を行い、所定の位置にフォーカスを持っていきたいのですが、どのように行えば良いか、わからない状況です。 よろしくお願いいたします。

  • UserFormのSetFocus

    環境はExcel2002です (1)TextBox1に入力された数値を,区切りにする (2)TextBox2を入力不可の状態から入力可能な状態にする (3)TextBox2をSetFocusする という単純なプロシージャなのですが SetFocusされなくて困ってます UserFormタブオーダーの順番はTextBox1,TextBox2の順になっています 考えられる原因はなんでしょうか? ご教示願います 原因が不明でも回避する方法を教えていただいても結構です なんとしてもSetFocusしたい Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Me.TextBox1.Text = Format(TextBox1.Text, "#,##0") Me.TextBox2.Enabled = True Me.TextBox2.BackColor = &H80000005 '背景色(白色) Me.TextBox2.SetFocus End Sub

  • エクセル イベントマクロのエラー回避

    イベントマクロを初めて書いてみたのですが A列を全部選択して削除などをするとエラーがて出てしまいます 回避するにはどのようにしたら良いのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A:A")) Is Nothing Then Select Case Target.Value Case Is = "りんご" cellColor = 3 Case Is = "みかん" cellColor = 6 End Select End If If Not Intersect(Target, Range("B:B")) Is Nothing Then Select Case Target.Value Case Is = "りんご" cellColor = 6 Case Is = "みかん" cellColor = 3 End Select End If Target.Interior.ColorIndex = cellColor End Sub 以上が書いたものです。 皆様の知恵お貸しください 宜しくお願いします。

  • エクセル マクロで教えて下さい。

    入力されたセルの値で、フリーフォーム(図形)の色を変えるマクロを作成しました。 (色々の方のお力をお借りしておりますが。。。) Private Sub Worksheet_Change(ByVal Target As Range) Dim mShp As String, SCol As Integer Select Case Target(1).Address(0, 0) Case "A1": myShp = "フリーフォーム 1" Case "A8": myShp = "フリーフォーム 8" Case "B3": myShp = "フリーフォーム 3" Case Else: Exit Sub End Select Select Case Target(1).Value Case 1: SCol = 10 Case 2: SCol = 13 Case 3: SCol = 12 Case 4: SCol = 11 Case 5: SCol = 15 Case Else: SCol = -1 End Select With Me.Shapes(myShp).Fill If SCol = -1 Then .Visible = msoFalse Else .Visible = msoTrue .ForeColor.SchemeColor = SCol End If End With End Sub A1,A8,B3に直接値を入力すると色が変化しますので、問題ないのですが、VLOOKUP等で別シートの値を、A1,A8、B3に表示させても色が変わらない事がわかりました。 そこで、このマクロでVLOOKUP等で引っ張って来た場合でも対応出来る様に変更する事は可能でしょうか? それが出来ない場合は、別シートのセルを直接参照し色を変化出来る様に変更する事が出来ないでしょうか? これを作成するのに聞いた人間はマクロに詳しい方々ですが、当方は、マクロは素人同然です。 詳しく説明していただければ幸いです。 何卒よろしくお願い致します。

  • Excel VBAのユーザーフォーム

    Textboxや、Comboboxで、2バイト入力した時に、次のTextboxや、Comboboxに移動出来るような制御はありますか?2バイト以上入力出来ないような制御をしたいです。 Private Sub ComboBox1_Change() ComboBox2.SetFocus End Sub も考えたのですが、これだと何バイトでも入力出来るので、宜しくお願いします。

  • TextBoxに連続で入力する方法

    Form1に、TextBox1とTextBox2を配置しています。 TextBox1にKey入力を受け、Enter Keyで取り込む動作を、連続して行うためのプログラムを作ってみましたが、何故かEnter Keyの後、カーソルがTextBox2に移動してしまいます。Enter Keyの後、TextBox1.SetFocusで、カーソルをTextBox1にしているのですが何故が解らず困っています。Enter Kyeの後、カーソルがTextBox1に戻るようにするには、どのようにすれば良いのか教えて下さい。 PC環境は、OS=Win10 Excel=2010 です。作ったプログラムは以下の通りです。よろしくお願いします。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyReturn Then Sheets("Sheet1").Range("A1") = TextBox1.Value TextBox1 = "" TextBox1.SetFocus End If End Sub

  • エクセル 条件に合わせてマクロを停止させたい

    VBA初心者です。よろしくお願いします。 Sub テスト1() Select Case Cells(ActiveCell.Row, "a").Value Case "○" テスト2 Case "×" ここでマクロを停止させたい End Select End Sub これをループさせているのですが、”a”に”×”がきたときにマクロを停止させる記述方法はありますか?

  • excel vba ジャンプ

    excel2003のUserFormにてtextbox作成しました。 textbox1にページを入力すると指定のページにジャンプする コードを作成したのですが、動作的には目的とする事ができました。 ただ、初心者レベルで作成したので、コード記述が長く、 ページが増えるたびにコードを追記していかなければなりません。 下記に作成したコードを記述します。 もっと簡単に記述する方法はありますか? ---------------------------------------------------------- Private Sub TextBox1_Change() If TextBox1.Value = 1 Then ActiveWindow.ScrollRow = 1 ActiveWindow.ScrollColumn = 1 Range("$A$15").Select End If If TextBox1.Value = 2 Then ActiveWindow.ScrollRow = 38 ActiveWindow.ScrollColumn = 1 Range("$A$38").Select End If If TextBox1.Value = 3 Then ActiveWindow.ScrollRow = 69 ActiveWindow.ScrollColumn = 1 Range("$A$69").Select End If If TextBox1.Value = 4 Then ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollColumn = 1 Range("$A$100").Select End If If TextBox1.Value = 5 Then ActiveWindow.ScrollRow = 131 ActiveWindow.ScrollColumn = 1 Range("$A$131").Select End If End Sub ---------------------------------------------------------- 上記記述で行っていることは、 textbox1に 1 と入力すると1ページ目が表示  キーボードでctrl+Homeの操作をした状態でカーソルがA15選択 textbox1に 2 と入力すると2ページ目が表示  表示の先頭が38行目、カーソルがA38選択 ページの行数が1ページ目だけ37行 2ページ目以降が31行ごとです。 実際は、200ページ以上あるのでなんとかしたいのですが・・・・