質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Q&A

解決済

5回答

65999閲覧

VBA テキストボックスの値を持ってくる

sigret

総合スコア45

VBA

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

0グッド

0クリップ

投稿2018/03/16 06:59

現在マクロで「設定ファイル」に書かれている内容をXMLファイルに変換したい、という作業をしています。設定ファイルにシートが複数あり、テキストボックスにシート名を入力しそれをマクロ実行時に参照して中身を持ってくる、というやり方をしているのですがテキストボックスに記述しても取得ができません・・教えてください・・・。

Private Sub TextBox1_change() Dim Name As String Name = Worksheets("Sheet1").Forms.TextBox.Text End Sub Sub XML() ~(略) sheetname = TargetWorkbook.Worksheets(i).Name If _ sheetname = "Name" _ Then Set SaveWorkSheet = ActiveSheet ~(略)

初心者でごめんなさい・・。

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

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

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

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

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

guest

回答5

0

ベストアンサー

提示のコードや説明から推測すると、下記のような状況でしょうか。

ワークシート「Sheet1」上にActiveXのテキストボックスが配置してある。
そのテキストボックスの名前は「Textbox1」である。
このテキストボックスに入力してあるテキストをVBAから取得したい。

これであってますか。

テキストボックスはリボンの挿入タブにある「テキストボックス」オブジェクトの可能性もありますが、Private Sub TextBox1_change()というコードがあることからActiveXのテキストボックスのことと推測しました。

上記の推測があっているなら、

Worksheets("Sheet1").Textbox1.Text

で取得できます。

ちなにみ、提示の下記のコードは無意味ですね。
.Forms.TextBox.Text の間違いを .Textbox1.Text に修正したとしても、)

vba

1Private Sub TextBox1_change() 2Dim Name As String 3 Name = Worksheets("Sheet1").Forms.TextBox.Text 4End Sub

プロシージャローカルの変数 Name に代入しても、他から参照することはできないので。
変数の適用範囲(スコープ) | ExcelのVBA入門

ご希望のことが、

vba

1 If _ 2 sheetname = "Name" _ 3 Then

"Name"にテキストボックスの入力値を入れたいのなら、

vba

1 If sheetname = Worksheets("Sheet1").Textbox1.Text Then

となります。

おまけ

他の人の回答で提案されているコンボボックス(プルダウン)を使う方法も紹介しておきます。

ワークシート上にActiveXのコンボボックスを配置します。名前は、ComboBox1 と自動でつきます。
そのワークシートのモジュールに下記のコードを記述します。

vba

1Private Sub Worksheet_Activate() 2 Dim ws As Worksheet 3 4 With ComboBox1 5 .Clear 6 For Each ws In TargetWorkbook.Worksheets 7 .AddItem ws.Name 8 Next 9 End With 10End Sub

これで対象ワークブック(TargetWorkbook)のワークシート名がドロップダウンリストから選択できます。

投稿2018/03/17 01:38

編集2018/03/17 09:33
hatena19

総合スコア33699

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

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

0

Worksheetにはるテキストボックスっていくつかの種類がありますよね。
どれでしょう?

挿入の図形にあるテキストボックスはShapesとして管理されています。
Debug.Print Worksheets("Sheet1").Shapes("テキスト ボックス 1").TextFrame2.TextRange.Text

ActiveXコントロールのテキストボックスを張っている場合には、次の様な記述になります。
Debug.Print Worksheets("Sheet1").TextBox1.Text

ちなみにコントロールの名称は、コントロールを選択すると名前ボックス(ワークシートシート左上のドロップダウンテキストボックス)に表示されます。編集するときに、そこに入力してください。

投稿2018/03/17 00:54

Kunihiro_Narita

総合スコア472

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

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

0

worksheets,formsのように複数形になっているものは、worksheetやformの単体ではなくcollection(集まり)です。
集まりの中から1つを特定するためにindex(順番)、id、name(名前)といったものを指定する必要があります。

例えば、Worksheets("Sheet1")は、worksheetの集まりの中から"Sheet1"という名前で特定している訳です。

ところが、質問のコードでは、Forms のままなのでFormが特定されません。ここが問題だと思います。

Private Sub TextBox1_change() Dim Name As String Name = Worksheets("Sheet1").Forms.TextBox.Text End Sub

Worksheets("Sheet1")には Formが1つしかなくて、そのFormの中にはTextBoxが1つしかないと仮定すると、下記のように最初を意味するindexである (0)を付け加えることで動作するようになると思います。

Private Sub TextBox1_change() Dim Name As String Name = Worksheets("Sheet1").Forms(0).TextBox(0).Text End Sub

投稿2018/03/16 07:46

coco_bauer

総合スコア6915

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

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

sigret

2018/03/16 08:06

うーん・・・動かないです(泣 実行時エラー:オブジェクトは、このプロパティまたはメソッドをサポートしていません。 と出てしまいます・・。
guest

0

なぜテキストボックス?という疑問が他の回答者さんから出ていて私もそう思いますが、ここは純粋に回答してみたいと思います。
テキストボックスはActiveXコントロールのものしか使えないようなので、それを使っているものと思います。
開発メニューからデザインモードを選択した後、テキストボックスで右クリック→プロパティを選択してください。
プロパティウィンドウが開くのでオブジェクト名を確認してください。
例えばTextBox21のようになっていると思います。
あとはこの名前でコード上から参照すればよいだけです。

VBA

1Debug.Print TextBox21.Text

投稿2018/03/16 07:39

ttyp03

総合スコア16998

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

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

sigret

2018/03/16 07:51

えと、載せていただいたコードを If _ sheetname = "Name" _ Then の"Name"に書き換えるという認識であってましたか?
ttyp03

2018/03/16 08:23

あってませんねぇ。 Name = Worksheets("Sheet1").Forms.TextBox.Text ↓ Name = Worksheets("Sheet1").????.Text ????は実際のオブジェクト名にしてください。
guest

0

なぜテキストボックス??
入力規則のプルダウンで十分では?

それか、シート上のボタンを押すと、シート名の一覧を表示して、
ユーザーに選択してもらうとか。

5年間の開発経験では、シート名をテキストボックスに入力するという、
使いにくい仕様は考えた事もないですね・・・
※Excelの機能(今回ならプルダウン)を有効活用しないと、
Excelで開発するメリットが無くなります。。。

あと、↓ のような改行は非常に読みにくいです。。。
If _
sheetname = "Name" _
Then

※下記が推奨
If sheetname = "Name" Then
[インデント][処理]
Else
[インデント][処理]
End if

前途多難ですが、頑張ってください~学生さん

投稿2018/03/16 07:17

ExcelVBAer

総合スコア1175

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

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

sigret

2018/03/16 07:32

なるほど・・プルダウンでもできるんですか・・。(まだ設定ファイルのシート名が確定でないためテキストボックスを選択していました。) ありがとうございます!(本来の解決にはなっていませんが笑)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問