
よろしくお願いします
ユーザーフォームに決定ボタンで、テキストボックスを任意の数追加しました。
追加されたテキストボックスにD1.D2.D3.D4・・・と名前をつけ、それぞれに
1.2.3と数値を記入し、
登録ボタンをクリックした後ワークシートkeyplanの
指定したセルD30~G30へ代入させようとしたところ、
「変数が定義されていません」となってしまいます。
Nameの付け方が悪いのでしょうか。転機の仕方が悪いのでしょうか。
マクロを勉強し始めて日が浅いので、対処の方法がわかりません。
ご回答よろしくお願いします。
Option Explicit
Private Sub UserForm_Initialize()
worksheets("keyplan").Select
End Sub
Private Sub 決定_Click()
Dim txt As Variant
Dim i As Integer
'テキストボックスを配置
i = nyuryokubox()
For i = 1 To i
Set txt = Me.Controls.Add("Forms.Textbox.1", , True)
With txt
.Width = 20
.Height = 18
.Top = 300
.Left = 1 + (.Width + 80) * (i + 1)
.BorderColor = &H666666
.BorderStyle = fmBorderStyleSingle
.Font.Size = 15
.Name = "D" & i
End With
Next
End Sub
Private Sub 登録_Click()
With worksheets("keyplan").Select
.Range("D30").Value = D1.text
.Range("E30").Value = D2.text
.Range("F30").Value = D3.text
.Range("G30").Value = D4.text
End With
End Sub
変数 i にはテキストボックス(nyuryokubox)に直接数値を入れるようにしています

No.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
WindFaller様 ご回答ありがとうございました。
希望通りの結果が得られました。感激・感動です。
ご指導、ご指摘いただき誠にありがとうございました。
まだまだ勉強中ですので、またご質問させていただきますが、
よろしくお願いします。
No.1
- 回答日時:
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
他でもやってみましたが、違います?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのループ
-
文字列を配列に…。
-
EXCEL VBA UserForm のご質問
-
画面の繰り返し機能について
-
VC++のプログラミングについて
-
VB6→VS2005アップグレード後
-
テキストボックスかラベル上の...
-
C#のループでtextboxに値を入れ...
-
二点の座標から距離や角度を求...
-
VBについて教えてください。初...
-
VBA public変数はどのようなこ...
-
VB6でマウスのドラッグで範囲を...
-
visual basic初心者です。 visu...
-
Excel VBAでsub,dimは何の略?
-
エクセルVBAでテキストボッ...
-
演奏記号の・・・・
-
VB.NETでのイベントの途中終了
-
VBAで選択箇所がある場合の重複...
-
キャッシュを無効に
-
AccessのVBAで「イベ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスかラベル上の...
-
ExcelのVBAで文章にある複数の...
-
vba 日本語以外を抽出について
-
助けてください!
-
Visual Basicについてお聞きし...
-
VB2010 シリアル通信の文字列...
-
cshスクリプト内での”ヒアドキ...
-
VB.NET コンボボックスからのit...
-
XMLファイルのattribute値がう...
-
アクセスのフィールドに値をペ...
-
ボールの動きがスムーズに動い...
-
[VB6] SQLの作成について
-
VB6.0 sp5]テキストボックスと...
-
C++言語、国際符号翻訳プログラ...
-
vc++のAPI(dll)の引数をVBAでう...
-
【VBS】クリップボード操作につ...
-
LOTUS-123のユーザーフォームに...
-
Docmd.Openreportで範囲印刷を...
-
円頓章を現代語訳して下さい。
-
VBScript、ClipboardDataオブジ...
おすすめ情報