🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

3433閲覧

ユーザーフォームのテキストボックスに入力したデータをセルに反映したい。

ice930

総合スコア99

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/11/24 23:58

作成したユーザーフォーム(NForm)を表示した後、ボタン(adbtn)を押すと追加されるテキストボックスにデータを記載し、これをコマンドボタン Refbtn を押すことでセルへ反映させたいです。

以下のサイトを参考に作成しました。
https://excel-ubara.com/excelvba3/EXCELFORM007.html

現状として Refbtn の Cells(NRow, 1).Value = Me.KT1.Text で「メソッドまたはデータメンバーが見つかりません」と表示されてしまいます。

<シート上に配置されたコマンドボタンに登録したマクロ>※NFormを表示

Public NRow As Long Sub 新規登録() Dim Tit As String Tit = "初期設定" NRow = 2 Do While Tit <> "" Tit = Cells(NRow, 3) NRow = NRow + 1 Loop NRow = NRow - 1 NForm.Show vbModeless End Sub

<adbtnをクリックした時のコード>※項目とテキストを2行追加

Public Sub adbtn_Click() itm = itm + 1 With NForm With .Controls.Add("Forms.Label.1", "KL", True) .Top = 154 + 48 * itm 'Top位置(表示位置を移動する) .Left = 10 'Left位置 .Height = 20 '高さ .Width = 50 '幅 .BackColor = 25 '背景色 .BackStyle = 0 .ForeColor = 1 '文字色 .Font.Name = "メイリオ" 'テキストのスタイル .TextAlign = 2 'テキストの位置 .FontSize = 16 'テキストのサイズ .Caption = "項目" End With With .Controls.Add("Forms.TextBox.1", "KT" & itm, True) ' .Top = 154 + 48 * itm .Left = 70 'Left位置 .Height = 20 '高さ .Width = 250 '幅 .BorderStyle = fmBorderStyleSingle '枠線 .BackColor = RGB(255, 255, 255) '背景色 .ForeColor = RGB(0, 0, 0) '文字色 .Font.Name = "メイリオ" 'テキストのスタイル .TextAlign = 2 'テキストの位置 .FontSize = 10 'テキストのサイズ .Text = "" '表示のテキスト End With With .Controls.Add("Forms.Label.1", "PL", True) .Top = 178 + 48 * itm 'Top位置(表示位置を移動する) .Left = 10 'Left位置 .Height = 20 '高さ .Width = 50 '幅 .BackColor = 25 '背景色 .BackStyle = 0 .ForeColor = 1 '文字色 .Font.Name = "メイリオ" 'テキストのスタイル .TextAlign = 2 'テキストの位置 .FontSize = 16 'テキストのサイズ .Caption = "内容" End With With .Controls.Add("Forms.TextBox.1", "PT" & itm, True) .Top = 178 + 48 * itm .Left = 70 'Left位置 .Height = 20 '高さ .Width = 250 '幅 .BorderStyle = fmBorderStyleSingle '枠線 .BackColor = RGB(255, 255, 255) '背景色 .ForeColor = RGB(0, 0, 0) '文字色 .Font.Name = "メイリオ" 'テキストのスタイル .TextAlign = 2 'テキストの位置 .FontSize = 10 'テキストのサイズ .Text = "" '表示のテキスト End With .ScrollBars = fmScrollBarsBoth '垂直、水平両方を表示 .ScrollHeight = 202 + 48 * itm '高さ .ScrollWidth = 800 '幅 End With End Sub

<Refbtnをクリックした時の処理>

Public Sub Refbtn_Click() With Worksheets("パスワード") Cells(NRow, 1).Value = Me.KT1.Text※ここでエラーが起きてしまいます! End With MsgBox "反映しました。" End Sub

Refbtnでは、一旦KT1のみ入力される様に作成しています。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/11/25 00:28

adbtn_Click()のitm = itm + 1のところでコンパイルエラーが出ました。
guest

回答2

0

ベストアンサー

ttyp03さん指摘の.がない点も修正する必要がありますが、
「メソッドまたはデータメンバーが見つかりません」エラーの原因は、Me.KT1.Text の部分ですね。

Controls.Addで動的に追加したコントロールは、Me.KT1では参照できません。これで参照できるはデザイン時に配置したもののみです。
Me.Controls("KT1").Textとすればエラーはでなくなります。


ちなみに、少し先回りしてヒントを出しておきますと、

Me.Controls() という参照法だと、テキストボックスが増えていった場合でも下記のような感じでループ処理できまず。

vba

1For i = 1 to itm 2 .Cells(NRow + i -1, 1).Value = Me.Controls("KT" & i).Text 3Next

投稿2020/11/25 04:55

編集2020/11/25 05:08
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ice930

2020/11/25 06:49

Controls.Addで作成したものの参照方法は異なるのですね! ありがとうございます! 一歩先の作業まで一気に捗りそうです!
guest

0

詳細は全然見ていませんが、、、
Withを使っているのにCellsの先頭に.がないからでは?

diff

1With Worksheets("パスワード") 2- Cells(NRow, 1).Value = Me.KT1.Text 3+ .Cells(NRow, 1).Value = Me.KT1.Text 4End With

投稿2020/11/25 00:56

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問