<Access97 カレンダーコントロールから日付選択>
どうも、三流プログラマーのKen3です。 今回は、 カレンダーコントロールを使用して、 日付の選択と共通フォームの作成にチャレンジしてみたいと思います。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba095.lzh にdb97-095.mdb(Access97版)が保存されています。 何かの参考となれば、幸いです。/* * 1.今回のキッカケ */
掲示板に下記の質問をもらいました。 --------------- >カレンダーコントロールを使用して、 >日付を入力することにしました。 >しかし、今日の日付をクリックしても入力できません。 --------------- そんな質問をいただいたので、 カレンダーコントロールを使ってみます。/* * 2.カレンダーコントロールのイベントを探ってデータセット */
Access97の例ですが、 フォームの新規作成後、 挿入・ActiveXコントロール・カレンダーコントロール8.0を選択します。 () おっ、それらしいのが表示されましたね。 プロパティを見ると、 イベントもあるし、いろいろと操作できそうですね。 おっ、それらしいのが表示されましたね。 プロパティを見ると、 イベントもあるし、いろいろと操作できそうですね。 ~~~~~~~~ なんて、言ってました。 一番簡単な利用方法は、 印刷指示画面なんて画面があった時、 日付の入力・表示エリアを作成 [txt印刷日]と名前を付けました、 カレンダーコントロールを配置 [OLE_Calendar]と名前付け
その後、 [OLE_Calendar](カレンダーコントロール) の イベントで、 me!txt印刷日 = me!OLE_Calendar.Value と、入力用のテキストボックスへデータを代入でOKだろう ※考えが、甘かったんだけど(笑)
Private Sub OLE_Calendar_Updated(Code As Integer)
Me!txt印刷日.Value = Me!OLE_Calendar.Value '更新時にテキストボックスへ代入
MsgBox "aaa2"
End Sub |
Private Sub OLE_Calendar_AfterUpdate()
Me!txt印刷日.Value = Me!OLE_Calendar.Value '更新時にテキストボックスへ代入
MsgBox "なぜプロパティに載っていない_AfterUpdateが・・・"
End Sub |
参照
VBAの編集画面では、いつものイベント群が選択できた。
参照
これで、カレンダーコントロールをクリック後、
テキストボックスに無事代入できた。
今度は、テキストボックスの値を直接入力して変えた時、
上のカレンダーも変わらないとなんかねぇと思いますよね。
これは、いつものように、
Private Sub txt印刷日_AfterUpdate()
'テキストボックスの更新後にカレンダーの値も変更したいので
If IsDate(Me!txt印刷日) Then '日付と認識できる?
Me!OLE_Calendar.Value = Me!txt印刷日
Else
MsgBox "日付として認識できませんよ・・・"
End If
End Sub |
Function INPUT_HIZUKE_Form() As String
Dim stDocName As String
Dim stLinkCriteria As String
INPUT_HIZUKE_RET = "" 'リターン値を初期化
'ダイアログモードでフォームを開く
stDocName = "日付選択"
DoCmd.OpenForm stDocName, , , stLinkCriteria, , acDialog
'リターン値をセットして、関数を終わる
'フォーム側でpublic変数にセットされていることを信じて(笑)
INPUT_HIZUKE_Form = INPUT_HIZUKE_RET
End Function |
イベントは、決定・中止の各ボタンが押されたら、
リターン値をPublic変数にセットして、フォームを閉じます
Private Sub btn決定_Click()
'グローバル変数にリターン値をセット
INPUT_HIZUKE_RET = CDate(Me!OLE_Calendar.Value)
'フォームを閉じる
DoCmd.Close
End Sub |
Private Sub btn中止_Click()
'グローバル変数にリターン値をセット
INPUT_HIZUKE_RET = "" 'リターン値は中止なので空文字にする
'フォームを閉じる
DoCmd.Close
End Sub |
Private Sub btn開始_Click()
Dim strWORK As String
strWORK = INPUT_HIZUKE_Form() '日付の入力フォームを起動
If strWORK <> "" Then '入力されていたら
Me!txt開始日 = strWORK 'フォームのリターン値をセット
End If
End Sub |
Private Sub btn終了_Click()
Dim strWORK As String
strWORK = INPUT_HIZUKE_Form() '日付の入力フォームを起動
If strWORK <> "" Then '入力されていたら
Me!txt終了日 = strWORK 'フォームのリターン値をセット
End If
End Sub |
)
と、
カレンダーコントロール挿入したけど、
これって、どのマシーンにも入っているの?
ギク、、私のもう1つのマシーンWindows XP,Access2002だと、
カレンダーコントロールは10.0だぁ・・・
(
)
テストで、Access2002で、今回のdb97-095.mdbを開いてみます。
※変換してみます。
あれ、、、そのまま変換できた・・・動いてるよ・・・
予定では、変換エラーの説明をするつもりが・・・逆になぜ?って感じだけど。
カレンダーコントロール8.0
から
カレンダーコントロール10.0
はなんとか、無事でした。
でも、97で動作したコントロールが動作しない、
新しいのに変更するなど、移植問題で苦労されている話をよく聞きます。
そういった意味でも、特殊なコントロールを使用するときは、
将来のバージョンアップを含め、注意が必要です。
サンプルファイルは、
http://www.ken3.org/vba/lzh/vba095.lzh
にdb97-095.mdb(Access97版)が保存されています。
Access2000,Access2002をお持ちの人は、
変換して動作させてみてください、動くかなぁ・・・
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
|
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]