[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.095 Access97 カレンダーコントロールから日付選択

Access97 カレンダーコントロールから日付選択

メルマガ発行内容

<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
あれ、、クリックしてもイベントが発生しない・・・ウソでしょ(笑) http://www.microsoft.com/japan/developer/library/off2000/vbaac/acevtUpdated.htm >... Access 97 に組み込まれているカレンダー コントロールでは、Updated イベン >トをサポートしません。カレンダー コントロールを含むデータベースを >以前のバージョンの Access から Access 97 に変換する場合は、カレンダー ... だってさ、、、う〜ん。。。 これってインチキ?なぜプロパティに載っていないイベント、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 下記のように、_AfterUpdateが書けるのさ、、、
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
って感じで、テキストボックスが変更されたら、 その値をカレンダーにも代入。 これで、双方向の値のやり取りができました。 えっ、そんな手数をかけなくても、 コントロールソースを同一にしろって? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ギク、、、言われてみれば、、、

/* * 3.日付選択の共通フォームをテストで作成してみた */

口直しのデザートじゃないけど、 カレンダーコントロールってコントロールなので、 フォームに配置します。 わけわかんないけど、それでいいんじゃないの? ですよね、言い方が悪かった。 えっと、画面上に表示したくない(日付のボタンが押されたら選択画面を起動) 開始日、終了日など複数のテキストボックスで選択を使いたい なんて用途があると勝手に思い込んで、 カレンダー選択フォームを作ってみます。 オレは使わないけど、勝手に作るなら作ったら? 冷たいなぁみんな(笑) チョット前、ダイアログフォームを使用して、 INPUT BOX もどきを作成しました。 No.91 Access ダイアログフォームって?何? acDialogとPublic変数を使用 http://www.ken3.org/backno/backno_vba19.html#91 ↑そのまんまなんだけど、ただ、カレンダーコントロールを使っただけ(笑) 関数仕様 Function INPUT_HIZUKE_Form() As String カレンダーコントロール付きのフォームを表示して、日付を選択させる。 選択されたらCDateで変換した日付文字列を返す。 キャンセルだったら""の空文字列を返します。 Option Compare Database Option Explicit Public INPUT_HIZUKE_RET As String 'グローバルにリターン値受取り用
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
と、モジュールに書いて、 フォーム側では、 カレンダーコントロール [OLE_Calendar] 決定ボタン [btn決定] 中止ボタン [btn中止] のコントロールを作成して、 イベントは、決定・中止の各ボタンが押されたら、 リターン値を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
なんかなぁ、工夫が無いよね。 使う方は、 日付範囲指定フォームで、 開始日 [txt開始日] [btn開始] 〜 終了日 [txt終了日] [btn終了] なんて感じの構成でテストプログラムを書くと、
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
って感じで、 strWORK = INPUT_HIZUKE_Form() '日付の入力フォームを起動 で日付選択フォームを起動、 リターン値を判断して選択されていたら自分のテキストボックスに代入 If strWORK <> "" Then '入力されていたら Me!txt終了日 = strWORK 'フォームのリターン値をセット End If と、 共通に使うことが出来ます。 日付の入力処理の隠し味として、使えそうなら使ってみてください。

/* * 4.カレンダーコントロールのバージョン */

Access97のマシーン、死んだと思ったら起動したので、 Access97でサンプル作りました。 挿入・ActiveXコントロール・カレンダーコントロール8.0を選択します。 ( ) と、 カレンダーコントロール挿入したけど、 これって、どのマシーンにも入っているの? ギク、、私のもう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をお持ちの人は、 変換して動作させてみてください、動くかなぁ・・・

/* * 5.終わりの挨拶 */

今回は、カレンダーコントロールを使って、 カレンダー選択フォームもどきを作ってみました。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.095を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・