エクセルVBA マルチページのSetFocus

このQ&Aのポイント
  • マルチページ内でテキストにフォーカスする方法について
  • マルチページ内のテキストにフォーカスする方法を調べてもうまくいかない
  • マルチページ内のテキストにフォーカスする方法を教えてください
回答を見る
  • ベストアンサー

エクセルVBA マルチページのSetFocus

いつもお世話になっております。 ありがとうございます。 マルチページ内のエラー時に、テキストにフォーカスしたいのですが、 該当のエラーテキストではないページ(タブ)にカーソルがあった場合、 エラーとなってしまいます。 色々調べて、やってみたのですが、うまくいきません。 ご教授いただけると幸いです。 マルチページ内には、いくつかのテキストとチェックボックスがあります。 マルチページのページ数はmei_su = 5 です。 For i = 1 To mei_su Set mychk = Me.Controls("chkMei5_" & i) If mychk.Value = True Then MsgBox "チェックされていますが、入力されていません。" Set mytxt = Me.Controls("txtMei2_" & i) mytxt.SetFocus Exit Sub End If Next MultiPage1.value = 0 とか、 Me.Controls("Page" & i).enable = true とかも 入れてみたのですが、ダメでした。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>マルチページ内には、いくつかのテキストとチェックボックスがあります。 >マルチページのページ数はmei_su = 5 です。 ご説明とマクロが矛盾しているように思われます。 とりあえず変更前: mytxt.SetFocus 変更後: Me.MultiPage1.Value = mytxt.Parent.Index mytxt.SetFocus それとも,マルチページの「1枚のページの中には」1個のチェックボックスと1個のテキストボックスの1セットしか無くて(幾つかあるワケじゃなくて),マルチページの頁数とチェック-テキストの組数は同じですというイミなら,今のマクロのままでOKですが,それならもっと簡単に 変更後: me.multipage1.value = i - 1 mytxt.setfocus で十分です。

kak_yuriko
質問者

お礼

ご回答、ありがとうございます。 説明が悪くすみません。 マルチページの中には、5ページあります。 その1ページ1ページには、テキスト・チェックボックス等が9つあります。 txtMei1-1 ~ txtMei4-5 (txtMeiの後の数字がページ内の番号、次の数字がページ数としています) chkMei5-1 等 Me.MultiPage1.Value = mytxt.Parent.Index mytxt.SetFocus を入れてみたのですが、 「エラー 438   オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 となってしまいました。 私の入力が悪いのかもしれません。 すみません。 また、ご回答いただけると幸いです。

kak_yuriko
質問者

補足

keithin様、本当にありがとうございました。 For i = 1 To 5 Set mychk = Me.Controls("chkMei5_" & i) If mychk.Value = True Then Me.MultiPage1.Value = i - 1 Set mytxt = Me.Controls("txtMei2_" & i) mytxt.SetFocus MsgBox "エラーです。" Exit Sub End If Next ご指摘のようにi-1で十分でした。 本当にありがとうございました。

