• ベストアンサー
  • 困ってます

EXCEL VBAについて、ワークシート上に置いたTextBoxに値を入れる方法について

すいませんEXCEL VBAについて質問があります。 エクセルのワークシート上にコントロールツールボックスから テキストボックスを2つ、コマンドボタンを1つ設置する。 アクティブになっているテキストボックスに”goo”という値を入れる。 これをVBAで処理するにはどうしたらよろしいのでしょうか。 ユーザーフォームのテキストボックスであれば Private Sub CommandButton1_Click() Dim i As Object Set i = ActiveControl If TypeOf i Is MSForms.TextBox Then i.Text = i.Text & "goo" End If Set i = Nothing End Sub これでできるはずですが、シート上に置くテキストボックスだと うまくいきません。 よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数3195
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.3

Getfocusイベントで対応しては いかがですか? 例 当該シートに Textbox1 Textbox2 Commandbutton1 が配置されていた場合で考えます。 シートモジュールに Option Explicit Private atobj As Object Private Sub CommandButton1_Click()   If TypeName(atobj) = "TextBox" Then   atobj.Text = atobj.Text & "goo"   End If End Sub Private Sub TextBox1_GotFocus()   Set atobj = TextBox1 End Sub Private Sub TextBox2_GotFocus()   Set atobj = TextBox2 End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range)   Set atobj = Nothing End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お返事が遅くなり大変申し訳ございません。 やりたかった処理が出来ました。ありがとうございます。 Getfocusイベントを知らなかったので勉強になりました。 またよろしくお願いいたします。

関連するQ&A

  • EXCEL VBA フォームコード簡素化

    EXCEL VBAのフォームにテキストボックスを複数作成しております。 下記のように複数のテキストボックスで同じ処理を行うのですが コントロール→ループか何かで簡素化できないでしょうか? Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox17.Value = Format(TextBox17.Value, "0.00") End Sub Private Sub TextBox18_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox18.Value = Format(TextBox18.Value, "0.00") End Sub Private Sub TextBox19_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox19.Value = Format(TextBox19.Value, "0.00") End Sub Private Sub TextBox20_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox20.Value = Format(TextBox20.Value, "0.00") End Sub Private Sub TextBox21_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox21.Value = Format(TextBox21.Value, "0.00") End Sub Private Sub TextBox22_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox22.Value = Format(TextBox22.Value, "0.00") End Sub 以上お力添えお願いいたします。

  • EXCEL VBAにてのワークシート作成

    エクセルのVBAにてワークシートを作成することで困っています。 自分で書き込んだのは Private Sub CommandButton1_Click() Worksheets("原紙").Copy ActiveSheet.Name = TextBox1 Worksheets.Add After:=Worksheets(2) End Sub Private Sub UserForm_Initialize() TextBox1 = Format(Date, "yy.mm.dd") End Sub 実行したいことはCommandButton1クリック時に 左から2番目にあるワークシート 原紙を テキストボックス1に入力されている(日付) 名前を付けて左から3番目に新規で作成したいのですが 思うように動かずエラーが出てしまいます。 どの様に修正すれば宜しいでしょうか? またクリック時にすでにテキストボックス1と同じ 名前のワークシートが存在した場合はそのワークシートを Activeにしたいのですがどの様に書き込めば宜しいでしょうか? 重ね重ねですが宜しくお願いいたします。

  • exel vba ワークシートデータを日付にしたい

    ワークシートからFIND関数でID検索し、生年月日の検索値をテキストボックスに表示します。 過去データがない場合は日付形式で入力を促すため、日付形式でない場合誕生日EXITでエラーメッセージを表示させます。 過去データがあった場合はワークシートからデータを表示するのですが、ワークシートの日付データが25897のような数値で表示されるのでエラーになります。 ワークシート自体には日付形式で入力されていても、フォームにVBAで値を引っ張ると数値になってしまいます。数値を日付データに戻して表示はどうすればよいでしょうか? ’IDを入力した後のBVAです。 ************************************************************************************************* Private Sub TextBoxID_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim FRange As Range If TextBoxID.Text = "" Then Exit Sub End If ID = TextBoxID.Text On Error GoTo ErrHdl Worksheets("data").Activate With ActiveSheet Set FRange = .Range("b2:b65536").Find(ID, LookIn:=xlValues, LookAt:=xlWhole) If FRange Is Nothing Then MsgBox "新規です" Exit Sub End If TextBoxシメイ.Value = FRange.Offset(0, 1).Value TextBox誕生日.Value = FRange.Offset(0, 2).Value sex = FRange.Offset(0, 3).Value If sex = "M" Then OptionButton男.Value = True Else OptionButton女.Value = True End If TextBox体重.SetFocus End With Exit Sub ErrHdl: MsgBox "エラー" & Err.Number & Chr(13) & Err.Description End Sub *********************************************************************************************** Private Sub TextBox誕生日_Exit(ByVal Cancel As MSForms.ReturnBoolean) If IsDate(TextBox誕生日.Text) = False Then MsgBox "日付型データで入力.ex:H10/5/5" TextBox誕生日.Value = "" Else Exit Sub End If End Sub

