• ベストアンサー

VBAモジュール

いつもお世話になります。 1点目・これは、Private Sub を見やすくするため、とりあえず、モジュールに入れとけ、という使い方でいいのでしょうか。 2点目 下記うまくいきません。 Private Sub 消去 End Sub モジュールに sub 消去() テキスト数量 = "" (テキスト数量はテキストボックス) End Sub これってやっぱり、モジュールの使い方が間違っているのでしょうか?まあ~間違ってるから動かないんでしょうけど・・・モジュールについて解説と使用方法を教えて頂きたいです。 2点目の解決方法はPrivate Subにテキスト数量 = ""するしかないのでしょうか、消去の数・箇所(同じもの)が多いので、できれば何処かに纏めたいのです。こちらもお願いします。

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

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

>1点目・これは、Private Sub を見やすくするため、とりあえず、モジュールに入れとけ、という使い方でいいのでしょうか。 可能ですが、やってはダメです。 フォームに固有の処理(テキストボックスに値を設定する等)はフォーム内に記述しましょう。 汎用的に使える処理(例えば、何らかの金額の計算処理など)はモジュールに入れればいいかもしれません。(ソフトの作り方次第では、クラスモジュールに入れなければならないかもしれません。) フォーム内のPrivate Sub を見やすくするためには、同じフォーム内にもう一個 Private Sub を作成すればいいでしょう。 >2点目 下記うまくいきません。 sub 消去() フォームの名称.テキスト数量 = ""  End Sub とすべきでしょう。 複数のフォームetcに「テキスト残量」がある場合があるので。 先に書いたように、フォーム外のモジュールで、個々のフォーム内のテキストボックス等を直接操作するのは、あまり行儀のいいやり方ではありません。

keiri2002
質問者

お礼

御礼が遅くなりすいません。 解決しました。 有難うございます。

その他の回答 (1)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.2

2点目 >Private Sub >消去 >End Sub > >モジュールに >sub 消去() >テキスト数量 = "" (テキスト数量はテキストボックス) >End Sub 複数のフォームがあり全てのフォームがほぼデザインが同じでテキストボックスの名称を同じにしているのであれば以下のようにしてみては如何でしょうか。 ※こんな造りは、本当にあまりよろしくないと思います。 Private Sub   Call 消去(Me) '(*1) End Sub *1:Subを呼ぶ時は、見やすくするためにCallを記述した方が良いでしょう。 Public Sub 消去(frm as Form)   frm.テキスト数量 = "" (テキスト数量はテキストボックス) End Sub 解説:どのフォームのテキストボックスなのかを知らせる為に、フォームオブジェクトを渡します。

keiri2002
質問者

お礼

御礼が遅くなりすいません。 解決しました。 有難うございます。

