ExcelVBA TextBoxの値を取得できない
- Excel2010でUserFormを使用してTextBoxの値を取得しようとしていますが、値が取得できません。
- UserForm1とUserForm2において共通のプロシージャを使用してTextBoxの値を取得していますが、値が反映されません。
- Debug.Printを使用して値を確認した結果、UserForm1では値を取得できることが判明しました。
- ベストアンサー
ExcelVBA TextBoxの値を取得できない
Excel2010です。 2つのUserFormがあり(UserForm1・UserForm2とします)、UserForm1にはTextBox1~100を配置し、UserForm2にもTextBox1~150を配置しています。 それぞれのUserFormにおいて、そのUserForm名を変数に格納しておき、TextBoxの値を取得するコードを別のプロシージャ(「TextBoxチェック」)に書き、それを呼び出してTextBoxの値を格納しようとしましたができませんでした。 該当箇所のコードは以下のとおりです。 Public UFName As String 'UserFormの名前 Sub UserForm1処理() Const Num = 100 UFName = "UserForm1" Call TextBoxチェック(Num) End Sub Sub UserForm2処理() Const Num = 150 UFName = "UserForm2" Call TextBoxチェック(Num) End Sub Sub TextBoxチェック(Num As Integer) Dim i As Integer Dim Con As Control With UserForms.Add(UFName) For i = 1 To Num Set Con = .Controls("TextBox" & i) Debug.Print Con.Name Debug.Print .Controls("TextBox" & i).Value (その他の処理のコードは省略) Next i End With End Sub 上のコードでは1つ目のDebug.Printの結果(TextBox名)は取得できていますが、2つ目のDebug.Printの結果(TextBoxの値)は空欄になってしまいます。 つまり、 With UserForms.Add(UFName)が、 Set Con = .Controls("TextBox" & i) では反映されているのに、 .Controls("TextBox" & i).Value では反映されていないということだと思います。 また、 Debug.Print .Controls("TextBox" & i).Value を Debug.Print UserForm1.Controls("TextBox" & i).Value とすると、UserForm1の値を取得できます。 また、 With UFName_UF を With UserForm1 にすると、 Debug.Print .Controls("TextBox" & i).Value の値は取得できます。 UserForm1とUserForm2において、TextBoxの値を取得する部分は共通しているため、その部分を別プロシージャにして呼び出して処理したいのですが、うまくいきません。 TextBoxの値を取得できない理由や、対処法が分かれば教えていただきたいです。
- diamond_cutter
- お礼率71% (10/14)
- Excel(エクセル)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>対処法が分かれば教えていただきたいです。 参考に Option Explicit Dim myForm1 As UserForm1 Dim myForm2 As UserForm2 Sub UserForm1起動() Set myForm1 = UserForms.Add("UserForm1") myForm1.Show (vbModeless) End Sub Sub UserForm2起動() Set myForm2 = UserForms.Add("UserForm2") myForm2.Show (vbModeless) End Sub Sub UserForm1処理() Const Num = 100 Call TextBoxチェック(myForm1, Num) End Sub Sub UserForm2処理() Const Num = 150 Call TextBoxチェック(myForm2, Num) End Sub Sub TextBoxチェック(ByVal UserFormObj As Object, Num As Integer) Dim i As Integer Dim Con As Control With UserFormObj For i = 1 To Num Set Con = .Controls("TextBox" & i) Debug.Print Con.Name Debug.Print .Controls("TextBox" & i).Value Next i End With End Sub
その他の回答 (1)
- watabe007
- ベストアンサー率62% (476/760)
こんにちは まず下記のコードを実行してください。 Private Sub CommandButton1_Click() Dim myForm As UserForm1 Set myForm = UserForms.Add("UserForm1") myForm.Show (vbModeless) End Sub コマンドボタンを押す毎にUserForm1が作成されるのが 確認できたかと思います。 >With UserForms.Add(UFName) >For i = 1 To Num >Set Con = .Controls("TextBox" & i) >Debug.Print Con.Name >Debug.Print .Controls("TextBox" & i).Value ここでUserForms.Add(UFName)を実行することで TextBoxに値の無い新たなUserForm1を参照しているのでは
関連するQ&A
- ExcelVBAで複数のTextBoxから値取得
ExcelVBA初心者です。 複数のTextBoxから値を取得し、 その値を使って計算と文字連結を行なったものを セルに挿入したいのですが、 値の取得からできていないようです。 Dim optData(5) As Integer '入力データ Dim i As Integer 'カウンタ UserForm1.Show '4つのTextBoxのあるオブジェクト表示 For i = 1 To 4 '値取得 optData(i) = UserForm1.Controls("TextBox" & i).Value '確認用 MsgBox optData(i) Next i この方法だとTextBoxの値は取得できないんでしょうか。 教えてください。
- ベストアンサー
- Windows系OS
- コントロールのタイプを取得したい場合
Sub test() Dim i As Integer Dim StrFormName As String StrFormName = "UserForm1" With UserForms.Add(StrFormName).Controls For i = 0 To .Count - 1 Debug.Print .Item(i).Name Next End With End Sub これでエクセルのユーザーフォーム上のすべてのコントロール名が取得できるのですが、 コントロールのタイプを取得したい場合、 Debug.Print .Item(i).Name の部分をどう変えればいいのでしょうか? 例えばコマンドボタンなら、「CommandButton」と返ってきてほしいです。 Debug.Print .Item(i).Controlstype でも Debug.Print .Item(i).Controltype でもエラーになりました。
- ベストアンサー
- Excel(エクセル)
- ExcelVBA スピンボタンの値について
参考書を片手に勉強中のエクセルVBA初心者です。 ぜひアドバイスをお願いします…! Excel2000でユーザーフォームを作成し、スピンボタンを使用して数値を指定できるよう、以下のソースを記述しました。 ----------------------------------------- Private Sub UserForm_Initialize() With SpinButton1 .Min = 20 .Max = 150 .Value = 150 .SmallChange = 5 End With End Sub ----------------------------------------- Private Sub SpinButton1_Change() TextBox1.Value = SpinButton1.Value / 10 End Sub ----------------------------------------- Private Sub TextBox1_Change() TextBox1.Text = Format(TextBox1.Text, "0.0") End Sub ----------------------------------------- これを、スピンボタンも使用でき、かつ手入力にも対応するように動作させたいと考えています。 具体的にはテキストボックスに6(ランダムな値)と手入力後、 スピンボタンを使用してで6.0の値から増減させたいのですが、 そのようなことは可能でしょうか? 可能であれば、どのようにすればよいのでしょうか? (テキストボックス内の値は、小数点第1位まで表示させ、2.0~15.0の値しか表示できないようにしたいです) どうかご回答よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- VBAで最終行の取得について
UserFormのConboBoxで「○○」を選んで、 UserFormのTextBoxで『あいう』と入力すると、ワークシートに A B 1 ○○ ×× 2 あいう と表示され、 UserFormのConboBoxで「××」を選んで、 UserFormのTextBoxで『アイウ』と入力すると A B 1 ○○ ×× 2 あいう アイウ 3 : : と表示されるようにしたいと思います。 以下のプログラムまではできています。 ********************************************* Private Sub UserForm_Initialize() Dim lasClm As Integer, i As Integer lasClm = Sheet1.Range("A1").End(xlToRight).Column For i = 1 To lasClm ComboBox1.AddItem Sheet1.Cells(1, i).Value Next i End Sub ********************************************* Private Sub CommandButton1_Click() Select Case ComboBox1.Text Case Sheet1.Cells(1, 1).Value '「○○」が選択 Sheet1.Cells(2, 1).Value = TextBox1.Text ・・・(1) Case Sheet1.Cells(1, 2).Value '「××」が選択 Sheet1.Cells(2, 2).Value = TextBox1.Text ・・・(2) End Select UserForm1.Hide End Sub ********************************************** 今は(1)、(2)のように直接セルを指定しているのですが、 この部分を各列(A列、B列)の最終行の値を取得して、 最終行+1のセルに順次TextBoxに入力された値を代入していきたいのですが、 どのようにしたらよいのでしょうか。 しかし、A列とB列は同じように値が増えていくとは限りません。 例) A B 1 ○○ ×× 2 あいう アイウ 3 かきく 4 さしす となる場合もあるので、A列とB列それぞれの最終行の値を取得したいと思っています。
- ベストアンサー
- Visual Basic
- エクセル 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
- ベストアンサー
- オフィス系ソフト
- 値渡しについて
UserForm1で以下のように求めた値「R」を UserForm2に渡すにはどのようにすればよいのでしょうか。 **************************************** <UserForm1(コード)> Public R As Integer ----------------------------------- Private Sub CommandButton1_Click() Dim N As Integer : N = TextBox1.Text R= N * 2 + 3 : End Sub **************************************** <UserForm2(コード)> Private Sub CommandButton1_Click() Dim i As Integer : For i = 4 To R : Next i : End Sub **************************************** どなたか教えて下さい。
- ベストアンサー
- Visual Basic
- UserFormのTextBoxに入力した値を保存する方法がありますか
UserFormのTextBoxに入力した値を保存する方法がありますか? 具体的には、UserFormのTextBoxに2010/6/10と入力したときに シートのセルT13に表示されるように以下のマクロを作成しました。 Private Sub CommandButton1_Click() Range("T13").Value = 日付.Value If CloseMode = vbFormControlMenu Then Cancel = True Me.Hide End If End Sub 再度UserFormを開くと前の入力内容があるのですがExcelを保存 して閉じて再度シートを開くと空白になってしまいます。 UserFormを開いたタイミングで出力させたT13の値を返すという ようなマクロにするにはどうしたらよいでしょうか。 初心者なので詳しく教えていただけませんか。
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- Visual Basic
- アクセスVBA 一個前や一個後の値を取得するには
フォームの中にあるサブフォームの現在選択中のレコードの値を取得は出来たのですが 一個前や一個後の値を取得するにはどうすればいいですか? Sub test() Debug.Print Forms("F_Main").Controls("F_SubMain").Form.Filter Debug.Print Forms("F_Main").Controls("F_SubMain").Form.Controls("日付") End Sub で、現在のレコードの情報は取得できましたが 上のレコード、下のレコードを取得するコードを教えてください。
- ベストアンサー
- オフィス系ソフト
- Excel VBA セルの内容をTextBoxに
ExcelのVBAで質問があります。 複数のシートの表に入力した値の合計を出したいのですが、 その後の処理もあり、ユーザーフォームのテキストボックスに反映させたいと考えています。 Windows7のExcel2010で作っています。 試しにセルB1の値が変わった時、 テキストボックスに反映させるつもりで作ったコードは以下の通りですが、 上手くいきません。 Sub Z_test() UserForm2.Show vbModeless End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "B1" Then UserForm2.TextBox1.Value = Range("B1").Value '←※ End If End Sub ※の行には他にも UserForm2.Controls("TextBox1").Value = Range("B1").Value と調べたコードを試してみたのですが、 セルの内容が全く反映されません。 セルB1には数式の「=SUM(C2:C1000)」 が入っており、表のC列に入力された値の合計を求めています。 どなたかお知恵を拝借できれば大変助かります。 宜しくお願い致します。 長文失礼しました。
- ベストアンサー
- オフィス系ソフト
お礼
できました!ありがとうございました。