その他の回答 (2)

  • 回答No.2
  • xls88
  • ベストアンサー率56% (669/1189)

ActiveSheet.TextBox1.Value = "あいうえお" ActiveSheet.TextBox1.Select Selection.Object.Value = "あいうえお"

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • xls88
  • ベストアンサー率56% (669/1189)

ActiveSheet.OLEObjects("TextBox1").Object.Value = "あいうえお"

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクセルVBAについて質問です。

    エクセルVBAについて質問です。 ユーザーフォームのテキストボックスに数字以外を入力するとエラーメッセージが出るように関数を作ったのですが、 Private Function AA(objtextbox As MSForms.TextBox) As Boolean Dim A As String AA = False A = Trim(objtextbox.Text) If objtextbox.Text <> "" Then If IsNumeric(A) = False Then MsgBox "数値 Error", vbCritical With objtextbox .SetFocus .SelStart = 0 .SelLength = Len(.Value) End With AA = True End If End If End Function Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub テキストボックス200近くある場合、1つ1つに Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub と作っていかなくてはいけないのでしょうか? プロシージャ名に変数使おうとしたら上手くできませんでした。 どなたか助けてください。

  • テキストボックス2列の値をシート1AB列に入力

    実行2クリックで2列のテキストボックス1&#65374;7の値をsheet1のA列、テキストボックス11&#65374;17の値をB列に入力したいのですが下記の方法にどうコード追加していいのかわかりません。どなたかコードが解る方よろしくお願いします。 Private Sub 実行2_Click() For i = 1 To 1000 If Sheet1.Cells(i, 1.Value = vbNullString Then: Exit For Next For Each o In UserForm1.Controls Dim c As MSForms.Control Set c = o If c.Name Like "TextBox*" Then Dim t As MSForms.TextBox Set t = c If t <> vbNullString Then Sheet1.Cells(i, 1.Value = t i = i + 1 t = vbNullString End If End If Next End Sub

  • エクセルVBAでテキストボックスの値の取得と変更について

    エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。 環境:WindowsXPでオフィス2002 状況: エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C) エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい 試した事: コントロールを配置したシートに次のマクロ TEXTBOX_C.Text = "これはコントロールのテキストボックス" を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。 また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

  • TextBoxの値を使った計算式

    皆様、こんにちは。 いくつかのテキストボックスを含んでいるユーザーフォームを作りました。ユーザーがこれらのテキストボックスに入力したデータを使った式をあるセルに設定しようとしていますが、「#NAME?」というエラーメッセージが出てしまいます。コードは以下のように書いています。 Private Sub CommandButton1_Click() Range("P24").Value = TextBox8.Value Range("Z24").Formula = "=Val(TextBox8.Text)*37.86" Range("AA24").Formula = "=Val(TextBox8.Text)*57.86/1000*44/12" Range("AB24").Formula = "=Val(TextBox1.Text)*37.86/1000*0.25+Val(TextBox3.Text)/0.11*0.013+Val(TextBox4.Text)*/0.12*0.0076+Val(TextBox5.Text)/0.25*0.015+Val(TextBox6.Text)/0.31*0.017+Val(TextBox7.Text)/0.22*0.013"  Unload 軽油の消費量 End Sub 何方か詳しい方に正しい書き方を教えていただければ非常に助かります。 どうぞよろしくお願いいたします。

  • EXCEL VBAで・・・。

    テキストボックス34に入力した値を、ExcelのA列の値より検索し その隣の値をテキストボックス4に表示させる、と言う処理をしています。 検索時に検索データが見当たらない場合、メッセージボックスを表示し、 更に、テキストボックス34のデータを消去→テキストボックス34にフォーカス移動 させたいのです。 下記のコードですと、メッセージボックス表示と テキストボックス34のデータ消去までは出来るのですが フォーカス移動してくれません。 イベントをexitにしている理由は特にないのですが、changeを使うと、 テキストボックス34に1文字入力された時点でメッセージボックスが表示されたり、 1文字でも一致するデータが順に表示されてしまいます。 (テキストボックス34に入力するデータの文字数は3文字固定です。) 何か良いお知恵がありましたら、お教え下さい。 ----------------------------------------------------------- Private Sub Textbox34_exit(ByVal Cancel As MSForms.ReturnBoolean) Dim Result As Variant Set Result = Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True) If Result Is Nothing Then MsgBox ("入力されたコードは登録されていません。") TextBox34.Text = "" TextBox34.SetFocus Else Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True).Activate ActiveCell.Offset(0, 1).Select TextBox4.Text = ActiveCell.Value End If End Sub

  • Excel VBA SetFocus

    環境:Excel 2002です UserForm1での質問です Flame5にTextBox14とTextBox15があります TextBox14とTextBox15のBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)後 Flame2にあるTextBox1にSetFocusしたいのですがエラーが発生します 実行時エラー 2147467259(800004005) 異なるFlameにSetFocusする方法があるのでしょうか? Flame5の中でTextBox14及びTextBox15のSetFocusはできます TextBox14とのTextBox15のBeforeUpdateのプロシージャです Private Sub TextBox14_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox14.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox14.Text) Me.TextBox15.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If Me.TextBox1.SetFocus End Sub Private Sub TextBox15_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox15.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox15.Text) Me.TextBox14.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If UserForm1.TextBox1.SetFocus End Sub ご支援願います

  • エクセルVBA初心者です。

    エクセルVBA初心者です。 「テキストボックスとコマンドボタンを使って、シートのA列にあるセルの文字列を左から検索する」という事をやりたいのですが、うまくいきません。お教えください。ちなみにCtrl+Fではなく、VBAで。 Private Sub TextBox1_Change() Dim R As Range With ActiveWorkbook.Worksheets("Sheet名") Set R = .Columns(3).Find(Me.TextBox1.Value) End With If R Is Nothing Then MsgBox "該当セルなし" Else R.Activate End If Set R = Nothing End Sub としましたが、テキストボックス入力+Enterで出来てしまい、コマンドボタンが機能しません。また、BackSpaceやDelをすると、他のセルに飛んでしまいます。????

  • VBAのフォームでTextBoxがいっぱいある時

    Microsoft Excel 2000 for VBAのフォーム機能を使用して TextBox?に値が入力したらシートの指定したセルへ値が入るようにしたいんですが、 TextBoxがいっぱいあるため、以下のように非常に長いプログラムになってしまいました。 Private Sub TextBox1_Change() Sheets(sheetname).Cells(1, 横位置).Value = TextBox1.Value End Sub TextBox2~29は繰り返し Private Sub TextBox30_Change() Sheets(sheetname).Cells(30, 横位置).Value = TextBox30.Value End Sub 上手く配列化なんかでまとめる方法がありましたらアドバイスください。

  • TextBoxの値を複数シートのセルに記入する

    よろしくお願いします。 TextBoxの値を複数シートのセルに記入するようにしたいのですが 一つのシートにしか記入されません。 醜い構文ですみません。 Private Sub CommandButton1_Click() Dim a As Long Dim b As Long Dim f As Long Dim h As Long Dim c As Range Dim d As Range Dim e As Range Dim g As Range With Worksheets(Array("駐車状態", "材料", "外壁1", "外壁2", "屋根1")).Select Set c = Cells(1, 2) For a = 1 To 140 Step 7 Set c = Union(c, Cells(a, 2)) c = TextBox1.Value Next c.EntireRow.Select Set d = Cells(1, 4) For b = 1 To 140 Step 7 Set d = Union(d, Cells(b, 4)) d = TextBox1.Value Next d.EntireRow.Select Set g = Cells(2, 2) For h = 2 To 141 Step 7 Set g = Union(g, Cells(h, 2)) g = TextBox2.Value Next g.EntireRow.Select Set e = Cells(2, 4) For f = 2 To 141 Step 7 Set e = Union(e, Cells(f, 4)) e = TextBox2.Value Next e.EntireRow.Select End With End Sub

  • ExcelのVBAで質問です

    ワークシート上にコントロールのテキストボックスを置いています。 このテキストボックスの値(TextBox.Value)を別で作った標準モジュール内のサブプロシージャの中で 使うにはどのようにすればよいのでしょうか? 例として以下のようなプログラムです。 '■■■ Sheet1 ■■■ Dim ThisDate As String ThisDate = TextBox1.Value & "日" Private Sub CommandButton1_Click()    Call test End Sub '■■■ 標準モジュール ■■■ Sub test()    MsgBox ThisDate End Sub おわかりの方宜しくお願いします。