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

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

ただいまの
回答率

89.08%

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

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 39K+

sigret

score 45

現在マクロで「設定ファイル」に書かれている内容を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
~(略)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

0

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

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

これであってますか。

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

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

Worksheets("Sheet1").Textbox1.Text

で取得できます。

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

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

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

ご希望のことが、

            If _
                sheetname = "Name" _
            Then

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

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


となります。

おまけ

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

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

Private Sub Worksheet_Activate()
    Dim ws As Worksheet

    With ComboBox1
        .Clear
        For Each ws In TargetWorkbook.Worksheets
            .AddItem ws.Name
        Next
    End With
End Sub

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/16 16:32

    なるほど・・プルダウンでもできるんですか・・。(まだ設定ファイルのシート名が確定でないためテキストボックスを選択していました。)

    ありがとうございます!(本来の解決にはなっていませんが笑)

    キャンセル

0

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

Debug.Print TextBox21.Text

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/16 16:51

    えと、載せていただいたコードを
    If _
    sheetname = "Name" _
    Then

    の"Name"に書き換えるという認識であってましたか?

    キャンセル

  • 2018/03/16 17:23

    あってませんねぇ。
    Name = Worksheets("Sheet1").Forms.TextBox.Text

    Name = Worksheets("Sheet1").????.Text

    ????は実際のオブジェクト名にしてください。

    キャンセル

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 17:06

    うーん・・・動かないです(泣

    実行時エラー:オブジェクトは、このプロパティまたはメソッドをサポートしていません。

    と出てしまいます・・。

    キャンセル

0

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.08%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る