• ベストアンサー
  • すぐに回答を!

エクセルVBA テキストボックス

いつもお世話になっております。 エクセルでVBAを使いユーザーフォームのテキストボックスで 文章入力をしようと思っているのですが、少しトラブルがありましたのでお教え願います。 エクセルシートの横がa~k、縦を9~34までのシートを結合して その中にテキストボックスで入力した文章を入れるように作っています。 MultiLineとEnterKeyBehaviorをTrueにして Private Sub CommandButton1_Click() Unload Me End Sub Private Sub TextBox1_Change() Sheets("sheet1").Range("a9") = UserForm1.TextBox1 End Sub Private Sub UserForm_Initialize() TextBox1.Value = Range("a9").Value End Sub Private Sub UserForm_Activate() With Me .Left = Application.Left .Top = Application.Top .Left = .Left + 350 .Top = .Top + 80 End With End Sub という状態になっているのですが、文章を入力して16行目で改行するとシートの方で「#VALUE!」と出てきてしまうので一旦ユーザーフォームを閉じてもう一度フォームを立ち上げると 「実行時エラー’-2147352571(80020005) Valueプロパティが設定できません。種類が一致しません。」 と出てきます。 デバッグすると  Private Sub CommandButton1_Click() → UserForm1.Show  End Sub と出てきます。 なにがおかしいのでしょうか? 今回初めてVBAを作っているので初歩的な間違いかもしれませんがよろしくお願いします

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

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

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

  • ベストアンサー
  • 回答No.1
  • imogasi
  • ベストアンサー率27% (4554/16300)

追体験しましたが、質問のようになりませんでした。とりあえず報告します。 >横がa~k、縦を9~34までのシートを結合して 横方向にA列からk列、縦方向に第9行から第32行まで、セルを (シートでなく)結合しているでしょう。 ーー 文章でも何がやりたいか、主なるものを書き添えてください。 今回はセルに入力しないでテキストボックスに入力して、セルの値にしたい、ですね。 ーー 私がやったら、質問の状況になりませんでした。(セル結合は小範囲でテストしましたが) 1行が長い文章でしょうか。 ーー それで 消去法で (1)セル結合をやめる (2)Private Sub UserForm_Activate() をやめる。課題の本質と関係ないと思うので。 (3)Private Sub UserForm_Activate() をやめる (4)1行を短い文章にして、16行目で同じになるか。 をやって、どうなるか見てはどうでしょう。

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

質問者からのお礼

ご回答有難う御座います。 原因が解りました! 16行目  ではなく 255文字以上入力すると Value となっていました。 たまたま16行目が256文字目だった訳です・・・ で、 Private Sub TextBox1_Change() Sheets("sheet1").Range("a9") = UserForm1.TextBox1 End Sub の= UserForm1.TextBox1を= UserForm1.TextBox1.text にしたら解決しました。 文字制限があったなんて知りませんでしたw 有難う御座いました。

