Share via


ユーザーコントロールからコントロールの値を Sheet(n) クラスのコードに渡す方法

技術的なブログだけだと味がない(いや、それでいいかも。)ので、今日から毎回、"今日のみちしるべ" (笑)と題して、最近、流行りの一言コメント(?)を入れていきたいと思います。飛ばされたい方は本編から入ってください。

[今日のみちしるべ 第一回 たいやきくん]

土日の空いた時間を使って、コードを書いていると、日ごろの疲れのせいか、いやいや書いているような感じになり、あまり、頭が働きません。

なので、だらだらしてしまい、余計、非効率になってしまいます。この頭が働かない理由は、たぶん、運動不足に陥っているのかなと思います。

やはり、適度な運動があって、頭がすっきりするのかなと思い、今日は、久々に近くの市民プールに泳ぎに行きました。

2か月前まで、週に多いときで3回ほど、通っていたのですが、風邪をひいたり、週末プログラマーだったりで、ここしばらく行けておりませんでした。

あまりにも久々だったので、はしゃぎすぎて、「初めて海を見た、たいやきくん(?)」のように泳ぎまくりました。

帰ってきて、躓いていたロジックの部分を見るとあれよあれよという間にできました。

うーん。なんでだろうという感じです。でも、まあ、間違いなく運動の効果だと思います。なので、適度な運動は忙しくても続けたいです。

続けるのは本当に大事です。

続けていけば、数年前まで、コードを書いていなかった僕もそこそこかけるようになり、また、25メートル泳ぐのが精いっぱいだった私も数キロ泳げるようになっています。(すみません。自慢ではないです。継続って大事だと心から思っています。)

[本編]

では、本編に入ります。

タイトルの内容の要約ですが、

ユーザーコントロール(作業ウィンドウ)の値を Sheet のコードに適用させるということです。

例えば、作業ウィンドウの DateTimePicker コントロールの値は作業ウィンドウのコントロールから、Globals オブジェクトを利用して、シートのコントロールやセルなどに送りこむことはできます。

例)Globals.Sheet1.Range("A14").cells.value = DateTimePicker1.value

image

しかし、この DateTimePicker の値を Sheet1 で使おうとした場合はどうでしょう。

最初に浮かぶのはクラスを使って、渡すという方法が考えられるかもしれません。

それでも可能なのですが、いちいち、クラスを使うということも面倒かもしれません。

今回、ご紹介する方法は、Sheet の Sub プロシージャーを作成して、そこに値を渡し利用する方法です。

例えば、データセットにマッピングしたリストを選択した日付の範囲で表示したい場合ですが、

Sheet1 から、ユーザーコントロールを参照できるように定義して、値を取得したとしても、現在、選択されている日付ではなく、デフォルトの定義が渡されてしまいます。

そのような場合には、Sheet1 に以下のようなプロシージャーを作成して、ユーザーコントロールから持ってきたいコントロールの値を指定できます。

持っていきたいのは、赤字です。まず、渡し先を記載します。

Public Sub listChange(ByVal strDate As DateTime, ByVal endDate As DateTime)
    生産計画BindingSource.Filter = "日付>'" & strDate & "'AND 日付<'" & endDate & "'"
End Sub

渡し元は以下のように記載します。

Dim AddDateClass As New Sheet1
AddDateClass.listChange(DateTimePicker1.Value, DateTimePicker2.Value)

こんな感じでクラス的な使い方ができます。

これで、以下のような日付コントロールの範囲伴う、シート上の範囲を制限するような使い方が可能です。

image

いろいろと応用できると思いますので、お試しになってください。