アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAの処理の呼び出しの書き方で躓いています。

下記のような処理があります。

Private Sub txtBreakstart1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

If IsDate(Me.txtBreakstart1.Text) Then
If Not Me.txtBreakstart1.Text Like "*:*" Then
MsgBox "入力値が不正です。"
Cancel = True '更新をキャンセル
End If
Else
MsgBox "入力値が不正です。"
Cancel = True '更新をキャンセル
End If

End Sub

このtxtBreakstart1はテキストボックスなのですが、これが31まであります。
1の部分を2に3に・・と31まで一つ一つに変えてやれば良いのですが、それだと後から
コードを変更する際にとても時間がかかってしまいます。
まだよく理解してないのですが、こういう時にCallで処理を呼び出すのを使うのでしょうか・・?
オブジェクト名の数値だけが違う場合はどのように書けば好いのでしょうか。
メッセージボックスなどを呼び出す処理の例はよく見かけるのですが、それでもいまいちピンときませんでした。

A 回答 (4件)

こんにちは。



下記が参考になるでしょうか?

TextBox1の値はセルA1へ…TextBox10の値はセルA10へ
https://tripbowl.com/excel-vba/userform-textbox- …
    • good
    • 1
この回答へのお礼

ありがとうございます!!参考にします!

お礼日時:2021/10/13 17:30

イベントをまとめて扱う事もできますが、VBAではめんどくさいです。


なので、ちょっと考え方を変えましょう。

要するに入力チェックがしたいだけですよね?
であれば、そのタイミングを更新前にするのはどうでしょう。
入力チェック関数を用意して、その中で全てのテキストボックスをチェックする。

まぁ入力チェック関数が作れたなら、全てのテキストボックスイベントでそれを動かしてもいいんですけど。

入力チェック処理で検索すれば、いろいろ出てきます。

あと、コントロールをまとめて扱うことも出来るので、それも合わせて検索してみてください。
    • good
    • 1
この回答へのお礼

ありがとうございます!!
確かに更新の時にまとめて処理する方がスマートですね・・。

お礼日時:2021/10/13 15:32

例えばこんな方法も。



【ExcelVBA】クラスモジュールを使用してイベント処理を一元化しよう!
https://www.y-shinno.com/excel-nutcalc-increment …

VB.NETですと楽になっているのですけどね。
逆にそこまでのコントロールを並べて毎日アチコチと弄りまくる必要があるのでしょうか?
1日毎の入力・編集方法を見直して一ヶ月分の表示は別のコントロールを用いるのもありかもですよ。
    • good
    • 1
この回答へのお礼

ありがとうございます!
まさにそちらのページに書かれている通り、何度も同じイベントを書くのが面倒でして・・。参考にします!

お礼日時:2021/10/13 17:31

こんにちは


回答ではありません。

多くのコントロールに同じイベントを適用したいと言う事は分かりましたが
先に回答ささせて頂いたようなユーザーフォームの場合、処理プロセス自体を検討した方が後々楽ではないかと思いました。

このような事を書くと気分を害されるかもしれませんが、
ユーザーフォームの表示は連携なども出来ます。

EXCELを開く
Excelを非表示にしてユーザーフォーム①を表示
年月日をコンボボックスなどに分けて表示と共に設定
新規、訂正などのオプションボタンや入力者IDなども設置しても良いかも、、OKボタンを押す
ユーザーフォーム①をアンロード、
対象日付の入力項目分のテキストボックスなどを配置したユーザーフォーム②を表示
入力チェック、実行ボタンで実行

修正作業も同様、

印刷、全体表示はシート表示やPDF出力、、、

処理を分岐する事でフォーム上のコントロールの数は知れたものになるのでないかと思います。
視認性は悪くなりますが、該当箇所を絞れるので運用は容易になるかと思います。

シートの行番号や列番号で制御できますし
初めにレンジオブジェクトへセットすれば、セルの値に依存しながら(セルの値が変わればレンジ変数の値も変わります)セットすることも出来ます。
変えたくない場合は2次配列で取得しておく方法もあります。

このような事が無ければ、クラスやプロパティを作る機会もないと思いますのでとことん追求するのも良いと思いますが、つい簡単な方法を考えてしまいます。。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!