関連するQ&A

  • Excel VBA SetFocus

    環境:Excel 2002です UserForm1での質問です Flame5にTextBox14とTextBox15があります TextBox14とTextBox15のBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)後 Flame2にあるTextBox1にSetFocusしたいのですがエラーが発生します 実行時エラー 2147467259(800004005) 異なるFlameにSetFocusする方法があるのでしょうか? Flame5の中でTextBox14及びTextBox15のSetFocusはできます TextBox14とのTextBox15のBeforeUpdateのプロシージャです Private Sub TextBox14_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox14.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox14.Text) Me.TextBox15.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If Me.TextBox1.SetFocus End Sub Private Sub TextBox15_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox15.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox15.Text) Me.TextBox14.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If UserForm1.TextBox1.SetFocus End Sub ご支援願います

  • エクセルVBAにて、2回エラーになってしまう

    現在、エクセルVBAにて、エラーのチェックを行っているのですが、 他の数値項目は問題ないのですが、下記の個所のみ、 エラーメッセージが2回出力されます。 (1回目のExitSubがきかない) お分かりになる方がおられましたら、ご回答、よろしくお願い致します。 '費用(明細1) Private Sub txtMei4_1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Set mytxt = Me.Controls("txtMei4_1") If mytxt.Text <> "" And _ IsNumeric(mytxt.Text) = False Then MsgBox "数値を入力してください" Cancel = True Exit Sub ←ここで、Exitせず、もう一度このPrivate Subに戻ってくる End If End Sub 他のテキストでも同様のチェックをしているのですが、 この部分のみ、msgboxが2回出力されます。 申し訳ありません。 よろしくお願い致します。

  • エクセル VBA for文について

    再び失礼します。 昨日VBAを始めた初心者です。 1、チェックボタン17個にそれぞれ変数を設定 2、2つだけチェックを入れると仮定して、実行ボタンを押したときに チェックが入っている2つの中で変数の大きいものをMax、小さいものをMinとしてシートに出力したいのですが、”ここ”と書いてあるところに Me("hensuu" & n). hensuu & n など入れてみたのですがエラーになります。 くだらないミスだと思いますがよくわかりません。 どなたかご教授お願いします。 Private Sub CommandButton2_Click() If Check1.Value = True Then hensuu1 = "9" End If If Check2.Value = True Then hensuu2 = "8" End If If Check3.Value = True Then hensuu3 = "7" End If If Check4.Value = True Then hensuu4 = "6" End If If Check5.Value = True Then hensuu5 = "5" End If If Check6.Value = True Then hensuu6 = "4" End If If Check7.Value = True Then hensuu7 = "3" End If If Check8.Value = True Then hensuu8 = "2" End If If Check9.Value = True Then hensuu9 = "1" End If If Check11.Value = True Then hensuu10 = "1/2" End If If Check11.Value = True Then hensuu11 = "1/3" End If If Check12.Value = True Then hensuu12 = "1/4" End If If Check13.Value = True Then hensuu13 = "1/5" End If If Check14.Value = True Then hensuu14 = "1/6" End If If Check15.Value = True Then hensuu15 = "1/7" End If If Check16.Value = True Then hensuu16 = "1/8" End If If Check14.Value = True Then hensuu17 = "1/9" End If Dim n As Long Dim Max As Long Dim Min As Long For n = 1 To 17 If Me("Check" & n).Value = True Then Max = ”ここ” If Me("Check" & n).Value = True Then Exit For Next n For n = Max To 17 If Me("Check" & n).Value = True Then Min = ”ここ” If Me("Check" & n).Value = True Then Exit For Next n Worksheets("Sheet1").Range("A1") = Min Worksheets("Sheet1").Range("B1") = Max MsgBox hensuu End Sub

  • エクセルVBA/マルチページ/ページ切り替え時

    エクセル2000使用 ユーザーフォーム(UserForm1):マルチページ(MultiPage1)でページを5つ 作成。各ページにはテキストボックスとコマンドボタンを配置。 テキストボックスに値入力後、コマンドボタンをクリックするとテキストボック スの値をクリアするように設定。 テキストボックスに値入力後、コマンド実行前にページを替えた時、テキストボ ックスの値をクリアしたいのですが、どのようにすればよろしいのでしょうか。 類似する過去の質問を見てもよくわからなかったので、ぜひご回答のほどよろし くお願い申上げます。

  • VBA 追加したMultiPageでのイベント

    ExcelVBAでどうしても分からないところがあったため、質問させていただきました。 <Usrform上Control> ・UserForm1 ・MultiPage-Page1 ・CommandButton1(押すとPageが追加されます。Page1,Page2,Page3...) ・Combobox1 ・TextBox1 <現在可能な動作> UserForm1上にMultiPageのPage1を設定しています。 CommandButton1を押すとPage2が追加され、Page1上に設定されてあるCombobox1とTextBox1をPage2上に追加します。 <行ないたい動作> 現在は、Page1上でCombobox1の値が変更された時に、Page1上のTextBox1の値が変更されるように設定していますが、 Page2上のCombobox1の値が変更された時に、Page2上のTextBox1の値を変更することは出来ますでしょうか? 使用Versionは、Excel 2003です。 何卒、よろしくお願いします。 <Code> Private Sub CommandButton3_Click() Dim myCmbbx As MSForms.ComboBox Dim myTxtbx As MSForms.TextBox With MultiPage1 .Pages.Add , , .Value + 1 .Value = .Value + 1 End With With MultiPage1.SelectedItem Set myCmbbx = .Controls.Add("Forms.Combobox.1", "ComboBox1", True) With myCmbbx .AddItem "AAA" .AddItem "BBB" .AddItem "CCC" End With Set myTxtbx = .Controls.Add("Forms.TextBox.1", "TextBox1", True) With myTxtbx .MultiLine = True End With End With End Sub Private Sub ComboBox1_change() If ComboBox1.Text = "BBB" Then TextBox1.Value=1234567 End If End Sub

  • エクセル VBA OptionButtonからTextBox

    すいません! OptionButtonなら 下記の記述でエラー表示を 簡単にできるのですが これがOptionButtonではなく TextBoxならどのように変化したら 良いのでしょうか? すいません、教えて下さい! Private Sub 記録_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 6 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "選択されていません" Exit Sub End If If Me.Controls("Combobox" & Cnt).Value = "" Then MsgBox Me.Controls("OptionButton" & Cnt).Caption & " の内容が選択されていません" Exit Sub End If With 記入フォーム .TextBox5.Value = Me.Controls("OptionButton" & Cnt).Caption .TextBox6.Value = Me.Controls("Combobox" & Cnt).Value End With Unload Me End Sub

  • Excel VBA オプションボタンについて

    こんばんは オプションボタンが5つあり、 登録ボタンが1つあるユーザーフォームを作りました。 このオプションにチェックを入れずに登録ボタンを押したときに 「必ず選択してください。」とメッセージを表示し、再度入力させるようにしたいのですが、どうしたらよいのでしょうか。 Excelのバージョンは2003です。 調べたところ (1)で動きそうだ。ということが判ったのですがチェックを入れ値がtrueになるとエラーが発生して止まってしまいます。(理由がわかりません) Private Sub commandbutton2_click() Dim opt As ControlFormat, flg As Boolean flg = False For Each opt In frame1.Controls If opt.Value = True Then '←ここの行でtrueだった場合のエラーが発生してしまう。 flg = True Selection.Value = opt.Caption End If Next Unload userform1 End Sub (2)この方法で何とか動いたのですが、初めの方に書いたとおり、オプションボタンが選択されずに登録ボタンが押された場合、チェックするように促すメッセージを表示する方法がわかりません。また、できればユーザーホームの×ボタンを押せなくする方法もしくは、閉じられた場合にマクロを抜けるようにするにはどうしたらよいのでしょうか。宜しくお願い致します。 Private Sub commandbutton1_click() Dim i As Integer For i = 1 To 5 If Me.Controls("optionbutton" & i).Value = True Then Selection.Value = Me.Controls("optionbutton" & i).Caption End If Next i Unload userform1 End Sub

  • エクセルVBA テキストボックス 金額の入力

    エクセルVBA ユーザフォームにて「商品登録」を作成しています。 単価を設定するテキストボックスについて2つ質問させてください。 1.単価が小数点以下の場合の処理 2.小数点なしの単価を小数点ありの単価に修正する方法 1.以下の方法で小数点ありとなしを判断しているのですが、 もっと簡単な方法があれば教えていただきたいです。 Set mytxt = Me.Controls("txt4") If mytxt.Text <> "" Then   tanka01 = mytxt.Text   tanka02 = Application.WorksheetFunction.RoundDown(tanka01, 0)   If tanka01 = tanka02 Then     mytxt.Text = Format(tanka01, "#,##0")   Else     mytxt.Text = Format(tanka01, "#,##0.0")   End If End If 2.上記方法で、単価をデータに設定後、変更を行うため、 TextBox内に単価を出力し変更できるようにしているのですが、 1度小数点なしで設定してしまうと、小数点以下が単価のTextBox内に 入力できなくなってしまいます。 小数点が再度入力できる方法は存在するでしょうか? 以上です。 色々と調べてみたのですが、見つからず、質問させていただきました。 よろしくお願いいたします。

  • access setfocusについて

    いつもお世話になっております。 いろいろ調べたのですが行き詰っておりまして ご教授お願いします。 下記記述でsetfocusでエラーになってしまいます。 Private Sub コマンド_Click() If IsNull(Me.テキストボックスコントロール名) Then MsgBox "未入力です" Me.テキストボックスコントロール名.SetFocus End If テキストボックスの処理記述 End Sub https://www.moug.net/tech/acvba/0030005.html こちらを参考にしました。 よろしくお願いします。

  • EXCEL VBA 

    Excel VBAで アンケート集計をしたいと思い、プログラムを作ったのですが、J列までは入力がうまくいくのですが、K列にデータを入れて次の行にデータを入れると もともと存在していたKれつのデータが消えてしまします。 どう修正すれば ちゃんとデータが残ってくれるのでしょうか?  誰か教えてください Option Explicit Private Sub UserForm_Initialize() Dim チェックボックス As Control With cboBlood .AddItem "A型" .AddItem "B型" .AddItem "O型" .AddItem "AB型" End With cboBlood.ListIndex = -1 txtNo.Value = WorksheetFunction.Max( _ [Database].Resize(, 1)) + 1 txtNo.Enabled = False txtName.Text = "" optMale.Value = True txtAge.Value = 0 For Each チェックボックス In fraOS.Controls チェックボックス.Value = False Next txtName.SetFocus End Sub Private Sub cmdEntry_Click() Dim 行 As Long Dim 確認 As Integer 確認 = MsgBox("データを登録します。" _ & "よろしいですか?", vbYesNo) If 確認 <> vbYes Then Exit Sub 行 = [Database].Rows.Count + 1 [Database].Cells(行 - 1, 1).EntireRow.Insert [Database].Offset(行 - 1).Resize(1).Copy _ [Database].Cells(行 - 1, 1) [Database].Offset(行 - 1).Resize(1).ClearContents [Database].Cells(行, 1) = txtNo.Value [Database].Cells(行, 2) = txtName.Text If optMale.Value = True Then [Database].Cells(行, 3) = "男性" Else [Database].Cells(行, 3) = "女性" End If [Database].Cells(行, 4) = cboBlood.Text [Database].Cells(行, 5) = txtAge.Value If chkWin.Value = True Then _ [Database].Cells(行, 6) = "○" If chkMac.Value = True Then _ [Database].Cells(行, 7) = "○" If chkLinux.Value = True Then _ [Database].Cells(行, 8) = "○" If chkOther.Value = True Then _ [Database].Cells(行, 9) = "○" If chkOther.Value = True Then _ [Database].Cells(行, 10) = "○" Unload frmNew End Sub Private Sub cmdCancel_Click() Unload frmNew End Sub

専門家に質問してみよう