関連するQ&A

  • EXCEL VBAのユーザーフォーム上のテキストボックスの入力方法について

    すいません教えていただきたいことがあります。 EXCEL VBAのユーザーフォームについて、 コマンドボタンにタグを設定して、これにキーボードと同じ機能を持たせて テキストボックス内に入力することは可能でしょうか。 例えばコマンドボタンを「あ」~「ん」まで作り、それぞれのボタンに「あ」~「ん」までのタグを設定する。 Private Sub UserForm_Initialize() CommandButton1.Tag = "あ" CommandButton2.Tag = "い" ・・・・「ん」までボタンを作成する。 次に、 Private Sub CommandButton1_Click() TextBox1.Value = TextBox1.Value & CommandButton1.Tag End Sub Private Sub CommandButton2_Click() TextBox1.Value = TextBox1.Value & CommandButton3.Tag End Sub ・・・「ん」まで作成する。 この設定では、コマンドボタンのクリックで文字の追加はできますが、ボタンを押すと常に文字が一番後ろに追加されるため、 テキストボックスをクリックしても文章の途中に文字を挿入することが出来ません。 通常のキーボードの入力と同じようにテキストボックス内でクリックした箇所からコマンドボタンで入力を開始するような設定は可能でしょうか。 よろしくお願いします。

  • エクセルVBA「型が一致しません。」

    エクセルVBA「型が一致しません。」 ユーザーフォームの実行時に上記エラーが出ます。おそらく関係ありそうなコードが以下です。 ちなみにTextBoxはスピンボタンと併用して使用しています(そちらのコーディングには問題なし) Private Sub TextBox1_Change() Me.TextBox3.Value = Me.TextBox1.Value * Me.TextBox2.Value End Sub Private Sub TextBox2_Change() Me.Textbox3.Value = Me.TextBox1.Value * Me.TextBox2.Value End Sub Private Sub UserForm_Initialize() Me.TextBox3.Value = Me.TextBox1.Value * Me.TextBox2.Value 立て続けに質問してしまい申し訳ないですが何せ急いでいるもので・・・お願い致します

  • テキストボックスの文字列の変更

    windows7 excel2007でマクロ作成中の超初心者です。 エクセルファイルを開くと、ユーザーフォームが表示され そこにテキストボックスとコマンドボタンがあります。 ーーーユーザーフォームーーーーー Private Sub UserForm_Initialize() With TextBox1 TextBox1.Value = Range("Z1").Value End With End Sub ーーーテキストボックスーーーーー Private Sub TextBox1_Change() Range("Z1") = TextBox1.Value End Sub ーーーコマンドボタンーーーーー Private Sub CommandButton83_Click() Range("Z1").Value = TextBox1.Value ActiveWorkbook.Save End Sub 以上のコード四苦八苦して考えました。 そして、常にZ1の文字列が、表示され その文字列を変更して コマンドボタンをクリックすると、変更された文字列が表示されます。 自分の思うとおりにできました。 しかし、あまりに稚拙なコードで、特に ActiveWorkbook.Save なんていうコード使用したくないのです。 もっと効率的なコードはどうしたらよろしいでしょうか。

  • VBA初心者です。

    VBA初心者です。 ユーザーフォームにテキストボックスとコンボボックスを1つずつ作り、それらを Private Sub ComboBox1_Change()    TextBox1.Value = ComboBox1.Value End Sub というふうに繋いでるとき、テキストボックスにフォーカスをあてさせないようするため、 Private Sub UserForm_Initialize()    TextBox1.Enabled = False End Sub このようにしました。ここまでは問題ありません。質問したいことは、このときテキストボックスに表示させる文字が淡色になるのを防ぐ方法です。    TextBox1.Locked = True これを上に付け加えればうまくいきそうなのですが、うまくいきませんでした…。どなたか解決方法を教えて下さい。

  • 12個のCommandbuttonをスマートに

    はじめまして 2003 XP UserFormにCommandbuttonが12個あります。 Private Sub CommandButton1_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "1" Else: TextBox1.Value = TextBox1 & "1" End If End Sub Private Sub CommandButton2_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "2" Else: TextBox1.Value = TextBox1 & "2" End If End Sub Private Sub CommandButton3_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "3" Else: TextBox1.Value = TextBox1 & "3" End If End Sub Private Sub CommandButton4_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "4" Else: TextBox1.Value = TextBox1 & "4" End If End Sub Private Sub CommandButton5_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "5" Else: TextBox1.Value = TextBox1 & "5" End If End Sub Private Sub CommandButton6_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "6" Else: TextBox1.Value = TextBox1 & "6" End If End Sub Private Sub CommandButton7_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "7" Else: TextBox1.Value = TextBox1 & "7" End If End Sub Private Sub CommandButton8_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "8" Else: TextBox1.Value = TextBox1 & "8" End If End Sub Private Sub CommandButton9_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "9" Else: TextBox1.Value = TextBox1 & "9" End If End Sub Private Sub CommandButton10_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "0" Else: TextBox1.Value = TextBox1 & "0" End If End Sub Private Sub CommandButton11_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "00" Else: TextBox1.Value = TextBox1 & "00" End If End Sub Private Sub CommandButton12_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "000" Else: TextBox1.Value = TextBox1 & "000" End If End Sub  これをもっとスマートに出来ないでしょうか? 宜しくお願いします。

  • EXCEL VBA コードをスマートに

    EXCEL VBAのフォームで、 テキストボックスの値をあらかじめTextBox1に入力しておくコードを 書いてみました。 Private Sub UserForm_Initialize() TextBox1.Value = Cells(4, 1) & Cells(4, 3) & Cells(4, 5) & Cells(4, 7) & Cells(6, 1) & Cells(6, 3) & Cells(6, 5) & Cells(6, 7)Cells(8, 1) & Cells(8, 3) & Cells(8, 5) & Cells(8, 7).Value End Sub 実際はもっと長いです・・・ どうしたら、スマートに記述できますか? お知恵をお貸しください!!!

  • エクセルVBA「スピンボタン」について

    エクセルVBA「スピンボタン」について スピンボタンとテキストボックスを組み合わせて Private Sub SpinButton1_Change() Me.TextBox1.Value = Me.SpinButton1.Value End Sub Private Sub UserForm_Initialize() With Me.SpinButton1 .Min = 1 .Value = .Min End With Me.TextBox1.Value = Me.SpinButton1.Min End Sub というコードを書きました。 「1、2、3、・・・10、11、・・・」という数の増加を「01、02、03・・・10、11・・・」という風にしたいのですがどのようにコーディングすればよいのでしょうか?お願いします。.

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • EXCEL VBAのユーザーフォームのコマンドボタンでBSキーと同様の役割を持たせる方法について

    すいません、EXCEL VBAで教えていただきたいことがあります。 EXCEL VBAでユーザーフォームを作る。 フォーム内にはTextBox1とCommandButton1を設置。 TextBox1に書き込んだ文字をドラッグ →CommandButton1を押す →ドラッグした文字を消去 という機能をコマンドボタンに持たせたいのですが 可能でしょうか。 下記のコードを作ってみたのですが、やはりこれだと一文字づつしか消せません。 よろしくお願いします。 Private Sub CommandButton1_Click() Dim i As Integer With Me.TextBox1 i = .SelStart If i > 0 Then .Text = Left(.Text, i - 1) & Mid(.Text, i + 1) .SelStart = i - 1 End If End With TextBox1.SetFocus End Sub

  • Private Sub UserForm_Init

    いつもお世話になります。 Windws7 excell2010 です。 同一のシートに二つの「Private Sub UserForm_Initialize()」があるときにどう名前を変えればまたはどうすればいいかご指導願えませんか。 「Private Sub UserForm_Initialize()」が一つの時はE5のようにうまく作動してくれます。 E列に 売上の 「回収」のリスト Private Sub UserForm_Initialize() F列に 何時の 「売掛月」のリスト(1&#65374;12の数字) Private Sub UserForm_Initialize() A列に =IF(B2="","",TEXT(B2,"mm")) 参考に下記します。 &#65374;1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "振込" .AddItem "現金" .AddItem "小切手" End With End Sub &#65374;2 Private Sub UserForm_Initialize() With ComboBox2 .AddItem "10" .AddItem "11" .AddItem "12" End With End Sub '**************** '設定 '**************** Private Sub CommandButton1_Click() y = 2 Do While Cells(y, 2) <> "" y = y + 1 Loop Cells(y, 2) = TextBox1.Text Cells(y, 3) = TextBox2.Text Cells(y, 4) = TextBox3.Text Cells(y, 5) = ComboBox1.Text Cells(y, 6) = ComboBox2.Text UserForm2.TextBox1.Text = "" UserForm2.TextBox2.Text = "" UserForm2.TextBox3.Text = "" UserForm2.ComboBox1.Text = "" UserForm2.ComboBox2.Text = "" UserForm2.TextBox1.SetFocus End Sub