- ベストアンサー
EXCEL VBA UserFormの使い方|テキストボックスの追加とワークシートへの代入方法
- EXCEL VBA UserFormでテキストボックスを追加する方法と、テキストボックスに入力された値をワークシートに代入する方法について説明します。
- UserFormのInitializeイベントを使用して、テキストボックスを任意の数だけ追加します。
- 登録ボタンがクリックされた時に、テキストボックスに入力された値をワークシートの指定したセルに代入します。ただし、一部エラーが発生する可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >i = nyuryokubox() この部分は、いずれにしても、参照できませんね。 おそらく、既存のTextBpxで、ボタンで生成するTextBoxの数でしたら、nyuryokubox.Value や.Text プロパティだと思います。それは、配列です。 > For i = 1 To i i は、ループのカウンターに使っているのですから、i 自体は、数値型で、To (定数)ですから、別の変数(例:j = nyuryokubox.value として、For i = To j など)にしないと、ループは完成しません。初歩的なミスだと思います。 それから、TextBoxのプロパティ等を調べてみましたが、マクロから、オブジェクト名を変更できなかったようですから、D1.Text は使えませんね。 Controls("D1").Text 等でしかないようです。 登録_Click() Dim obj As Object Dim i As Long With Worksheets("keyplan") For Each obj In Me.Controls If obj.Name Like "D#" Then 'Dの付いた名前を探す i = i + 1 .Cells(30, i + 3).Value = Controls("D" & i).Text End If Next End With End Sub
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
Controls.Addで動的に追加されたオブジェクトは デザイナで追加したコントロールのように直接変数名での参照ができないようです 方法としては UserFormのクラス変数として Dim txt(1 to 3) as MSForms.TextBox などと宣言しておくか .Range("D30").Value = Controls("D1").Text といった具合に Controlsコレクションから間接的なアクセスになるようです
補足
redfox63様 早速ご回答いただきましてありがとうございます。 投稿して良かったと思っています。大変勉強になります。 >.Range("D30").Value = Controls("D1").Text でやってみたのですが、「オブジェクトが必要です」になってしまいます。 ちなみに、Text→text と頭文字が大文字にならないのも何か不具合の要因でしょうか? > UserFormのクラス変数として 経験が浅く的外れかもしれませんが、 Private Sub UserForm_AddControl(ByVal Control As MSForms.Control) Dim txt(1 To 3) As MSForms.TextBox End Sub 他でもやってみましたが、違います?
お礼
WindFaller様 ご回答ありがとうございました。 希望通りの結果が得られました。感激・感動です。 ご指導、ご指摘いただき誠にありがとうございました。 まだまだ勉強中ですので、またご質問させていただきますが、 よろしくお願いします。