エクセルマクロで文字入力カウントする方法

このQ&Aのポイント
  • エクセルマクロを使ってテキストボックス内の文字入力をカウントする方法について質問です。
  • 24文字13行のテキストボックスを作成し、入力文字によって残り行数を表示するマクロを作成したいです。
  • しかし、次のマクロを設定すると、移動先のセルでエラーメッセージが表示されます。どのように対処すればよいでしょうか。
回答を見る
  • ベストアンサー

エクセルマクロのテキストボックスの質問です。テキストボックス内の文字を

エクセルマクロのテキストボックスの質問です。テキストボックス内の文字を24文字13行で設定します。文字を打つことにより残り行数をカウントできるようなマクロを作成したいと思い次のマクロを設定しましたがエラーがでます。対処方法わかりますか。 UserForm1のマクロは次の通りです。 Private Sub CommandButton1_Click() Me.Hide End Sub Private Sub TextBox1_Change() ato = 13 - TextBox1.linecounut Label1.ForeColor = 0 If ato <= 10 Then Label1.ForeColor = RGB(255, 0, 0) Label1.Caption = "あと " & ato & " 文字入力できます。" End Sub すると1回目は入力可能ですが,次のセルに移動するとこのようなメッセージが出てしまいます。 linecountのプロパティーを取得できません。このコントロールはフォーカスを持つ必要があります。setfoucusメソッドによってこのプロパティーまたhメソッドが参照される前にフォーカスに移動しました

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

  • ベストアンサー
  • takana_
  • ベストアンサー率44% (21/47)
回答No.1

ato = 13 - TextBox1.LineCount ↓ TextBox1.SetFocus ato = 13 - TextBox1.LineCount にしたらどうでしょうか?

関連するQ&A

  • エクセル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 これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

  • EXCEL VBA テキストボックスの文字で置換したい

    いつもお世話になっています。 エクセルのVBAでフォームをつくり、フォーム上のテキストボックスに入力した文字でデータ変換をしようと考えています。たとえば「東京」を「東京都」という具合です。 メニューから実行すれば良いだけの話なのですが 業務上、より作業を簡素化したいためです。 下記のようにマクロを記述しましたが、うまく動作しないのでどうしてでしょうか?よろしくお願いします。 Sub 文字を置き換える() Dim mae As String Dim ato As String Columns("H:H").Select mae = UserForm1.TextBox2.Value ato = UserForm1.TextBox3.Value Selection.Replace What:=mae, Replacement:=ato, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub

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

    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 なんていうコード使用したくないのです。 もっと効率的なコードはどうしたらよろしいでしょうか。

  • エクセルマクロのテキストボックスを選択したい

    こんばんわ! エクセルマクロのユーザーフォームのテキストボックスを選択したままにしたいのですが、どうしたらよいでしょうか? 具体的には テキストボックスに値を打ち込みテキストボックスから移動すると確定?するようにしています。(下のプログラム) Private Sub textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) msgbox "aaa",vbinformation endsub これが動作した後、またtextbox1を選択状態にしたいです。 アドバイスの程よろしくお願いいたします。

  • エクセル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を作っているので初歩的な間違いかもしれませんがよろしくお願いします

  • テキストボックスの数値を3桁ごとに区切りたい。

    テキストボックスの数値を3桁ごとに区切りたい。 エクセルのユーザーフォームにテキストボックスを1~7まで並べています。 テキストボックス1~6の合計を7に入れるようにしています。 テキストボックスに記入するVBAは以下のように投入しています。 合計は上手く表示されるのですが、3桁ごとに「,」の区切りを入れたいと思っています。 どのように記述したらよいのか、教えていただけないでしょうか。 -------------------------------------- Private Sub TextBox1_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox2_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox3_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox4_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox5_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox6_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub -------------------------------------- #次の文字を書くテキストボックスの情報に加えてみましたが、 合計が狂ってうまくいきませんでした。 TextBox1.Text = Format(TextBox1.Value, "#,##0") TextBox7.Text = Format(TextBox7.Value, "#,##0")

  • VB.NET フォーカスの位置をしる方法

    VB.NETにてWindowsMobile5.0の開発をしております。 下記のようにテキストボックスにフォーカスがきたら色を変える処理をしてますが、 テキストボックスがたくさんある場合どこがフォーカスされているか知ってテキストボックスなら色を変えると言う処理にしたいです。 何卒、ご教授のほどよろしくお願いします。 Private Sub T_ATO_GetFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T_ATO.GotFocus T_ATO.BackColor = Color.Aqua TextBox_ENT.Text = T_ATO.Text End Sub Private Sub T_ATO_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T_ATO.LostFocus T_ATO.BackColor = Color.White End Sub

  • 複数のテキストボックスのカンマ処理

    現在、ユーザーフォームに60個のテキストボックスを設置しています。 数値入力されるとカンマが付くようコードを書いているのですが、まとめて処理できるようなコードはないでしょうか? 現在… Private Sub TextBox1_Change() TextBox1.Text = Format(TextBox1.Text, "#,##0") End Sub Private Sub TextBox2_Change() TextBox2.Text = Format(TextBox2.Text, "#,##0") End Sub Private Sub TextBox3_Change() TextBox3.Text = Format(TextBox3.Text, "#,##0") End Sub これを60個 試しにfor~Nextで書いてみましたが、失敗しました。 Dim c As Integer For c = 1 To 60 Controls("TextBox" & c).Text = Format("TextBox" & c.Text, "#,##0") Next End Sub ご存知の方、お力を貸してください。 ウィンドウズ7のエクセル2013を使用しています。

  • TextBoxで4文字のみの文字数制限

    いつもお世話になります。 Win7 excell2010 です。 ご指導を仰ぎたいのは TextBoxに入力できる文字数を「4」文字以上もしくは以下も入力できないようにしたい。 4文字のみ可能に。 例えば 3文字(4文字以下) もしくは 5文字(4文字以上)の場合は入力はできない。 下記のマクロは5文字以上の時は4文字のみが表示されます。 Private Sub TextBox1_Change() If Len(TextBox1.Text) > 4 Then TextBox1.Text = Left(TextBox1.Text, 4) End If End Sub プロパティ設定 MaxLengthプロパティで 4

  • テキストボックス内の簡単な計算

    はじめまして、よろしくお願いいたします。 エクセル(2003)のマクロで質問です。 いくつか複数のテキストボックスが配置されています。 加算など簡単な計算をテキストボックス内で計算させていおいて、 最終的にボタンで、それら各々のテキストボックスに対応させた エクセルのシートのセルに代入させようとしています。 さて、テキストボックス内で簡単な計算をさせるため、 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = Evaluate(TextBox1.Text) End Sub Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2.Text = Evaluate(TextBox2.Text) End Sub Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox3.Text = Evaluate(TextBox3.Text) End Sub … とさせましたが、 何も入力がないテキストボックスは そのままなにもしなくていいよ、とさせたいですのですが、 上記のままだと、何もない(値が入力されていない) テキストボックスに到達すると 止まります。 何も入力がないテキストボックスは 何もしなくていいよ、は どうしたらよいでしょうか? 誠に不勉強で恐縮ですが ご教授願います。

専門家に質問してみよう