関連するQ&A

  • 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 これを上に付け加えればうまくいきそうなのですが、うまくいきませんでした…。どなたか解決方法を教えて下さい。

  • VBA

    エクセルのVBAで下記のようにすると テキストボックス1=10,テキストボックス2=20の値を入力すると セル"A1"に1020と表示されます。合計を求めるにはどうすればよろしいですか?  ―・*・/は、正しい答えが表示されます。 Private Sub InputBtn_Click() Worksheets("Sheet1").Range("A1") = TextBox1.Text + TextBox2.Text End Sub

  • vba なのですが...

    EXCEL の VBA です ActiveX コントロールで テキストボックス があります その、テキストボックス のLostFocus時のイベントなんですが、 標準モジュールで書かれているソースを直接呼びたいです Private Sub TextBox1_LostFocus() から、callするのではなく、 直接 呼び出す方法はあるのでしょうか? おしえてください

  • 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 おわかりの方宜しくお願いします。

  • VBA フォームに入力された数値を検索条件としたい

    ど素人ですので、よろしくお願いいたします。 VBAでユーザーフォームのテキストボックスに入力された数値○○~○○という条件でエクセルのデータをフィルターをかけて検索する構文を書きたいのですが、フォームのコードと標準モジュールのコードをどう繋げたらよいのかわかりません。よろしくお願いいたします。 以下が途中まで書いた構文です。 モジュールコード Sub 抽出() Range("a4").AutoFilter field:=1, Criteria1:=">=■1", _ operator:=xlAnd, Criteria2:="<■2" End Sub フォームコード Private Sub 実行_Click() ■1(○○以上の数値が入るテキストボックスの構文) ■2(○○未満の数値が入るテキストボックスの構文) End Sub 全く違っているのかも知れませんが、フォームは無視してモジュールの■に数値を直接入れると正しく検索します。

  • エクセルVBA

    ユーザーフォームのテキストボックスに現在時間を表示し、表示を時計のように現在時刻を表示し続ける方法を教えてください。 以下は現在のコマンドです。 Private Sub txtTime_Change() End Sub Private Sub UserForm_Initialize() UserForm1.txtTime.Value = Time End Sub よろしくお願いします。

  • 同じマクロ名でも、違うモジュールならエラーにならな

    同じマクロ名でも、違うモジュールならエラーにならない? エクセルVBAについてご教授ください。 標準モジュールに ――――――――― Option Explicit Sub CommandButton1_Click() MsgBox "" End Sub Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― と同じマクロ名を2つ作ったら、コンパイルエラーになりますが、 上記のコードは一度消して、フォームモジュールに ――――――――― Private Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作り、 標準モジュールに ――――――――― Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作った場合は、エラーにならずにマクロを実行できました。 これは、フォームモジュールがPrivate Subだからでしょうか? フォームモジュールに1つ、 標準モジュールに1つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。

  • EXECEL VBA コマンドボタンからのモジュール呼び出し 

    お世話になります. Excelのワークシート上にコマンドボタンを表示させ, そのコマンドボタンを押下することで, 作成したモジュールを実行させたく思っています. 下記記述のUserFormの****の部分に, 作成した標準モジュールを呼び出す記述が必要と考えておりますが, 上手くいきません. ちなみに標準モジュールは完成済みです. Private Sub CommandButton1_Click() ***************** End Sub 有識者の方,ご存知の方がいらっしゃいましたらご教授願います.

  • VBA クラスモジュールについて

    http://www.excellenceweb.net/vba/class/what_vba_class.html を見ながらクラスモジュールの勉強をしているのですが 躓きました。 新規にクラスモジュールを挿入し オブジェクト名に果物売上と名付けました。 そこに、 Sub TEST() Dim Apple As 果物売上 Set Apple = New 果物売上 End Sub と入力しました。 そして標準モジュールを挿入し、 そこに Sub TEST() Dim Apple As 果物売上 Set Apple = New 果物売上 With Apple .名前 = "リンゴ" .価格 = 100 .在庫 = 20 .仕入数 = 50 End With With Apple Debug.Print .名前 End With End Sub を入力しました。 そして、デバッグすると 「Apple As 果物売上」の部分が コンパイルエラーになってしまいます。 全然クラスモジュールの使い方がわからないのですが どこを直せばいいのでしょうか?

  • エクセル VBA タブストップに対する質問2

    下記の「エクセル VBA タブストップに対する質問」に書き込みした者ですが、一難去ってまた一難です。又、暗雲が漂ってきました。 条件は下記といっしょで テキストボックスが1~5まであり、テキストボックス2~4まではデータが入っています。 全てのTabStopはTrue、TabIndexは順に1~5が入っています。 テキストボックス1に何もデータを入れないで、Enterが押された場合、 テキストボックス1をアクティブにしたいのですが、下記で質問した回答で動かしても、きちんと動いてくれません。 どうかご指導よろしくお願いいたします。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then 'ENTER If TextBox1.Value = "" Then TextBox1.SetFocus End If End If End Sub このコードでテキストボックス1に何も入れずにEnterを押すとテキストボックス2がアクティブになってしまいます。

専門家に質問してみよう