Excel VBA テキストボックスの値の取得

このQ&Aのポイント
  • Excel VBAを使用してテキストボックスの値を取得する方法について調べましたが、いくつかの方法を試してもエラーが発生します。
  • テキストボックスの名前には常に"txt"という文字が含まれており、ActiveShapеオブジェクトのメソッドを使用してテキストボックスの値を取得しようとしましたが、プロパティまたはメソッドがサポートされていないエラーが表示されます。
  • 他の方法を試しても同じエラーが発生するため、別のアプローチが必要かもしれません。
回答を見る
  • ベストアンサー

Excel VBA テキストボックスの値の取得

テキストボックスの値が必要となり参照しようと思い、検索したところdebug.printにある3つの方法がヒットし、試して見ましたが、エラーになります。 テキストボックスの名前にはどれもtxtの文字を含んでいます。 Sub ShapeValue() Dim Shp As Shape For Each Shp In ActiveSheet.Shapes If InStr(Shp.Name, "txt") <> 0 Then Debug.Print Shp.TextFrame.Characters.Text 'オブジェクトは、このプロパティまたはメソッドをサポートしていません。 Debug.Print Shp.TextFrame2.TextRange.Text '指定された値は境界を超えています。 Debug.Print Shp.ShapeRange.TextFrame.Characters.Text 'オブジェクトは、このプロパティまたはメソッドをサポートしていません End If Next Shp End Sub どうすれば取得できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.2

質問にある取得方法は挿入のテキストボックスで有効になります。 エラーになるという事はActiveXのテキストボックスだと思いますから Debug.Print ActiveSheet.OLEObjects(Shp.Name).Object.Text で試してみてください。

ebaeba2
質問者

お礼

ありがとうございます。 いただきました方法で、無事、値が取得できました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

こんなのテキストボックスの(普通はVBAで処理対象)の使い方と違うので、戸惑う。全般に説明不十分ではないか。VBAには経験あるようでもあるし、そうでもないようにも思う。 (1)目的が何なのか、どういう使い方をするつもり、なのか (2)どこに、テキストボックスを張り付けたか?普通はUserFormやワークシートだが。 (3)普通は、そのコントロールのイベントの発動を捉えて、テキストボックスの値を取るのだが、そういうのではないらしい。 私なりに、やってみた。下記のような説明と+目的が、もともと必要では。 ーーー Sheet1で 挿入 図形 四角形 名前ボックスに「正方形/長方形1」とでているのを、「ボックス1」に変更 3つ繰り返す。ボックス1,2,3とした ーー 1つ目右クリック テキストの編集 123 2つ目以降も同様に別数字や文字列をセット。 ーーー 標準モジュールに Sub test01() For Each sp In Worksheets("Sheet1").Shapes MsgBox sp.Name MsgBox sp.TextFrame.Characters.Text Next End Sub これを実行すると,ボックス1と123などが出た。 こういうのはくだらないと思うが、質問者のやったことと、どう違うのか。 が説明されていない

  • panja2021
  • ベストアンサー率12% (5/40)
回答No.1
ebaeba2
質問者

補足

もっとシンプルに次のようなのを試してみました。 Sub ShapeValue() Dim mySh As Worksheet Debug.Print Sheets("受注").txt受注番号.Value '値が正常に取得可能 Set mySh = Sheets("受注") Debug.Print mySh.txt受注番号.Value 'メソッドまたはデータメンバーが見つかりません。 End Sub Sheets("受注").txt受注番号.Value は値が取得できましたが、 mySh と Sheets("受注")は同等ではないのでしょうか?

関連するQ&A

  • エクセルVBAでテキストボックスに文字

    Excel2016です。 ワークシート上に配置した、図形の「テキストボックス」に文字を入れるVBAについての質問です。 下記のTEST01では期待通り文字が入りますが、これはテキストボックスをSelectしなければなりません。 TEST02ならSelectせずにOKかと思ったら実行時エラーとなりました。 どのように修正したらよろしいのでしょうか? Sub TEST01()   Sheets(“Sheet1”).Shapes.Range(Array("TextBox 3")).Select   Selection.ShapeRange.TextFrame2.TextRange.Characters.Text = "TEST/TEST/2020"   Selection.ShapeRange.TextFrame2.TextRange.Font.Name = "Meiryo UI"   Selection.ShapeRange.TextFrame2.TextRange.Font.Bold = msoTrue End Sub Sub TEST02()   With Sheets(“Sheet1”).Shapes.Range(Array("TextBox 3"))     .ShapeRange.TextFrame2.TextRange.Characters.Text = "TEST/TEST/2020"     .ShapeRange.TextFrame2.TextRange.Font.Name = "Meiryo UI"     .ShapeRange.TextFrame2.TextRange.Font.Bold = msoTrue   End With End Sub

  • エクセルVBAで、ユーザーボックスを開いたときにテキストボックスにセル

    エクセルVBAで、ユーザーボックスを開いたときにテキストボックスにセルの値を自動で表示させたいのですが、うまくいきません。テキストボックスをクリックすると表示されるのですが・・・    Private Sub txt1_Change() Sheets("Sheet1").Range("a1").Value=txt1.Value End Sub としたのですが、やはり間違いなのでしょうか?

  • テキストボックスかコンボボックスを条件としたい

    フォーム上のコントロールを取得する時に、 「テキストボックスかコンボボックスなら」としたいのですが、VBAコードがわかりません。 ************************************************************ Sub Sample() Dim myCtrl As Control Dim myForm As String myForm = "フォーム1" For Each myCtrl In Forms(myForm).Controls If myCtrlのタイプがテキストボックス Or コンボボックス Then Debug.Print myCtrl.Name End If Next End Sub ************************************************************ に修正していただけますか? ControlType プロパティを使うと思うのですが、使い方がわかりません。 ご回答よろしくお願いします。

  • オブジェクト名が同じ図形の変更

    アクティブセル値と同じオブジェクト名のテキストボックスが複数有ります。そのテキストボックスの大きさやテキスト(アクティブセル値と同じ)の内容に書き換えたいと思っています。 サイズとテキスト書き込みのステートメントをFor Eachで括りました。 途中にMsgboxを入れて確認するとボックスの数だけ繰り返しているのは間違いないのですが、変更できるのは1個だけです。 最初に作った(?)テキストボックスのみを何度も書き換えているのかな?と思っているのですが、複数個の変更をするにはどの様にしたらいいのでしょうか。 宜しくお願い致します。 Sub test() A = ActiveCell.Formula For Each shp In ActiveSheet.Shapes If shp.Name = A Then ActiveSheet.Shapes(A).Select Selection.ShapeRange.Height = 19.5 Selection.ShapeRange.Width = 19.5 With ActiveSheet.Shapes(A).TextFrame .Characters.Text = A End With With Selection.Font .Size = 7 End With End If Next shp End Sub

  • エクセルVBA 時刻の計算 テキストボックス

    お知恵をお貸しください。 入力を簡単にするためのユーザーフォームを作っています。 開始時間(txt開始)に「14:00」 終了時間(txt終了)に「19:00」と入力すると 時間(txt時間)は「5:00」(19:00-14:00=5:00) 通常(8:00~18..00)に「4」(4:00*24) 時間外(6:00~8:00、18:00~22:00)に「1」(1:00*24) 深夜(22:00~6:00) と表示させたく思います。 通常、時間外、深夜のテキストボックスに表示することができません。 よろしくお願いします。 Private Sub txt時間_Exit(ByVal Cancel As MSForms.ReturnBoolean) If txt開始 > TimeValue("8:00") And txt開始 < TimeValue("18:00") Then txt通常.Text = TimeValue(txt時間.Value) * 24 End If End Sub Private Sub txt終了_Exit(ByVal Cancel As MSForms.ReturnBoolean) txt時間.Value = Format((TimeValue(txt終了.Text) - TimeValue(txt開始.Text)), "h:mm") End Sub

  • 【.NET】WordのテキストボックスのCharactersを探しております

     こんにちは.  質問させていただきます.どうぞよろしくお願いいたします.  VB.NETからWordのテキストボックスをいじっております.  試しにExcelで動かしてみると,Shape.TextFrame.TextRange.Charactersで やりたいことができるのですが,Wordの場合,    Shape.TextFrame.TextRange. と    Shape.TextFrame.      のどちらにも Charactersが見つからないと言われ,悩んでおります. エラーメッセージは「公開メンバ 'Characters' は型 'Range' に見つかりませんでした。」 「公開メンバ 'Characters' は型 'TextFrame' に見つかりませんでした。」 です.  VB2008でWord2007をいじろうとしておりますが,もしお詳しい方が いらっしゃいましたら,アドバイスをいただけないでしょうか...  また,よく今回のようにメンバやプロパティを探すのに四苦八苦する ことがあるのですが,こんな風に調べるといいよ,みたいなのが もしもございましたら,皆様のお知恵を拝借いたしたくお願いいたします.  どうぞよろしくお願いいたします.

  • エクセル2007でVBAが動きません、助けて下さい

    先日、使用していたエクセルを2003から2007に変更した所、 オブジェクトのテキストが読み込めなくなってしまいました。 マクロの記録なども試したのですが、問題が解決せず 困っています。 原因が分かる方が入らしたら、ぜひとも教えてください。 =================================== Sub namae() Dim namae1 As String Dim namae2 As String namae1 = Application.Caller namae2 = ActiveSheet.Shapes(namae1).TextFrame.Characters.Text MsgBox namae2 End Sub

  • エクセルVBAでテキストボックスのフォントの色

    エクセル2016です。以下のコードで文字は赤になりますが、これをRGB方式ではなくColorindex=3で指定するにはどう書き直せばよろしいでしょうか? Sub TEST03() With Sheets("Sheet1").Shapes("TextBox 3").TextFrame2 With .TextRange .Text = "TEST/TEST/03" .Font.Name = "Meiryo UI" .Font.Bold = msoTrue .Font.Size = 16 .Font.Fill.ForeColor.RGB = RGB(255, 0, 0) .ParagraphFormat.Alignment = msoAlignCenter End With .VerticalAnchor = msoAnchorMiddle End With End Sub 別途、Sheets("Sheet1").Shapes("TextBox 1").TextFrame.Characters.Font.ColorIndex = 3 と書けば赤になりますが、Sub TEST03()のRGB = RGB(255, 0, 0)の代わりに指定する方法が知りたいのです。 よろしくお願いします。

  • テキストボックスにVBA

    excelのシートにスキャナで取り込んだ画像を貼り付け、その画像の上にさらに、いくつかのテキストボックスを貼り付けて文字を入力して使っております。 そこで、その中の一つのテキストボックスを、クリックするたびに(MS明朝でサイズ14の)○を表示したり消したり出来る様にしたいのです。 VBAを使うのかと思い、マクロの自動記録で挑戦してみましたが Sub テキスト1_Click() ActiveSheet.Shapes("Text Box 1").Select Selection.Characters.Text = "○" With Selection.Characters(Start:=1, Length:=1).Font .Name = "MS 明朝" .FontStyle = "標準" .Size = 14 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With End Sub となって、クリックで○は付けられますが、当然、更にクリックして消すという動きにはなりません。 ネットで拾ってきた、 If .Value = "○" Then   .Value = ""  Else   .Value = "○"  End If や、 Select Case Target.Value Case "": Target.Value = "○" Case "○": Target.Value = "" End Select なんてのを書き込んでみたりしたのですが、全く動きません。 もっとも今まで全くVBAをやった事がなかったので、よく意味もルールも分からないままの作業でしたので当然の結果でした。 VBAに興味が出てきましたので、更に勉強はしてみたいと思っておりますが、今現在の私には無理と判断いたしました。 どなたか、よろしくお願いいたします。

  • エクセルVBA テキストボックスへのセットフォーカスについて

    エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

専門家に質問してみよう